-
+
\ No newline at end of file
diff --git a/source/_dashboards/alarm-panel.markdown b/source/_dashboards/alarm-panel.markdown
index 9d1938b50b07..6fc60fdb02aa 100644
--- a/source/_dashboards/alarm-panel.markdown
+++ b/source/_dashboards/alarm-panel.markdown
@@ -3,9 +3,14 @@ type: card
title: "Alarm panel card"
sidebar_label: Alarm panel
description: "The alarm panel card allows you to arm and disarm your alarm control panel integrations."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
-The alarm panel card allows you to arm and disarm your [alarm control panel](/integrations/#alarm) integrations.
+The alarm panel card allows you to arm and disarm your [alarm control panel](/integrations/#alarm) {% term integrations %}.
diff --git a/source/_dashboards/area.markdown b/source/_dashboards/area.markdown
index 6d9acaa9afcf..be21b487ee8f 100644
--- a/source/_dashboards/area.markdown
+++ b/source/_dashboards/area.markdown
@@ -3,9 +3,14 @@ type: card
title: "Area card"
sidebar_label: Area
description: "The area card gives control of your entities in a specified area."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
-The area card lets you control and monitor an individual area.
+The area card lets you control and monitor an individual {% term area %}.
@@ -16,9 +21,9 @@ The area card lets you control and monitor an individual area.
All options for this card can be configured via the user interface.
-Buttons will appear on the card for the entities in the area including fan, light and switch. A motion sensor icon will appear in the top left if a motion sensor is in the area and motion is detected by the motion sensor.
+Buttons will appear on the card for the {% term entities %} in the area including fan, light, and switch. A motion sensor icon will appear in the top left if a motion sensor is in the area and if motion is detected by the motion sensor.
-If a camera is added to the area you can show the camera feed instead of the area picture.
+If a camera is added to the {% term area %} you can show the camera feed instead of the area picture.
## YAML configuration
@@ -56,6 +61,16 @@ theme:
required: false
description: Override the used theme for this card with any loaded theme. For more information about themes, see the [frontend documentation](/integrations/frontend/).
type: string
+alert_classes:
+ required: false
+ type: list
+ default: "moisture, motion"
+ description: A list of binary sensor device classes which will populate alert icons in the card when the state is on.
+sensor_classes:
+ required: false
+ type: list
+ default: "temperature, humidity"
+ description: A list of sensor device classes which will display their averaged sensor readings for the area.
{% endconfiguration %}
### Example
diff --git a/source/_dashboards/button.markdown b/source/_dashboards/button.markdown
index 88ce2c1eba71..c7eed878e8cf 100644
--- a/source/_dashboards/button.markdown
+++ b/source/_dashboards/button.markdown
@@ -3,6 +3,15 @@ type: card
title: "Button card"
sidebar_label: Button
description: "The Button card allows you to add buttons to perform tasks."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /docs/scripts/
+ title: Scripts
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The button card allows you to add buttons to perform tasks.
diff --git a/source/_dashboards/calendar.markdown b/source/_dashboards/calendar.markdown
index 18ae6b31661c..940a45c7fe69 100644
--- a/source/_dashboards/calendar.markdown
+++ b/source/_dashboards/calendar.markdown
@@ -3,9 +3,14 @@ type: card
title: "Calendar card"
sidebar_label: Calendar
description: "The calendar card displays your calendar entities in a month, day and list view"
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
-The calendar card displays your [calendar](/integrations/#calendar) entities in a month, day and list view (7 days).
+The calendar card displays your [calendar](/integrations/#calendar) {% term entities %} in a month, day, and list view (7 days).
-This card will allow you to pick what data to show. Changing it in this card will influence the data in all other cards.
+This card allows you to pick what data to show. Changing it in this card will influence the data in all other cards.
Specific dates and ranges can be selected by opening the date range picker. The current period can be compared to the previous one using the compare data option within the menu.
### Example
+
```yaml
type: energy-date-selection
```
@@ -35,6 +41,7 @@ The energy usage graph card shows the amount of energy your house has consumed,
It will also show the amount of energy your have returned to the grid.
### Example
+
```yaml
type: energy-usage-graph
```
@@ -49,6 +56,7 @@ type: energy-usage-graph
The solar production graph card shows the amount of energy your solar panels have produced per source, and if setup and available the forecast of the solar production.
### Example
+
```yaml
type: energy-solar-graph
```
@@ -97,6 +105,7 @@ If setup, it will also tell you how many kWh of the energy you got from the grid
If you set `link_dashboard` to `true`, the card will include a link to the energy dashboard.
### Example
+
```yaml
type: energy-distribution
link_dashboard: true
@@ -113,6 +122,7 @@ The energy sources table card shows all your energy sources, and the correspondi
If setup, it will also show the costs and compensation per source and the total.
### Example
+
```yaml
type: energy-sources-table
```
@@ -127,6 +137,7 @@ type: energy-sources-table
The grid neutrality gauge card represents your energy dependency. If the needle is in the purple, you returned more energy to the grid than you consumed from it. If it's in the blue, you consumed more energy from the grid than you returned.
### Example
+
```yaml
type: energy-grid-neutrality-gauge
```
@@ -141,6 +152,7 @@ type: energy-grid-neutrality-gauge
The solar consumed gauge represents how much of the solar energy was used by your home and was not returned to the grid. If you frequently return a lot, try to conserve this energy by installing a battery or buying an electric car to charge.
### Example
+
```yaml
type: energy-solar-consumed-gauge
```
@@ -155,6 +167,7 @@ type: energy-solar-consumed-gauge
The carbon consumed gauge card represents how much of the energy consumed by your home was generated using non-fossil fuels like solar, wind and nuclear. It includes the solar energy you generated your self.
### Example
+
```yaml
type: energy-carbon-consumed-gauge
```
@@ -169,6 +182,7 @@ type: energy-carbon-consumed-gauge
The self-sufficiency gauge represents how self-sufficient your home is. If you rely on grid imports, this value decreases. You can increase this value by adding more solar capacity or battery storage.
### Example
+
```yaml
type: energy-self-sufficiency-gauge
```
@@ -196,3 +210,27 @@ The following example limits the number of shown devices to 5:
type: energy-devices-graph
max_devices: 5
```
+
+## Detail devices energy graph
+
+
+
+ Screenshot of the detail devices energy graph card.
+
+
+The **Detail devices energy graph** card is similar to the **Devices energy graph** card, but shows the individual usage on a time scale.
+
+By default, this card will show all your devices. Optionally, the number of devices can be limited by adding the `max_devices` option and specifying the maximum number of devices to show. If there are more devices available than shown, the devices with the highest energy usage are shown.
+
+### Examples
+
+```yaml
+type: energy-devices-detail-graph
+```
+
+The following example limits the number of shown devices to 5:
+
+```yaml
+type: energy-devices-detail-graph
+max_devices: 5
+```
diff --git a/source/_dashboards/entities.markdown b/source/_dashboards/entities.markdown
index 69f74e67c5a5..98cc7056db55 100644
--- a/source/_dashboards/entities.markdown
+++ b/source/_dashboards/entities.markdown
@@ -1,8 +1,15 @@
---
type: card
-title: "Entities Card"
+title: "Entities card"
sidebar_label: Entities
description: "The entities card is the most common type of card. It groups items together into lists."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /dashboards/header-footer/
+ title: Card header and footer
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The entities card is the most common type of card. It groups items together into lists. It can be used to display an entity's state or attribute, but also contain buttons, web links, etc.
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/entity.markdown b/source/_dashboards/entity.markdown
index c095ded88c18..12e77a61dacb 100644
--- a/source/_dashboards/entity.markdown
+++ b/source/_dashboards/entity.markdown
@@ -3,6 +3,13 @@ type: card
title: "Entity card"
sidebar_label: Entity
description: "The entity card gives you a quick overview of your entity's state"
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/header-footer/
+ title: Card header and footer
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The entity card gives you a quick overview of your entity's state.
diff --git a/source/_dashboards/gauge.markdown b/source/_dashboards/gauge.markdown
index 3a738f87fc8a..8ede3f1de0a6 100644
--- a/source/_dashboards/gauge.markdown
+++ b/source/_dashboards/gauge.markdown
@@ -1,8 +1,13 @@
---
type: card
-title: "Gauge Card"
+title: "Gauge card"
sidebar_label: Gauge
description: "The gauge card is a basic card that allows visually seeing sensor data."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The gauge card is a basic card that allows visually seeing sensor data.
diff --git a/source/_dashboards/glance.markdown b/source/_dashboards/glance.markdown
index 77319525283a..bdf2f0aa8c0d 100644
--- a/source/_dashboards/glance.markdown
+++ b/source/_dashboards/glance.markdown
@@ -3,6 +3,13 @@ type: card
title: "Glance card"
sidebar_label: Glance
description: "The glance card is useful to group multiple sensors in a compact overview."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The glance card is useful to group multiple sensors in a compact overview. Keep in mind that this can be used together with [entity-filter](/dashboards/entity-filter/) cards to create dynamic cards.
diff --git a/source/_dashboards/grid.markdown b/source/_dashboards/grid.markdown
index bb0fee776768..706f93d0a13b 100644
--- a/source/_dashboards/grid.markdown
+++ b/source/_dashboards/grid.markdown
@@ -3,6 +3,11 @@ type: card
title: "Grid card"
sidebar_label: Grid
description: "The grid card allows you to show multiple cards in a grid."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The grid card allows you to show multiple cards in a grid. It will first fill the columns, automatically adding new rows as needed.
@@ -70,7 +75,7 @@ square: false
cards:
- type: picture-entity
entity: group.all_lights
- image: /local/house.png
+ image: /local/house.png
- type: horizontal-stack
cards:
- type: picture-entity
diff --git a/source/_dashboards/history-graph.markdown b/source/_dashboards/history-graph.markdown
index 924956d7cf28..1ab062ad1386 100644
--- a/source/_dashboards/history-graph.markdown
+++ b/source/_dashboards/history-graph.markdown
@@ -3,6 +3,11 @@ type: card
title: "History graph card"
sidebar_label: History graph
description: "The history graph card allows you to display a graph for each of the entities listed."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The history graph card allows you to display a graph for each of up to eight entities.
@@ -53,6 +58,19 @@ logarithmic_scale:
description: If true, numerical values on the Y-axis will be displayed with a logarithmic scale.
type: boolean
default: false
+min_y_axis:
+ required: false
+ description: Lower bound for the Y-axis range.
+ type: float
+max_y_axis:
+ required: false
+ description: Upper bound for the Y-axis range.
+ type: float
+fit_y_data:
+ required: false
+ description: If true, configured Y-axis bounds would automatically extend (but not shrink) to fit the data.
+ type: boolean
+ default: false
{% endconfiguration %}
### Options for entities
diff --git a/source/_dashboards/horizontal-stack.markdown b/source/_dashboards/horizontal-stack.markdown
index ecf71a94c73d..ed211f7782db 100644
--- a/source/_dashboards/horizontal-stack.markdown
+++ b/source/_dashboards/horizontal-stack.markdown
@@ -3,6 +3,9 @@ type: card
title: "Horizontal stack card"
sidebar_label: Horizontal stack
description: "The horizontal stack card allows you to stack together multiple cards, so they always sit next to each other in the space of one column."
+related:
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The horizontal stack card allows you to stack together multiple cards, so they always sit next to each other in the space of one column.
diff --git a/source/_dashboards/humidifier.markdown b/source/_dashboards/humidifier.markdown
index 8b7d4bdd4ecc..759f74b357e1 100644
--- a/source/_dashboards/humidifier.markdown
+++ b/source/_dashboards/humidifier.markdown
@@ -3,6 +3,11 @@ type: card
title: "Humidifier card"
sidebar_label: Humidifier
description: "The humidifier card gives control of your humidifier entity, allowing you to change the target humidity and mode of the entity."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The humidifier card lets you control and monitor humidifiers, dehumidifiers, and hygrostat devices.
@@ -56,3 +61,4 @@ type: humidifier
entity: humidifier.bedroom
name: Bedroom Humidifier
```
+
diff --git a/source/_dashboards/iframe.markdown b/source/_dashboards/iframe.markdown
index fdaa049ed417..b3d4df4d99d0 100644
--- a/source/_dashboards/iframe.markdown
+++ b/source/_dashboards/iframe.markdown
@@ -3,10 +3,17 @@ type: card
title: "Webpage card"
sidebar_label: Webpage
description: "The webpage card allows you to embed your favorite webpage right into Home Assistant."
+related:
+ - docs: /dashboards/dashboards/#webpage-dashboard
+ title: Webpage dashboard
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The webpage card allows you to embed your favorite webpage right into Home Assistant. You can also embed files stored in your `/www` folder and reference them using `/local/`.
+The webpage card is used on the [Webpage dashboard](/dashboards/dashboards/#webpage-dashboard).
+
Windy weather radar as webpage.
@@ -16,6 +23,7 @@ The webpage card allows you to embed your favorite webpage right into Home Assis
All options for this card can be configured via the user interface.
+Note that not every webpage can be embedded due to security restrictions that some sites have in place. These restrictions are enforced by your browser and prevent embedding them into a Home Assistant dashboard.
You can't embed sites using HTTP if you are using HTTPS for your Home Assistant.
@@ -47,6 +55,11 @@ title:
required: false
description: The card title.
type: string
+allow:
+ required: false
+ description: The [Permissions Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy#iframes) of the iframe, that is, the value of the [`allow`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#allow) attribute.
+ type: string
+ default: "fullscreen"
{% endconfiguration %}
### Examples
diff --git a/source/_dashboards/light.markdown b/source/_dashboards/light.markdown
index f1cd3c965b5e..006bb3ccc827 100644
--- a/source/_dashboards/light.markdown
+++ b/source/_dashboards/light.markdown
@@ -3,6 +3,13 @@ type: card
title: "Light card"
sidebar_label: Light
description: "The light card allows you to change the brightness of the light."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The light card allows you to change the brightness of the light.
diff --git a/source/_dashboards/logbook.markdown b/source/_dashboards/logbook.markdown
index d4fdabb5c5e3..8f86938ebd3a 100644
--- a/source/_dashboards/logbook.markdown
+++ b/source/_dashboards/logbook.markdown
@@ -3,6 +3,11 @@ type: card
title: "Logbook card"
sidebar_label: Logbook
description: "The logbook card displays entries from the logbook for specific entities."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The logbook card displays entries from the logbook for specific entities.
diff --git a/source/_dashboards/map.markdown b/source/_dashboards/map.markdown
index 203859950d36..921b720db6ae 100644
--- a/source/_dashboards/map.markdown
+++ b/source/_dashboards/map.markdown
@@ -3,9 +3,16 @@ type: card
title: "Map card"
sidebar_label: Map
description: "The map card that allows you to display entities on a map"
+related:
+ - docs: /dashboards/dashboards/#map-dashboard
+ title: Map dashboard
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
-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.
@@ -38,6 +45,11 @@ auto_fit:
description: The map will follow moving `entities` by adjusting the viewport of the map each time an entity is updated.
type: boolean
default: false
+fit_zones:
+ required: false
+ description: Whether the map should consider the zones in the list of specified entities when fitting its viewport.
+ type: boolean
+ default: false
title:
required: false
description: The card title.
@@ -51,11 +63,11 @@ default_zoom:
description: The default zoom level of the map.
type: integer
default: 14 (or whatever zoom level is required to fit all visible markers)
-dark_mode:
+theme_mode:
required: false
- description: Enable a dark theme for the map.
- type: boolean
- default: false
+ description: 'Override the theme to force the map to display in either a light mode (`theme_mode: light`) or a dark mode (`theme_mode: dark`). Default (`theme_mode: auto`) will follow the theme settings.'
+ type: string
+ default: 'auto'
hours_to_show:
required: false
description: Shows a path of previous locations. Hours to show as path on the map.
@@ -129,3 +141,4 @@ entities:
focus: false
hours_to_show: 48
```
+
diff --git a/source/_dashboards/markdown.markdown b/source/_dashboards/markdown.markdown
index f1886128004b..d6145a082b24 100644
--- a/source/_dashboards/markdown.markdown
+++ b/source/_dashboards/markdown.markdown
@@ -3,6 +3,11 @@ type: card
title: "Markdown card"
sidebar_label: Markdown
description: "The Markdown card is used to render Markdown"
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The Markdown card is used to render [Markdown](https://commonmark.org/help/).
diff --git a/source/_dashboards/masonry.markdown b/source/_dashboards/masonry.markdown
index 76615e5cd524..6bbf31ccef2f 100644
--- a/source/_dashboards/masonry.markdown
+++ b/source/_dashboards/masonry.markdown
@@ -2,11 +2,29 @@
type: view
title: Masonry view
sidebar_label: Masonry (default)
-description: "The default panel layout uses a masonry algorithme."
+description: "The default panel layout uses a masonry algorithm."
+related:
+ - docs: /dashboards/panel/
+ title: Panel view
+ - docs: /dashboards/sidebar/
+ title: Sidebar view
---
The masonry view is the default view type.
-It sorts cards in columns based on their `card size`. If you want to group some cards you have to use `stack` or `grid` cards.
+
+
+
+Screenshot of the masonry view.
+
+
+Masonry sorts cards in columns based on their card size. The next card is placed below the smallest card on the dashboard.
+
+
+
+Masonry arranges cards based on size.
+
+
+To group cards, you have to use [horizontal stack](/dashboards/horizontal-stack/), [vertical stack](/dashboards/vertical-stack/), or [grid](/dashboards/grid/) cards.
{% configuration %}
type:
diff --git a/source/_dashboards/media-control.markdown b/source/_dashboards/media-control.markdown
index 0ba077b45e7f..cc620cf0cc74 100644
--- a/source/_dashboards/media-control.markdown
+++ b/source/_dashboards/media-control.markdown
@@ -3,6 +3,11 @@ type: card
title: "Media control card"
sidebar_label: Media control
description: "The media control card is used to display media player entities on an interface with easy to use controls."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The media control card is used to display [media player](/integrations/#media-player) entities on an interface with easy to use controls.
diff --git a/source/_dashboards/panel.markdown b/source/_dashboards/panel.markdown
index 8cc91c122f0d..5b98a4490169 100644
--- a/source/_dashboards/panel.markdown
+++ b/source/_dashboards/panel.markdown
@@ -3,13 +3,23 @@ type: view
title: Panel view
sidebar_label: Panel
description: "The panel view shows a single card in the full width of the screen."
+related:
+ - docs: /dashboards/masonry/
+ title: Masonry view
+ - docs: /dashboards/sidebar/
+ title: Sidebar view
---
-The view must have exactly one card. This card is rendered full-width.
+The panel view must have exactly one card. This card is rendered full-width.
+
+
+
+Screenshot of the panel view.
+
This view doesn't have support for badges.
-This view is good when using cards like `map`, `stack` or `picture-elements`.
+This view is good when using cards like [map](/dashboards/map/), [horizontal stack](/dashboards/horizontal-stack/), [vertical stack](/dashboards/vertical-stack/), [picture elements](/dashboards/picture-elements/), or [picture glance](/dashboards/picture-glance/).
{% configuration %}
type:
diff --git a/source/_dashboards/picture-elements.markdown b/source/_dashboards/picture-elements.markdown
index b494e2810dce..cdfacbf3b588 100644
--- a/source/_dashboards/picture-elements.markdown
+++ b/source/_dashboards/picture-elements.markdown
@@ -3,6 +3,13 @@ type: card
title: "Picture elements card"
sidebar_label: Picture elements
description: "The picture elements card is one of the most versatile types of cards. The cards allow you to position icons or text and even services! On an image based on coordinates."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The picture elements card is one of the most versatile types of cards.
@@ -401,7 +408,7 @@ user:
type: string
{% endconfiguration %}
-## Notes on Element Attributes
+## Notes on element attributes
### How to use the style object
diff --git a/source/_dashboards/picture-entity.markdown b/source/_dashboards/picture-entity.markdown
index e3f14b9eecc6..f17191e174b5 100644
--- a/source/_dashboards/picture-entity.markdown
+++ b/source/_dashboards/picture-entity.markdown
@@ -3,6 +3,13 @@ type: card
title: Picture entity card
sidebar_label: Picture entity
description: The picture entity card displays an entity in the form of an image. Instead of images from URL, it can also show the picture of camera entities.
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The picture entity card displays an entity in the form of an image. Instead of images from URL, it can also show the picture of `camera` entities.
@@ -137,4 +144,5 @@ tap_action:
{% endraw %}
-The filename needs to be a path that is writable by Home Assistant in your system. You may need to configure `allowlist_external_dirs` ([documentation](/docs/configuration/basic/)).
+The filename needs to be a path that is writable by Home Assistant in your system. You may need to configure `allowlist_external_dirs` ([documentation](/integrations/homeassistant/#allowlist_external_dirs)).
+
diff --git a/source/_dashboards/picture-glance.markdown b/source/_dashboards/picture-glance.markdown
index c3a55842b14f..5f591567008a 100644
--- a/source/_dashboards/picture-glance.markdown
+++ b/source/_dashboards/picture-glance.markdown
@@ -3,6 +3,13 @@ type: card
title: "Picture glance card"
sidebar_label: Picture glance
description: "The picture glance card shows an image and corresponding entity states as an icon. The entities on the right side allow toggle actions, others show the more information dialog."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The picture glance card shows an image and lets you place small icons of entity states on top of that card to control those entities from there. In the image below: the entities on the right allow toggle actions, the others show the more information dialog.
diff --git a/source/_dashboards/picture.markdown b/source/_dashboards/picture.markdown
index 5a2fca27cc0f..bc9827e14f9d 100644
--- a/source/_dashboards/picture.markdown
+++ b/source/_dashboards/picture.markdown
@@ -1,8 +1,15 @@
---
type: card
-title: "Picture Card"
+title: "Picture card"
sidebar_label: Picture
description: "The picture card allows you to set an image to use for navigation to various paths in your interface or to call a service."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The picture card allows you to set an image to use for navigation to various paths in your interface or to call a service.
diff --git a/source/_dashboards/plant-status.markdown b/source/_dashboards/plant-status.markdown
index 031def937718..a989dc0ee500 100644
--- a/source/_dashboards/plant-status.markdown
+++ b/source/_dashboards/plant-status.markdown
@@ -3,6 +3,11 @@ type: card
title: "Plant status card"
sidebar_label: Plant status
description: "The plant status card is for all the lovely botanists out there."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The plant status card is for all the lovely botanists out there.
diff --git a/source/_dashboards/sections.markdown b/source/_dashboards/sections.markdown
new file mode 100644
index 000000000000..5385e47645b1
--- /dev/null
+++ b/source/_dashboards/sections.markdown
@@ -0,0 +1,85 @@
+---
+type: view
+title: Sections (experimental)
+sidebar_label: Sections (experimental)
+description: "Lets you organize your cards in sections on a grid."
+description: "The panel view shows a single card in the full width of the screen."
+related:
+ - docs: /dashboards/masonry/
+ title: Masonry view
+ - docs: /dashboards/sidebar/
+ title: Sidebar view
+ - docs: /dashboards/panel/
+ title: Panel view
+ - docs: /blog/2024/03/04/dashboard-chapter-1/
+ title: Dashboard chapter 1 blog post
+ - docs: /dashboards/cards/#adding-cards-to-your-dashboard
+ title: Adding cards to a view
+ - docs: /dashboards/views/#adding-a-view-to-a-dashboard
+ title: Adding a new view
+---
+
+The sections view lets you organize your cards in sections on a grid.
+You can group cards without using horizontal or vertical stack cards.
+
+
+
+ A fully populated dashboard in Sections view layout
+
+
+
+
The sections view was released beginning of March 2024 and is experimental! Do not build your daily dashboard on top of it yet! We are still collecting feedback.
It is not possible to migrate dashboards into sections view.
+
+
+## Creating a sections view
+
+1. If you have multiple dashboards, in the left sidebar, select the dashboard to which you want to add the sections view.
+2. [Add a new view](/dashboards/views/#adding-a-view-to-a-dashboard) and under **View type**, select **Sections**.
+3. Select the number of columns you want to see in the new view. Select **Save**.
+4. To add a card, select the **Add card** button.
+ - Follow the [steps on adding cards](/dashboards/cards/#adding-cards-to-your-dashboard).
+
+ ![Add Section button](/images/dashboards/sections_view_add-card-or-section.png)
+
+5. To add a section, select the **Create section** button.
+6. To edit the section title, select the button.
+ - If you leave the section title empty, this line will be hidden.
+7. To delete a section, select the button.
+
+## Rearranging sections and cards
+
+In the sections view, you can rearrange sections and cards by dragging them to a new location. This is not yet possible in other views.
+
+1. To edit your dashboard, in the top right corner, select the pencil icon.
+2. To rearrange sections, hold the button and move the card.
+
+
+
+ Rearranging sections by dragging
+
+
+3. To rearrange cards, tap and hold the card and move it to your desired location.
+
+
+
+ Rearranging cards by dragging
+
+
+## Check out the demo
+
+Check out the demo from the March live stream on dashboards.
+
+
+
+## About the sections view layout
+
+To learn all about the design decisions and the grid layout used for the sections view, refer to the [Dashboard chapter 1 blog post](/blog/2024/03/04/dashboard-chapter-1/).
+
+## YAML configuration
+
+{% configuration %}
+type:
+ required: false
+ description: "`sections`"
+ type: string
+{% endconfiguration %}
diff --git a/source/_dashboards/sensor.markdown b/source/_dashboards/sensor.markdown
index 5769fb7f787a..ae181701ce75 100644
--- a/source/_dashboards/sensor.markdown
+++ b/source/_dashboards/sensor.markdown
@@ -3,6 +3,11 @@ type: card
title: "Sensor card"
sidebar_label: Sensor
description: "The sensor card gives you a quick overview of your sensors state with an optional graph to visualize change over time."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The sensor card gives you a quick overview of your sensors state with an optional graph to visualize change over time.
diff --git a/source/_dashboards/shopping-list.markdown b/source/_dashboards/shopping-list.markdown
index 0c6e77eac834..fd4061f68380 100644
--- a/source/_dashboards/shopping-list.markdown
+++ b/source/_dashboards/shopping-list.markdown
@@ -1,10 +1,16 @@
---
-type: card
title: "Shopping list card"
-sidebar_label: Shopping list
description: "The shopping list card allows you to add, edit, check-off, and clear items from your shopping list."
+description: "The panel view shows a single card in the full width of the screen."
+related:
+ - docs: /integrations/todo/
+ title: To-do list integration
+ - docs: /integrations/local_todo/
+ title: Local to-do integration
---
+Note: the shopping list card is no longer available as a card to add from the user interface. Use the [to-do list card](/dashboards/todo-list/) instead.
+
The shopping list card allows you to add, edit, check-off, and clear items from your shopping list.
@@ -39,7 +45,7 @@ theme:
### Examples
-Title Example:
+Title example:
```yaml
type: shopping-list
diff --git a/source/_dashboards/sidebar.markdown b/source/_dashboards/sidebar.markdown
index bfa851b93929..47815a9e52d6 100644
--- a/source/_dashboards/sidebar.markdown
+++ b/source/_dashboards/sidebar.markdown
@@ -3,18 +3,30 @@ type: view
title: Sidebar view
sidebar_label: Sidebar
description: "The sidebar view has 2 columns, a wide one and a smaller one on the right."
+related:
+ - docs: /dashboards/masonry/
+ title: Masonry view
+ - docs: /dashboards/panel/
+ title: Panel view
---
The sidebar view has 2 columns, a wide one and a smaller one on the right.
+
+
+Screenshot of the sidebar view used for the energy dashboard.
+
+
This view doesn't have support for badges.
-To change a view to edit mode, or to change the location of a card, enable edit mode:
-Click the menu (three dots at the top right of the screen) and then **Edit Dashboard**.
+You can set if a card should be placed in the main (left) column of the sidebar column (right), by selecting the arrow right or left arrow in the bar underneath the card.
-You can set if a card should be placed in the main (left) column of the sidebar column (right), by pressing the arrow right or left arrow in the bar underneath the card.
+
+
+Screenshot showing how to move a card between sidebar and main view.
+
-On mobile all cards are rendered in 1 column and kept in the order of the cards in the config.
+On mobile, all cards are rendered in 1 column and kept in the order of the cards in the config.
## View config:
@@ -46,4 +58,4 @@ cards:
- media_player.lounge_room
view_layout:
position: sidebar
-```
+```
\ No newline at end of file
diff --git a/source/_dashboards/statistic.markdown b/source/_dashboards/statistic.markdown
index 8e34f583fa94..e7d03df5ebf2 100644
--- a/source/_dashboards/statistic.markdown
+++ b/source/_dashboards/statistic.markdown
@@ -3,6 +3,11 @@ type: card
title: "Statistic card"
sidebar_label: Statistic
description: "The statistic card allows you to display a statistical value for an entity."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The statistic card allows you to display a statistical value for an entity.
@@ -171,4 +176,4 @@ period:
minutes: -20
seconds: -10
stat_type: change
-```
\ No newline at end of file
+```
diff --git a/source/_dashboards/statistics-graph.markdown b/source/_dashboards/statistics-graph.markdown
index 324fc602bf84..52a69b301be9 100644
--- a/source/_dashboards/statistics-graph.markdown
+++ b/source/_dashboards/statistics-graph.markdown
@@ -3,6 +3,11 @@ type: card
title: "Statistics graph card"
sidebar_label: Statistics graph
description: "The statistics graph card allows you to display a graph with statistics data for each of the entities listed."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The statistics graph card allows you to display a graph of statistics data for each of the entities listed.
@@ -17,7 +22,7 @@ Screenshot of the statistics graph card with none metered entities and `chart_ty
Screenshot of the statistics graph card with a metered entity and `chart_type` `bar`.
-Statistics are gathered every 5 minutes for sensors that support it. It will either keep the `min`, `max`, and `mean` of a sensor's value for a specific hour or the `sum` for a metered entity.
+Statistics are gathered every 5 minutes and also hourly for sensors that support it. The 5-minute statistics will be retained for the duration set in the [recorder configuration](/integrations/recorder/#purge_keep_days), and hourly statistics will be retained indefinitely. It will either keep the `min`, `max`, and `mean` of a sensor's value for a specific hour or the `sum` for a metered entity.
If your sensor doesn't work with statistics, check [this](/more-info/statistics/).
diff --git a/source/_dashboards/thermostat.markdown b/source/_dashboards/thermostat.markdown
index 1614b1b3c89a..240a89bbc80e 100644
--- a/source/_dashboards/thermostat.markdown
+++ b/source/_dashboards/thermostat.markdown
@@ -3,12 +3,17 @@ type: card
title: "Thermostat card"
sidebar_label: Thermostat
description: "The thermostat card gives control of your climate entity, allowing you to change the temperature and mode of the entity."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
-The thermostat card gives control of your [climate](/integrations/#climate) entity, allowing you to change the temperature and mode of the entity.
+The thermostat card gives control of your [climate](/integrations/#climate) {% term entity %}, allowing you to change the temperature and mode of the {% term entity %}.
-
+
Screenshot of the thermostat card.
diff --git a/source/_dashboards/tile.markdown b/source/_dashboards/tile.markdown
index cc3e80d2aefd..7dba42385ef7 100644
--- a/source/_dashboards/tile.markdown
+++ b/source/_dashboards/tile.markdown
@@ -3,9 +3,16 @@ type: card
title: "Tile card"
sidebar_label: Tile
description: "The tile card gives you a quick overview of your entity. The card allows you to toggle the entity, show the more-info dialog, or custom actions."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /dashboards/features
+ title: Card features
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
-The tile card gives you a quick overview of your entity. The card allows you to toggle the entity and show the more info dialog. A badge is shown for some entities like the [climate](/integrations/climate) or [person](/integrations/person) entities.
+The tile card gives you a quick overview of your {% term entity %}. The card allows you to toggle the {% term entity %} and show the more info dialog. A badge is shown for some {% term entities %} like the [climate](/integrations/climate) or [person](/integrations/person) {% term entities %}.
@@ -33,7 +40,7 @@ icon:
type: string
color:
required: false
- description: Set the color when the entity is active. By default, the color is based on `state`, `domain`, and `device_class` of your entity. It accepts [color token](/dashboards/tile/#available-color-tokens) or hex color code.
+ description: Set the color when the entity is active. By default, the color is based on `state`, `domain`, and `device_class` of your entity. It accepts [color token](/dashboards/tile/#available-colors) or hex color code.
type: string
default: state
show_entity_picture:
@@ -126,6 +133,7 @@ features:
- return_home
```
-## Available color tokens
+## Available colors
+
+You want to colorize the tile card? Choose one of the following colors: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black` and `white`.
-Some color tokens are available to colorize the tile card : `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black` and `white`.
\ No newline at end of file
diff --git a/source/_dashboards/todo-list.markdown b/source/_dashboards/todo-list.markdown
new file mode 100644
index 000000000000..846d6cfd7f28
--- /dev/null
+++ b/source/_dashboards/todo-list.markdown
@@ -0,0 +1,74 @@
+---
+type: card
+title: "To-do list card"
+sidebar_label: To-do list
+description: "The to-do list card allows you to add, edit, check-off, and clear items from your to-do list."
+related:
+ - docs: /dashboards/dashboards/
+ title: Dashboards
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /integrations/local_todo/
+ title: Local to-do integration
+---
+
+The to-do list card allows you to add, edit, check-off, and clear items from your to-do list.
+
+
+
+Screenshot of the to-do list card.
+
+
+## Adding a to-do list card
+
+1. [Add the card using the Add card button](/dashboards/cards/#adding-cards-to-your-dashboard).
+ - In the **By card** dialog, select the **To-do list** card.
+2. In the **Entity** dropdown menu, select your list type.
+ - If it is your first time working with to-do lists, there is only **Shopping list** in the menu.
+ - This comes from the [shopping list integration](/integrations/shopping_list/), which is installed by default.
+ - This is the same **Shopping list** as the one on the **To-do list** dashboard (accessible via sidebar).
+ ![To-do card, list entities](/images/dashboards/cards-todo.png).
+3. The to-do list card can display lists from different [to-do list](/integrations/#to-do-list) integrations, such as **Bring!** or **Todoist**.
+ - If you don't see your desired to-do list entity, you need to add its integration first.
+ - Once you've added a to-do list integration, the lists are also available on the to-do list dashboard.
+
+## YAML configuration
+
+All options for this card can be configured via the user interface.
+
+The following YAML options are available when you use YAML mode or just prefer to use YAML in the code editor in the UI.
+
+{% configuration %}
+type:
+ required: true
+ description: "`todo-list`"
+ type: string
+entity:
+ required: true
+ description: The to-do entity to show
+ type: string
+title:
+ required: false
+ description: Title of to-do list.
+ type: string
+theme:
+ required: false
+ description: Override the used theme for this card with any loaded theme. For more information about themes, see the [frontend documentation](/integrations/frontend/).
+ type: string
+{% endconfiguration %}
+
+### Examples
+
+Title example:
+
+```yaml
+type: todo-list
+entity: todo-list
+title: todo list
+```
diff --git a/source/_dashboards/vertical-stack.markdown b/source/_dashboards/vertical-stack.markdown
index 0e13b9ce21ef..56212aec5358 100644
--- a/source/_dashboards/vertical-stack.markdown
+++ b/source/_dashboards/vertical-stack.markdown
@@ -3,6 +3,9 @@ type: card
title: "Vertical stack card"
sidebar_label: Vertical stack
description: "The vertical stack card allows you to group multiple cards so they always sit in the same column."
+related:
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The vertical stack card allows you to group multiple cards so they always sit in the same column.
@@ -71,3 +74,4 @@ cards:
Create a grid layout using vertical and horizontal stack.
+
diff --git a/source/_dashboards/weather-forecast.markdown b/source/_dashboards/weather-forecast.markdown
index 5e6f3a4e1980..2ef074996505 100644
--- a/source/_dashboards/weather-forecast.markdown
+++ b/source/_dashboards/weather-forecast.markdown
@@ -3,6 +3,11 @@ type: card
title: "Weather forecast card"
sidebar_label: Weather forecast
description: "The weather forecast card displays the weather. Very useful to include on interfaces that people display on the wall."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The weather forecast card displays the weather. This card is particularly useful on wall-mounted displays.
diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml
index af8e517f322a..4b0ed4611a53 100644
--- a/source/_data/glossary.yml
+++ b/source/_data/glossary.yml
@@ -3,20 +3,30 @@
# Format is a list of terms, each term is a dictionary with the following keys:
# - term: The term to define (required)
# - definition: The definition of the term (required)
-# - excerpt: Short excerpt of the definition, overrides definition for tooltips (optional)
+# - excerpt: Short excerpt of the definition, overrides definition for tooltips
+# (optional)
# - link: A URL to link to for more information (optional)
# - aliases: A list of aliases for the term (optional)
#
- term: Action
definition: |-
- Actions are used in several places in Home Assistant. As part of a script or automation, actions define what is going to happen once a trigger is activated. In scripts, an action is called *sequence*.
- Actions use service calls and/or scenes to interact with entities and cause these entities to do something. Actions can also include conditions and a delay. An action can call multiple services at the same time. For example, if your presence is detected in a room, an action may call one service to turn on a light and call another service to start playing music after a delay.
- Actions are also used on the dashboard, for example as tap or hold action on a UI element. When triggered, the action calls a service.
+ Actions are used in several places in Home Assistant. As part of a script or
+ automation, actions define what is going to happen once a trigger is
+ activated. In scripts, an action is called *sequence*. Actions use service
+ calls and/or scenes to interact with entities and cause these entities to do
+ something. Actions can also include conditions and a delay. An action can
+ call multiple services at the same time. For example, if your presence is
+ detected in a room, an action may call one service to turn on a light and
+ call another service to start playing music after a delay. Actions are also
+ used on the dashboard, for example as tap or hold action on a UI element.
+ When triggered, the action calls a service.
aliases:
- actions
link: /docs/automation/action/
excerpt: >
- Actions are used in several places in Home Assistant. As part of a script or automation, actions define what is going to happen once a trigger is activated. In scripts, an action is called *sequence*.
+ Actions are used in several places in Home Assistant. As part of a script or
+ automation, actions define what is going to happen once a trigger is
+ activated. In scripts, an action is called *sequence*.
- term: Add-on
definition: >-
Add-ons are additional standalone third-party software packages that can be
@@ -28,21 +38,29 @@
installed on Home Assistant OS.
- term: Area
definition: >-
- Locations within your home such as living room, dance floor, etc.
- Devices can be associated to an area for easier sorting and automatically
- generated cards, such as the [Area card](/dashboards/area/).
+ An area in Home Assistant is a logical grouping of devices and entities that
+ are meant to match areas (or rooms) in the physical world: your home. For
+ example, the `living room` area groups devices and entities in your living
+ room. Areas allow you to target service calls at an entire group of devices.
+ For example, turning off all the lights in the living room. Locations within
+ your home such as living room, dance floor, etc. Areas can be assigned to
+ floors. Areas can also be used for automatically generated cards, such as
+ the [Area card](/dashboards/area/).
excerpt: >-
- Places within your home such as rooms, spaces, etc.
+ An area in Home Assistant is a logical grouping of devices and entities that
+ are meant to match areas (or rooms) in the physical world: your home. For
+ example, the `living room` area groups devices and entities in your living
+ room.
aliases:
- areas
- term: Automation
definition: >-
- Automations connect one or more triggers to one or more actions in a
- 'when trigger then do action' fashion with additional optional conditions.
- For example, an automation might connect the trigger 'sunset' to the action
+ Automations connect one or more triggers to one or more actions in a 'when
+ trigger then do action' fashion with additional optional conditions. For
+ example, an automation might connect the trigger 'sunset' to the action
'turn the lights on' but only if the condition 'someone is home' is met.
- Pre-made automations for common use-cases are available via
- [the blueprints feature](/docs/automation/using_blueprints/).
+ Pre-made automations for common use-cases are available via [the blueprints
+ feature](/docs/automation/using_blueprints/).
excerpt: >-
Automations in Home Assistant allow you to automatically respond to things
that happen in and around your home.
@@ -51,14 +69,14 @@
- automations
- term: Backup
definition: >-
- Home Assistant has built-in functionality to create files containing a copy of
- your configuration. This can be used to restore your Home Assistant as well
- as migrate to a new system. The backup feature is available on some installation
- types.
+ Home Assistant has built-in functionality to create files containing a copy
+ of your configuration. This can be used to restore your Home Assistant as
+ well as migrate to a new system. The backup feature is available on some
+ installation types.
link: /integrations/backup/
excerpt: >-
- Home Assistant has built-in functionality to create files containing a copy of
- your configurations. This is available on certain installation types.
+ Home Assistant has built-in functionality to create files containing a copy
+ of your configurations. This is available on certain installation types.
aliases:
- backups
- term: Binary sensor
@@ -68,41 +86,85 @@
link: /integrations/binary_sensor
- term: Blueprint
definition: >-
- A blueprint is a script or automation configuration with certain parts marked as configurable. This allows users to create multiple scripts or automations based on the same blueprint, with each having its own configuration-specific settings. Blueprints are shared by the community on the [blueprints exchange](https://community.home-assistant.io/c/blueprints-exchange/53) in the forum.
+ A blueprint is a script or automation configuration with certain parts
+ marked as configurable. This allows users to create multiple scripts or
+ automations based on the same blueprint, with each having its own
+ configuration-specific settings. Blueprints are shared by the community on
+ the [blueprints
+ exchange](https://community.home-assistant.io/c/blueprints-exchange/53) in
+ the forum.
link: /docs/blueprint/
excerpt: >-
- A blueprint is a script or automation configuration with certain parts marked as configurable. This allows users to create multiple scripts or automations based on the same blueprint, with each having its own configuration-specific settings.
+ A blueprint is a script or automation configuration with certain parts
+ marked as configurable. This allows users to create multiple scripts or
+ automations based on the same blueprint, with each having its own
+ configuration-specific settings.
aliases:
- blueprints
+- term: Category
+ definition: >-
+ A category is an organization tool that allows grouping items in a table.
+ Like labels, categories allow grouping irrespective of the items' physical
+ location. For example, on the automations page, you can create the
+ categories “Notifications” or “NFC tags” to view your automations grouped or
+ filtered. Categories are unique for each table. The automations page can
+ have different categories than the scene, scripts, or helpers settings page.
+ aliases:
+ - categories
+- term: Commissioning
+ definition: >-
+ In the context of Matter devices, *commissioning* is the process of adding a
+ device to a Matter controller. It is the equivalent of pairing a device in
+ Zigbee or Z-Wave. Commissioning is done by scanning a QR code or entering a
+ code manually. The code is printed on the device or its packaging. The code
+ contains information about the device, such as its type, manufacturer, and
+ serial number. The controller uses this information to identify the device
+ and to download the required information to control the device. For example,
+ the controller downloads the device's capabilities, such as the supported
+ commands and the available attributes. The controller also downloads the
+ device's configuration, such as the device's name and location.
+ link: /integrations/matter/
+ aliases:
+ - commission
+ excerpt: >
+ In the context of Matter devices, *commissioning* is the process of adding a
+ device to a Matter controller. It is the equivalent of pairing a device in
+ Zigbee or Z-Wave.
- term: Component
definition: >-
Better known as: Integrations. Integrations used to be known as components.
- term: Condition
definition: >-
- Conditions are an optional part of an automation that will prevent an
- action from firing if they are not met.
+ Conditions are an optional part of an automation that will prevent an action
+ from firing if they are not met.
link: /docs/scripts/conditions/
aliases:
- conditions
- term: Cover
definition: >-
- Covers are devices such as blinds, garage doors, etc that can be opened
- and closed and optionally set to a specific position.
+ Covers are devices such as blinds, garage doors, etc that can be opened and
+ closed and optionally set to a specific position.
link: /integrations/cover
- term: Customize
definition: >-
- Customization allows you to overwrite the default parameters of your
- devices in the configuration.
+ Customization allows you to overwrite the default parameters of your devices
+ in the configuration.
- term: Device
definition: |-
- A device is a model representing a physical or logical unit that contains entities.
- **Example for a device as a physical unit**
- A smart plug named 'Coffee machine' which provides 2 entities: a `switch` entity to turn power on or off ('Coffee machine power switch') and a `sensor` entity for power monitoring ('Coffee machine power sensor').
- **Example for a device as a logical unit**
- An ecobee thermostat with 4 room sensors. This thermostat is seen as 5 devices in Home Assistant: 1 device for the thermostat with 4 sensors, and 1 device for each room sensor. Each device can be in a different area and may have more than one input or output within that area.
- Devices have properties such as ID, manufacturer, name, model, hardware version, firmware version, connections, etc.
+ A device is a model representing a physical or logical unit that contains
+ entities. **Example for a device as a physical unit** A smart plug named
+ 'Coffee machine' which provides 2 entities: a `switch` entity to turn power
+ on or off ('Coffee machine power switch') and a `sensor` entity for power
+ monitoring ('Coffee machine power sensor'). **Example for a device as a
+ logical unit** An ecobee thermostat with 4 room sensors. This thermostat is
+ seen as 5 devices in Home Assistant: 1 device for the thermostat with 4
+ sensors, and 1 device for each room sensor. Each device can be in a
+ different area and may have more than one input or output within that area.
+ Devices have properties such as ID, manufacturer, name, model, hardware
+ version, firmware version, connections, etc.
excerpt: >
- A device is a model representing a physical or logical unit that contains entities.
+ A device is a model representing a physical or logical unit that contains
+ entities.
aliases:
- devices
- term: Device tracker
@@ -115,35 +177,43 @@
they are discovered.
- term: Domain
definition: >-
- Each integration in Home Assistant has a unique identifier:
- a domain. All of the entities and services available in Home Assistant
- are provided by integrations and thus belong to such a domain. The first
- part of the entity or service, before the `.` shows the domain they belong
- to. For example `light.kitchen` is an entity in the `light` domain from
- the [light integration](/integrations/light), while `hue.activate_scene`
- is the `activate_scene` service for the `hue` domain which belongs to
- the [Hue integration](/integrations/hue).
+ Each integration in Home Assistant has a unique identifier: a domain. All of
+ the entities and services available in Home Assistant are provided by
+ integrations and thus belong to such a domain. The first part of the entity
+ or service, before the `.` shows the domain they belong to. For example
+ `light.kitchen` is an entity in the `light` domain from the [light
+ integration](/integrations/light), while `hue.activate_scene` is the
+ `activate_scene` service for the `hue` domain which belongs to the [Hue
+ integration](/integrations/hue).
excerpt: >
- Each integration in Home Assistant has a unique identifier: The domain.
- It is often shown as the first part (before the dot) of entity IDs.
+ Each integration in Home Assistant has a unique identifier: The domain. It
+ is often shown as the first part (before the dot) of entity IDs.
aliases:
- domains
- term: Entity
definition: |-
- An entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. Entities have states.
- **Example for entities as part of a device**
- A combined temperature and humidity sensor device provides two sensor entities. One for temperature (e.g. `sensor.temperature` with state `21.0` and unit `°C`) and one for humidity
- (e.g. `sensor.humidity` with state `65.4` and unit `%`).
- **Example for entities as part of a service**
- A weather service that provides 3 entities: wind speed, air pressure, and ozon level.
- **Example of an entity used for control**
- A fan that is turned on when the temperature exceeds 30 °C.
- There are standardized types of entities for common integrations such as light, switch, camera, sensor, fan, or vacuum.
- Some entities are not part of a device or service. Examples of standalone entities are automation, script, scene entities, and helper entities (e.g. input helpers).
- Most properties of entities are related to the state. Entities have optional attributes such as friendly name, unit of measurement, and an icon or picture that can be displayed in the frontend.
+ An entity represents a sensor, actor, or function in Home Assistant.
+ Entities are used to monitor physical properties or to control other
+ entities. An entity is usually part of a device or a service. Entities have
+ states. **Example for entities as part of a device** A combined temperature
+ and humidity sensor device provides two sensor entities. One for temperature
+ (e.g. `sensor.temperature` with state `21.0` and unit `°C`) and one for
+ humidity (e.g. `sensor.humidity` with state `65.4` and unit `%`). **Example
+ for entities as part of a service** A weather service that provides 3
+ entities: wind speed, air pressure, and ozon level. **Example of an entity
+ used for control** A fan that is turned on when the temperature exceeds
+ 30 °C. There are standardized types of entities for common integrations
+ such as light, switch, camera, sensor, fan, or vacuum. Some entities are not
+ part of a device or service. Examples of standalone entities are automation,
+ script, scene entities, and helper entities (e.g. input helpers). Most
+ properties of entities are related to the state. Entities have optional
+ attributes such as friendly name, unit of measurement, and an icon or
+ picture that can be displayed in the frontend.
link: /docs/configuration/state_object/
excerpt: >
- An entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service.
+ An entity represents a sensor, actor, or function in Home Assistant.
+ Entities are used to monitor physical properties or to control other
+ entities. An entity is usually part of a device or a service.
aliases:
- entities
- term: Event
@@ -152,10 +222,28 @@
link: /docs/configuration/events/
aliases:
- events
+- term: Floor
+ definition: >-
+ A floor in Home Assistant is a logical grouping of areas that are meant to
+ match the physical floors in your home. Devices & entities are not assigned
+ to floors but to areas. A floor has properties such as: Floor ID, name,
+ aliases (for use in assistants), an icon, and a floor level. Some of these
+ properties are optional. The level number can be negative to reflect floors
+ below the basement. Floors can be used in automations and scripts as a
+ target for actions. For example, to turn off all the lights on the
+ downstairs floor when you go to bed.
+ excerpt: >-
+ A floor in Home Assistant is a logical grouping of areas that are meant to
+ match the physical floors in your home. Devices & entities are not assigned
+ to floors but to areas. Floors can be used in automations and scripts as a
+ target for actions. For example, to turn off all the lights on the
+ downstairs floor when you go to bed.
+ aliases:
+ - floors
- term: Frontend
definition: >-
- The frontend is a necessary component for the UI, it is also where you
- can define your themes.
+ The frontend is a necessary component for the UI, it is also where you can
+ define your themes.
link: /integrations/frontend/
- term: Group
definition: >-
@@ -165,66 +253,90 @@
- groups
- term: HASS
definition: >-
- HASS or [hass](/docs/tools/hass/) is often used as an abbreviation for
- Home Assistant. It is also the command-line tool.
+ HASS or [hass](/docs/tools/hass/) is often used as an abbreviation for Home
+ Assistant. It is also the command-line tool.
- term: HassOS
definition: >-
Another name for Home Assistant Operating System
link: /hassio/installation/
+- term: Home Assistant Container
+ definition: >-
+ Home Assistant Container is a standalone container-based installation of
+ Home Assistant Core. Any [OCI](https://opencontainers.org/) compatible
+ runtime can be used, but the documentation focus is on Docker.
+ link: /installation/#advanced-installation-methods
- term: Home Assistant Core
definition: >-
- Home Assistant Core is a Python program. It can be run on various operating
- systems and is the basis for Home Assistant. When people are talking about
- Home Assistant Core they usually refer to a standalone installation method
- that can be installed using a Virtual Environment or Docker. Home Assistant
- Core does not use the Home Assistant Supervisor.
+ Home Assistant Core is the Python program at the heart of Home Assistant. It
+ is part of all of the four installation types and can be run on various
+ operating systems. It can be installed standalone (without Home Assistant
+ Supervisor), using a Virtual Environment (typically referred to as Home
+ Assistant Core installation method) or as a container using Docker
+ (typically referred to as Home Assistant Container installation method).
+ link: /installation/#advanced-installation-methods
excerpt: >
- Home Assistant Core is the hart of Home Assistant itself. It is a Python
- program that powers every installation type, but can be installed standalone.
+ Home Assistant Core is the heart of Home Assistant itself. It is a Python
+ program that powers every installation type, but can be installed
+ standalone.
- term: Home Assistant Supervised
definition: >-
- Home Assistant Supervised is a full UI managed home automation ecosystem that
- runs Home Assistant, the Home Assistant Supervisor and add-ons. It comes
- pre-installed on Home Assistant OS, but can be installed on any Linux system.
- It leverages Docker, which is managed by the Home Assistant Supervisor.
+ Home Assistant Supervised is a full UI managed home automation ecosystem
+ that runs the Home Assistant Core program, the Home Assistant Supervisor and
+ add-ons. It comes pre-installed on Home Assistant OS, but can be installed
+ standalone on Debian Linux systems. It leverages Docker, which is managed by
+ the Home Assistant Supervisor.
excerpt: >
Home Assistant Supervised is the full Home Assistant ecosystem, without the
Home Assistant Operating System.
+ link: /installation/#advanced-installation-methods
- term: Home Assistant Supervisor
definition: >-
The Home Assistant Supervisor is a program that manages a Home Assistant
installation, taking care of installing and updating Home Assistant,
- add-ons, itself and, if used, updating the Home Assistant Operating System.
+ add-ons, itself, and, if used, updating the Home Assistant Operating System.
+ link: /installation/#advanced-installation-methods
- term: Home Assistant Operating System
definition: >-
Home Assistant OS, the Home Assistant Operating System, is an embedded,
minimalistic, operating system designed to run the Home Assistant ecosystem
- on single board computers (like the Raspberry Pi) or Virtual Machines.
- The Home Assistant Supervisor can keep it up to date, removing the need for
- you to manage an operating system.
+ on single board computers (like the Raspberry Pi) or Virtual Machines. It
+ includes Home Assistant Core, the Home Assistant Supervisor, and supports
+ add-ons. Home Assistant Supervisor keeps it up to date, removing the need
+ for you to manage an operating system. Home Assistant Operating System is
+ the recommended installation method for most users.
excerpt: >
Home Assistant OS, the Home Assistant Operating System, is an embedded,
minimalistic, operating system designed to run the Home Assistant ecosystem.
+ It is the recommended installation method for most users.
+ link: /installation/#advanced-installation-methods
- term: Host
definition: >-
- A device that can communicate with other devices on a network. During setup and configuration,
- an input requesting a **Host** typically refers to a device's network address so that
- Home Assistant can attempt to connect to it. This may be in the form of a hostname, URL,
- IP address or some other type of network identifier. If you do not know the hostname or IP address of a device, you can find it in your router's webinterface. For example, if your device is connected wirelessly, somewhere there is a page listing all the devices that are connected to your network. It depends on your router, where exactly this page is. It could be under **Network** > **Wireless**.
+ A device that can communicate with other devices on a network. During setup
+ and configuration, an input requesting a **Host** typically refers to a
+ device's network address so that Home Assistant can attempt to connect to
+ it. This may be in the form of a hostname, URL, IP address or some other
+ type of network identifier. If you do not know the hostname or IP address of
+ a device, you can find it in your router's webinterface. For example, if
+ your device is connected wirelessly, somewhere there is a page listing all
+ the devices that are connected to your network. It depends on your router,
+ where exactly this page is. It could be under **Network** > **Wireless**.
excerpt: >-
- A device that participates in your network. If asked for the host, enter either the device's IP address or host name. If you don't know those, check the list of hosts in your router.
+ A device that participates in your network. If asked for the host, enter
+ either the device's IP address or host name. If you don't know those, check
+ the list of hosts in your router.
link: https://en.wikipedia.org/wiki/Host_(network)
aliases:
- hosts
- term: Integration
definition: >-
Integrations connect and integrate Home Assistant with devices, services,
- and more. They contain all the logic to handle
- vendor- and device-specific implementations, such as authentication or
- specific protocols. The integration brings such device-specific elements into Home Assistant in a standardized
- way. For example, the [Hue](/integrations/hue) integration integrates
- the Philips Hue bridge and its connected bulbs into Home Assistant, making
- them available as Home Assistant light entities you can control.
+ and more. They contain all the logic to handle vendor- and device-specific
+ implementations, such as authentication or specific protocols. The
+ integration brings such device-specific elements into Home Assistant in a
+ standardized way. For example, the [Hue](/integrations/hue) integration
+ integrates the Philips Hue bridge and its connected bulbs into Home
+ Assistant, making them available as Home Assistant light entities you can
+ control.
excerpt: >
Integrations connect and integrate Home Assistant with your devices,
services, and more.
@@ -233,17 +345,40 @@
- integrations
- term: Intent
definition: >-
- Intent is a term used with voice assistants. The intent is what Home Assistant thinks you want it to do when it extracts a command from your voice or text utterance. Currently, the following intents are supported out of the box: HassTurnOn, HassTurnOff, HassGetState, and HassLightSet.
- These intents allow you to turn things on or off, inquire about a state, or change the brightness or color of a light.
+ Intent is a term used with voice assistants. The intent is what Home
+ Assistant thinks you want it to do when it extracts a command from your
+ voice or text utterance. Currently, the following intents are supported out
+ of the box: HassTurnOn, HassTurnOff, HassGetState, and HassLightSet. These
+ intents allow you to turn things on or off, inquire about a state, or change
+ the brightness or color of a light.
excerpt: >
- Intent is a term used with voice assistants. The intent is what Home Assistant thinks you want it to do when it extracts a command from your voice or text utterance.
+ Intent is a term used with voice assistants. The intent is what Home
+ Assistant thinks you want it to do when it extracts a command from your
+ voice or text utterance.
link: https://developers.home-assistant.io/docs/intent_builtin
aliases:
- Intents
+- term: Label
+ definition: >-
+ Labels in Home Assistant allow grouping elements irrespective of their
+ physical location or type. Labels can be assigned to areas, devices,
+ entities, automations, scenes, scripts, and helpers. Labels can be used in
+ automations and scripts as a target for actions and services. Labels can
+ also be used to filter data. For example, you can filter the list of devices
+ to show only devices with the label `heavy energy usage` or turn these
+ devices off when there is not a lot of solar energy available.
+ excerpt: >-
+ Labels in Home Assistant allow grouping elements irrespective of their
+ physical location or type. Labels can be assigned to areas, devices,
+ entities, automations, scenes, scripts, and helpers. Labels can be used in
+ automations and scripts as a target for actions and services. Labels can
+ also be used to filter data.
+ aliases:
+ - labels
- term: Lovelace
definition: >-
- Lovelace is the original code name of the UI that is now known as
- [Home Assistant dashboards](/dashboards).
+ Lovelace is the original code name of the UI that is now known as [Home
+ Assistant dashboards](/dashboards).
- term: Light
definition: >-
A light has a brightness you can control, and optionally color temperature
@@ -251,9 +386,17 @@
link: /integrations/light
- term: Matter
definition: >-
- Matter is an open-source standard that defines how to control smart home devices on a Wi-Fi or Thread network. The aim of the standard is to improve security and to make devices interoperable across vendors, replacing proprietary protocols for smart home ecosystems. Unlike other standards, Matter allows joining the same device to multiple controllers. For example, you can add a light to Google Home, Apple Home, and Home Assistant at the same time. A bridge device can be used to connect devices running on other smart home technologies such as Zigbee or Z-Wave.
+ Matter is an open-source standard that defines how to control smart home
+ devices on a Wi-Fi or Thread network. The aim of the standard is to improve
+ security and to make devices interoperable across vendors, replacing
+ proprietary protocols for smart home ecosystems. Unlike other standards,
+ Matter allows joining the same device to multiple controllers. For example,
+ you can add a light to Google Home, Apple Home, and Home Assistant at the
+ same time. A bridge device can be used to connect devices running on other
+ smart home technologies such as Zigbee or Z-Wave.
excerpt: >
- Matter is an open-source standard that defines how to control smart home devices on a Wi-Fi or Thread network.
+ Matter is an open-source standard that defines how to control smart home
+ devices on a Wi-Fi or Thread network.
link: /integrations/matter
- term: Notification
definition: >-
@@ -272,8 +415,8 @@
Platforms are building blocks provided by some integrations to be used by
other integrations. For example, the [Light](/integrations/light)
integration provides the `light platform` that is utilized by all
- integrations providing `light` entities such
- as e.g. [Hue](/integrations/hue).
+ integrations providing `light` entities such as e.g.
+ [Hue](/integrations/hue).
excerpt: >
Platforms are building blocks provided by some integrations to be used by
other integrations.
@@ -283,78 +426,97 @@
- term: Reload
definition: >-
Applies the changes made to the Home Assistant configuration files. Changes
- are normally automatically updated. However, changes made outside of the front
- end will not be reflected in Home Assistant and require a reload.
- To perform a manual reload, go to **Settings** > **System** >
- **Restart Home Assistant** (top right) > **Quick reload**. More granular
- reload options are available in *YAML configuration reloading* section
- in **Developer tools** > **YAML**.
+ are normally automatically updated. However, changes made outside of the
+ front end will not be reflected in Home Assistant and require a reload. To
+ perform a manual reload, go to **Settings** > **System** > **Restart Home
+ Assistant** (top right) > **Quick reload**. If you do not see the **Quick
+ reload** option in the menu, you need to enable **Advanced mode** in your
+ user settings. More granular reload options are available in *YAML
+ configuration reloading* section in **Developer tools** > **YAML**.
excerpt: >
- Applies the changes made to Home Assistant configuration files. Changes are normally
- automatically updated. However, changes made outside of the front
+ Applies the changes made to Home Assistant configuration files. Changes are
+ normally automatically updated. However, changes made outside of the front
end will not be reflected in Home Assistant and require a reload.
- term: Scene
definition: >-
- Scenes capture the states you want certain entities to be. For example,
- a scene can specify that light A should be turned on and light B should
- be bright red.
+ Scenes capture the states you want certain entities to be. For example, a
+ scene can specify that light A should be turned on and light B should be
+ bright red.
link: /integrations/scene/
aliases:
- scenes
- term: Script
definition: >
- Scripts are components that allow users to specify a sequence of actions
- to be executed by Home Assistant when turned on.
+ Scripts are components that allow users to specify a sequence of actions to
+ be executed by Home Assistant when turned on.
link: /docs/scripts/
aliases:
- scripts
- term: Sensor
definition: >-
- Sensors return information about a thing, for instance the level of water
- in a tank.
+ Sensors return information about a thing, for instance the level of water in
+ a tank.
link: /integrations/sensor/
aliases:
- sensors
- term: Selector
definition: >-
- Selectors are components for the user interface. Some selectors can,
- for example, show a toggle button to turn something on or off, while another
+ Selectors are components for the user interface. Some selectors can, for
+ example, show a toggle button to turn something on or off, while another
select can filter a list of devices to show only devices that have
motion-sensing capabilities.
excerpt: >
- Selectors are components for the user interface. Like toggle, dropdown,
- and more.
+ Selectors are components for the user interface. Like toggle, dropdown, and
+ more.
link: /docs/blueprint/selectors/
aliases:
- selectors
- term: Service
definition: |-
- The term service has 2 meanings in Home Assistant:
- **The information service**
- For example, the municipal waste management service that provides entities for organic, paper, and packaging waste. In terms of functionality, the information service is like a device. It is called *service* to avoid confusion, as it does not come with a piece of hardware.
- **The software function that interacts with targets to make something happen**
- A service carries out one specific task, for example: turning on the light in the living room or sending a notification to a mobile phone.
- A service has targets and data. Service targets are: areas, devices, and entities. Service data carries the information required to define the desired state change in the target. For example, the target, together with brightness 150 and RGB color `[255,0,0]`, or the message “Your coffee is ready”.
- Services can be used in, for example, automation, scripts, dashboards, or voice commands to control your home.
- Home Assistant provides a series of predefined services, such as `homeassistant.turn_on`, `homeassistant.toggle`, or `homeassistant.reload`.
+ The term service has 2 meanings in Home Assistant: **The information
+ service** For example, the municipal waste management service that provides
+ entities for organic, paper, and packaging waste. In terms of functionality,
+ the information service is like a device. It is called *service* to avoid
+ confusion, as it does not come with a piece of hardware. **The software
+ function that interacts with targets to make something happen** A service
+ carries out one specific task, for example: turning on the light in the
+ living room or sending a notification to a mobile phone. A service has
+ targets and data. Service targets are: areas, devices, and entities. Service
+ data carries the information required to define the desired state change in
+ the target. For example, the target, together with brightness 150 and RGB
+ color `[255,0,0]`, or the message “Your coffee is ready”. Services can be
+ used in, for example, automation, scripts, dashboards, or voice commands to
+ control your home. Home Assistant provides a series of predefined services,
+ such as `homeassistant.turn_on`, `homeassistant.toggle`, or
+ `homeassistant.reload`.
excerpt: >
- A service carries out one specific task, for example: turn on the light in the
- living room. A service has targets and data and can be called by actions, a
- dashboard, or via voice command.
+ A service carries out one specific task, for example: turn on the light in
+ the living room. A service has targets and data and can be called by
+ actions, a dashboard, or via voice command.
link: /docs/scripts/service-calls/
aliases:
- services
- term: State
definition: |-
- The state holds the information of interest of an entity. For example, if a light is on or off, the current temperature, or the amount of energy used. The data type of state is `string` (a textual value). Entities store 2 timestamps related to the state: `last_updated` and `last_changed`. Each entity has exactly one state and the state only holds one value at a time. However, entities can store attributes related to that state. For example, the state of a light is _on_, and the related state attributes could be its current brightness and color values.
- State changes can be used as the source of triggers. The current state can be used in conditions.
-
+ The state holds the information of interest of an entity. For example, if a
+ light is on or off, the current temperature, or the amount of energy used.
+ The data type of state is `string` (a textual value). Entities store 2
+ timestamps related to the state: `last_updated` and `last_changed`. Each
+ entity has exactly one state and the state only holds one value at a time.
+ However, entities can store attributes related to that state. For example,
+ the state of a light is _on_, and the related state attributes could be its
+ current brightness and color values. State changes can be used as the source
+ of triggers. The current state can be used in conditions.
+
link: /docs/configuration/state_object/
aliases:
- states
excerpt: >
- The state holds the information of interest of an entity, for example, if a light is on or off. Each entity has exactly one state and the state only holds one value at a time. However, entities can store attributes related to that state such as brightness, color, or a unit of measurement.
+ The state holds the information of interest of an entity, for example, if a
+ light is on or off. Each entity has exactly one state and the state only
+ holds one value at a time. However, entities can store attributes related to
+ that state such as brightness, color, or a unit of measurement.
- term: Switch
definition: >-
Switches are things that have two states you can select between, such as
@@ -371,14 +533,37 @@
- term: Thread
definition: >-
- Thread is a low-power mesh networking standard that is specifically designed for smart home applications. It is a protocol that defines how devices communicate. *Mesh* topology means that the devices can communicate with each other directly, without going through a central controller first. Thread uses the same radio frequency (RF) technology as Zigbee, but provides IP connectivity similar to Wi-Fi. Unlike Zigbee, Thread does not specify how to control devices. How Thread-enabled devices are controlled is specified in a higher level protocol such as HomeKit or Matter.
+ Thread is a low-power mesh networking standard that is specifically designed
+ for smart home applications. It is a protocol that defines how devices
+ communicate. *Mesh* topology means that the devices can communicate with
+ each other directly, without going through a central controller first.
+ Thread uses the same radio frequency (RF) technology as Zigbee, but provides
+ IP connectivity similar to Wi-Fi. Unlike Zigbee, Thread does not specify how
+ to control devices. How Thread-enabled devices are controlled is specified
+ in a higher level protocol such as HomeKit or Matter.
link: /integrations/thread/
excerpt: >
- Thread is a low-power mesh networking standard that is specifically designed for smart home applications. It is a protocol that defines how devices communicate.
+ Thread is a low-power mesh networking standard that is specifically designed
+ for smart home applications. It is a protocol that defines how devices
+ communicate.
+- term: Thread border router
+ definition: >-
+ A Thread border router forwards data packets between your local network and
+ the Thread network. This enables smart home devices within a Thread network
+ to communicate with IPv6-capable devices in your local network. A Thread
+ border router is connected to your network either via Wi-Fi or Ethernet and
+ uses its radio frequency (RF) radio to communicate with the Thread mesh
+ network. In case of Matter, the data that is forwarded is encrypted.
+ Examples of Thread border routers are the Nest Hub (2nd gen), the HomePod
+ mini, and the Home Assistant SkyConnect together with the OpenThread Border
+ Router add-on.
+ link: /integrations/thread/#about-thread-border-routers
+ aliases:
+ - Thread border routers
- term: Trigger
definition: >-
- A trigger is a set of values or conditions of a platform that are defined
- to cause an automation to run.
+ A trigger is a set of values or conditions of a platform that are defined to
+ cause an automation to run.
link: /docs/automation/trigger/
aliases:
- triggers
@@ -388,21 +573,21 @@
TTS (text-to-speech) allows Home Assistant to talk to you.
link: /integrations/tts/
-
- term: Valve
definition: >-
- Valves are devices to control the flow of liquids and gases. All valves in Home Assistant can be opened
- and closed. Some valves can also be set to a specific position.
+ Valves are devices to control the flow of liquids and gases. All valves in
+ Home Assistant can be opened and closed. Some valves can also be set to a
+ specific position.
link: /integrations/valve
- term: Variables
definition: >-
- Variables are used to store values in memory that can be processed
- for example, in a script.
+ Variables are used to store values in memory that can be processed for
+ example, in a script.
link: /docs/scripts/#variables
- term: Zone
definition: >-
Zones are areas that can be used for presence detection.
link: /integrations/zone/
aliases:
- - zones
\ No newline at end of file
+ - zones
diff --git a/source/_docs/authentication.markdown b/source/_docs/authentication.markdown
index 02d299c9ad5c..de84130966b5 100644
--- a/source/_docs/authentication.markdown
+++ b/source/_docs/authentication.markdown
@@ -7,21 +7,13 @@ The authentication system secures access to Home Assistant.
## Login screen
-If you log in from within your local network, you are greeted with a login screen showing all the people in Home Assistant.
-
-
-
-### Privacy: Not showing users when logging in from outside the network
-
-When logging in from outside your local network, the users are not shown. This is to protect your privacy. In this case, you need to enter your user name.
-
-You might also see this screen if you are using a Chromium-based browser (Chrome, Edge) and IPv6. Home Assistant might not be able to detect if your are logging in from a local network. This is a known issue with Chromium.
+You are greeted with a log in screen, asking you for user name and password.
## User accounts
-When you start Home Assistant for the first time the _owner_ user account is created. This account has some special privileges and can:
+When you start Home Assistant for the first time, the _owner_ user account is created. This account has some special privileges and can:
- Create and manage other user accounts.
- Configure integrations and other settings (coming soon).
@@ -31,12 +23,12 @@ For the moment, other user accounts will have the same access as the owner accou
-If you want to manage users and you're an owner but you do not see "Users" in your main configuration menu, make sure that "Advanced Mode" is enabled for your user in your profile.
+If you want to manage users and you're an owner but you do not see "Users" in your main configuration menu, make sure that **Advanced Mode** is enabled for your user in your profile.
### Your account profile
-Once you're logged in, you can see the details of your account at the _Profile_ page by clicking on the circular at the very bottom of the sidebar.
+Once you're logged in, you can see the details of your account on the {% my profile title="**User profile**" %} page by selecting on the circular at the very bottom of the sidebar.
@@ -46,8 +38,15 @@ You can:
- Enable or disable [multi-factor authentication](/docs/authentication/multi-factor-auth/).
- Delete _Refresh Tokens_. These are created when you log in from a device. Delete them if you want to force the device to log out.
- Create [Long Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) so scripts can securely interact with Home Assistant.
+- Define language and other locale settings.
- Log out of Home Assistant.
+
+
+Unused refresh tokens will be automatically removed. A refresh token is considered unused if it has not been used for a login within 90 days. If you need a permanent token, then we recommend using [Long Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token).
+
+
+
### Securing your login
_Make sure to choose a secure password!_ At some time in the future, you will probably want to access Home Assistant from outside your local network. This means you are also exposed to random black-hats trying to do the same. Treat the password like the key to your house.
@@ -84,17 +83,7 @@ INFO (MainThread) [homeassistant.components.http.auth] You need to use a bearer
### Lost owner password
-Before using the procedure below, make sure you explore options provided [here](/docs/locked_out).
-
-While you should hopefully be storing your passwords in a password manager, if you lose the password associated with the owner account the only way to resolve this is to delete _all_ the authentication data. You do this by shutting down Home Assistant and deleting the following files from the `.storage/` folder in your [configuration folder](/docs/configuration/):
-
-- `auth`
-- `auth_provider.homeassistant`
-- `onboarding`
-- `hassio`
-- `cloud`
-
-When you start Home Assistant next, you'll be required to set up authentication again.
+If you lose the password associated with the owner account, you need to [start a new onboarding process](/docs/locked_out/#to-prepare-the-system-to-start-a-new-onboarding-process).
### Error: invalid client id or redirect URL
@@ -118,7 +107,3 @@ This will allow you to open Home Assistant at `http://homeassistant.home:8123/`
### Stuck on loading data
Some ad blocking software, such as Wipr, also blocks WebSockets. If you're stuck on the Loading data screen, try disabling your ad blocker.
-
-### Migrating from pre 0.77
-
-If you were using the authentication system before 0.77, you'd likely have `auth:` and `auth_providers:` defined. You'll need to remove these and let Home Assistant [handle it automatically](/docs/authentication/providers/#configuring-auth-providers).
diff --git a/source/_docs/automation/templating.markdown b/source/_docs/automation/templating.markdown
index 1035738024d1..59b114abce2c 100644
--- a/source/_docs/automation/templating.markdown
+++ b/source/_docs/automation/templating.markdown
@@ -240,6 +240,29 @@ automation 3:
target:
# Turn off whichever entity triggered the automation.
entity_id: "{{ trigger.entity_id }}"
+
+automation 4:
+ trigger:
+ # When an NFC tag is scanned by Home Assistant...
+ - platform: event
+ event_type: tag_scanned
+ # ...By certain people
+ context:
+ user_id:
+ - 06cbf6deafc54cf0b2ffa49552a396ba
+ - 2df8a2a6e0be4d5d962aad2d39ed4c9c
+ condition:
+ # Check NFC tag (ID) is the one by the front door
+ - condition: template
+ value_template: "{{ trigger.event.data.tag_id == '8b6d6755-b4d5-4c23-818b-cf224d221ab7'}}"
+ action:
+ # Turn off various lights
+ - service: light.turn_off
+ target:
+ entity_id:
+ - light.kitchen
+ - light.bedroom
+ - light.living_room
```
{% endraw %}
diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown
index e3ab87af23c2..9f7dc28a1f19 100644
--- a/source/_docs/automation/trigger.markdown
+++ b/source/_docs/automation/trigger.markdown
@@ -1,6 +1,9 @@
---
title: "Automation Trigger"
description: "All the different ways how automations can be triggered."
+related:
+ - docs: /voice_control/custom_sentences/#adding-a-custom-sentence-to-trigger-an-automation
+ title: Adding a custom sentence to trigger an automation
---
Triggers are what starts the processing of an {% term automation %} rule. When _any_ of the automation's triggers becomes true (trigger _fires_), Home Assistant will validate the [conditions](/docs/automation/condition/), if any, and call the [action](/docs/automation/action/).
@@ -148,6 +151,12 @@ automation:
event: start
```
+
+
+Automations triggered by the `shutdown` event have 20 seconds to run, after which they are stopped to continue with the shutdown.
+
+
+
## MQTT trigger
Fires when a specific message is received on given MQTT topic. Optionally can match on the payload being sent over the topic. The default payload encoding is 'utf-8'. For images and other byte payloads use `encoding: ''` to disable payload decoding completely.
@@ -251,7 +260,24 @@ automation:
{% endraw %}
-More dynamic and complex calculations can be done with `value_template`.
+More dynamic and complex calculations can be done with `value_template`. The variable 'state' is the [state object](/docs/configuration/state_object) of the entity specified by `entity_id`.
+
+The state of the entity can be referenced like this:
+
+{% raw %}
+
+```yaml
+automation:
+ trigger:
+ - platform: numeric_state
+ entity_id: sensor.temperature
+ value_template: "{{ state.state | float * 9 / 5 + 32 }}"
+ above: 70
+```
+
+{% endraw %}
+
+Attributes of the entity can be referenced like this:
{% raw %}
@@ -271,8 +297,8 @@ Listing above and below together means the numeric_state has to be between the t
In the example above, the trigger would fire a single time if a numeric_state goes into the 17.1-24.9 range (above 17 and below 25). It will only fire again, once it has left the defined range and enters it again.
-Number helpers (`input_number` entities), `number` and `sensor` entities that
-contain a numeric value, can be used in the `above` and `below` thresholds,
+Number helpers (`input_number` entities), `number`, `sensor`, and `zone` entities
+that contain a numeric value, can be used in the `above` and `below` thresholds,
making the trigger more dynamic, like:
```yaml
@@ -940,6 +966,10 @@ The sentences matched by this trigger will be:
Punctuation and casing are ignored, so "It's PARTY TIME!!!" will also match.
+### Related topic
+
+- [Adding a custom sentence to trigger an automation](/voice_control/custom_sentences/#adding-a-custom-sentence-to-trigger-an-automation)
+
### Sentence wildcards
Adding one or more `{lists}` to your trigger sentences will capture any text at that point in the sentence. A `slots` object will be [available in the trigger data](/docs/automation/templating#sentence).
diff --git a/source/_docs/automation/troubleshooting.markdown b/source/_docs/automation/troubleshooting.markdown
index a41825249f6d..458a88dc5b2a 100644
--- a/source/_docs/automation/troubleshooting.markdown
+++ b/source/_docs/automation/troubleshooting.markdown
@@ -3,43 +3,72 @@ title: "Troubleshooting automations"
description: "Tips on how to troubleshoot your automations."
---
+Automations and {% term scripts %} can be debugged in a few different ways. You can [test run](#testing-your-automation) the full sequence of actions, or test each condition and action separately. [Traces](#traces) let you see details of every step after an automation is run. For complicated automations with {% term templates %}, see the section [testing templates](#testing-templates).
+
+## Testing your automation
+
+Many automations can be tested directly in the automation editor UI.
+
+### Running the entire automation
+
+In the three dots menu in the automation list or automation editor UI, select the **Run** button. This will execute all of the {% term actions %}, while skipping all {% term triggers %} and {% term conditions %}. This lets you test the full sequence of actions, as if the automation was triggered and all conditions were true. Note that any [trigger ID](/docs/automation/trigger/#trigger-id) used in your triggers will not be active when you test this way. The Trigger ID or any data passed by in the `trigger` data in conditions or actions can't be tested directly this way.
+
+You can also trigger an automation manually. This can test the conditions as if the automation was triggered by an event. Navigate to {% my developer_services title="**Developer tools** > **Services**" %}. In the service selection drop-down, select **Automation: Trigger**, then **Choose entity** to select the automation you are testing. Toggle whether to skip the conditions, then **Call service**. If needed, additional `trigger` or other data can be added in the YAML view for testing. The [trigger](/docs/automation/trigger/) page has more information about data within the trigger.
+
+Testing with complex triggers, conditions, and variables can be difficult. Note that using the **Run** button will skip all triggers and conditions, while **Developer Tools** can be used with or without checking conditions.
+
+### Running individual actions or conditions
+
+In the automation editor UI, each {% term condition %} and {% term action %} can be tested individually. Select the three dots menu, then the **Test** button.
+
+- Testing a condition will highlight it to show whether the condition passed at the moment it was tested. If all conditions pass, then the automation will run when triggered. Testing building blocks like an **and** condition will report whether the whole block registers as true or false, or you can test individual conditions within the building block.
+
+- Testing an action block will run that block immediately.
+
+Note that complex automations that depend on previous blocks, such as trigger IDs, variables in templates, or service calls that return data to use in subsequent blocks, cannot be tested this way.
+
+If you are writing automations in YAML, it is also useful to go to {% my server_controls title="**Developer tools** > **YAML**" %}** and in the Configuration validation section, select the **Check configuration** button. This is to make sure there are no syntax errors before restarting Home Assistant. In order for **Check configuration** to be visible, you must enable **Advanced Mode** on {% my profile title="your user profile" %}.
+
+## Traces
+
When an {% term automation %} is run, all steps are recorded and a trace is made. From the UI, open **Settings**, which is located in the sidebar, then select **Automations & Scenes** to go to the automation editor or click this button directly: {% my automations badge %}
-Click on the clock icon next to an automation to enter the debugging screen. Alternatively, click on **Show trace** directly from a Logbook automation entry.
+From the automation editor UI, or in the automations list in the three dots menu, select **Traces**. Alternatively, select an automation entry shown in the Logbook.
![Automation tracing example](/images/integrations/automation/automation-tracing.png)
The above screenshot shows a previous run of an automation. The automation is displayed using an interactive graph, highlighting which path the automation took. Each node in the graph can be clicked to view the details on what happened with the automation during that specific step. It traces the complete run of an automation.
-The debugging screen is split into four features, the first being the Step Details which provides all details for each step of the automation. The second feature is the Trace Timeline which the screenshot above shows and where the automation can be followed on a timeline. The next is Related logbook entries, as the name says a logbook for all the entries related to the specific trace. The last two features are Automation Config and optionally Blueprint Config for the automation YAML code.
+The right side of the trace screen has tabs with more information:
+
+- **Step Details** shows data and results of the step that is currently highlighted.
+- **Automation Config** shows the full YAML configuration at the time the automation was run.
+- **Trace Timeline**, shown in the screenshot above, lists the steps that were executed and their timing.
+- **Related logbook entries**, shows a logbook for all the entries related to the specific trace.
+- **Blueprint Config** will only be shown if the automation was created from a {% term blueprint %}.
+
+The top bar shows the date and time the automation was triggered. Use the left and right arrows to view previous runs of the automation.
Automations created in YAML must have an [`id`](/docs/automation/yaml/#migrating-your-yaml-automations-to-automationsyaml) assigned in order for debugging traces to be stored.
-#### Traces
+### Trace configuration
The last 5 traces are recorded for all automations. It is possible to change this by adding the following code to your automation.
+{% raw %}
+
```yaml
trace:
- stored_traces: 1
+ stored_traces: 20
```
-[template]: /docs/configuration/templating/
-
-## Testing your automation
-
-It is generally a difficult task to test an automation, especially if it includes several triggers and some conditions.
-
-Please note that if you click on **Trigger** of an automation in the frontend, **only the `action` part will be executed** by Home Assistant. That means you **can't** test your trigger or condition part that way. It also means that if your automation uses some data from triggers, it won't work properly as well just because `trigger` is not defined in this scenario.
-
-All this makes that Trigger feature pretty limited and nearly useless for debugging purposes so you need to find another way.
-Make sure you check and adapt to your circumstances appropriate examples from Automation Trigger, Conditions and Actions.
+{% endraw %}
-It is also useful to go to **{% my server_controls title="Developer Tools -> YAML" %}** and click on **Check Configuration** button in Configuration validation section to make sure there are no syntax errors before restarting Home Assistant. In order for **Check configuration** to be visible, you must enable **Advanced Mode** on {% my profile title="your user profile" %}.
+## Testing templates
-If your automation uses templates in any part, you can do the following to make sure it works as expected:
+If your automation uses [templates](/docs/configuration/templating/) in any part, you can do the following to make sure it works as expected:
-1. Go to **{% my developer_template title="Developer tools -> Template" %}** tab.
+1. Go to {% my developer_template title="**Developer tools** > **Template**" %} tab.
2. Create all variables (sources) required for your template as described at the end of [this](https://www.home-assistant.io/docs/configuration/templating/#processing-incoming-data) paragraph.
3. Copy your template code and paste it in Template editor straight after your variables.
4. If necessary, change your sources' value and check if the template works as you want and does not generate any errors.
diff --git a/source/_docs/automation/using_blueprints.markdown b/source/_docs/automation/using_blueprints.markdown
index 6eb407f497f9..061538244dde 100644
--- a/source/_docs/automation/using_blueprints.markdown
+++ b/source/_docs/automation/using_blueprints.markdown
@@ -41,12 +41,24 @@ Home Assistant can import blueprints from the Home Assistant forums, GitHub, and
The blueprint can now be used for creating automations.
-## Keeping blueprints up to date
+## Re-importing a blueprint
Blueprints created by the community may go through multiple revisions. Sometimes a user creates a blueprint,
the community provides feedback, and new functionality is added.
-While there's no built-in functionality to update a blueprint you've already imported, you can manually edit
+The quickest way to get these changes is by re-importing the blueprint. This will overwrite the blueprint you currently have.
+
+1. **Before you do this**: If the re-imported blueprint is not compatible, it can break your automations.
+ - In this case, you will need to manually adjust your automations.
+2. Go to **{% my blueprints title="Settings > Automations & Scenes > Blueprints" %}**.
+3. On the blueprint that you want to re-import, select the three-dot menu, and select **Re-import blueprint**.
+
+## Updating an imported blueprint manually
+
+Blueprints created by the community may go through multiple revisions. Sometimes a user creates a blueprint,
+the community provides feedback, and new functionality is added.
+
+If you do not want to [re-import the blueprint](/docs/automation/using_blueprints/#re-importing-a-blueprint) for some reason, you can manually edit
its YAML content to keep it up to date:
1. Navigate to the blueprints directory (`blueprints/automation/`).
diff --git a/source/_docs/backend/database.markdown b/source/_docs/backend/database.markdown
index 5e53c82ea3d0..f16cf2a2553a 100644
--- a/source/_docs/backend/database.markdown
+++ b/source/_docs/backend/database.markdown
@@ -3,7 +3,7 @@ title: "Database"
description: "Details about the database used by Home Assistant."
---
-Home Assistant uses databases to store {% term events %} and parameters for history and tracking. The default database used is [SQLite](https://www.sqlite.org/) and the database file is stored in your [configuration directory](/getting-started/configuration/) (e.g., `/home-assistant_v2.db`); however, other databases can be used. If you prefer to run a database server (e.g., PostgreSQL), use the [`recorder` integration](/integrations/recorder/).
+Home Assistant uses databases to store {% term events %} and parameters for history and tracking. The default database used is [SQLite](https://www.sqlite.org/) and the database file is stored in your [configuration directory](/getting-started/configuration/) (e.g., `/home-assistant_v2.db`); however, other databases can be used. If you prefer to run a database server (e.g., PostgreSQL), use the [`recorder`](/integrations/recorder/) integration.
To work with SQLite database manually from the command-line, you will need an [installation](https://www.sqlitetutorial.net/download-install-sqlite/) of `sqlite3`. Alternatively [DB Browser for SQLite](https://sqlitebrowser.org/) provides a viewer for exploring the database data and an editor for executing SQL commands.
First load your database with `sqlite3`:
diff --git a/source/_docs/blueprint.markdown b/source/_docs/blueprint.markdown
index c0e17ab71264..eb07e05191cc 100644
--- a/source/_docs/blueprint.markdown
+++ b/source/_docs/blueprint.markdown
@@ -1,6 +1,17 @@
---
title: "About blueprints"
description: "Introduction to blueprints."
+related:
+ - docs: /docs/blueprint/schema/
+ title: About the blueprint schema
+ - docs: /docs/blueprint/selectors/
+ title: About the blueprint selectors
+ - docs: /docs/automation/using_blueprints/
+ title: Using blueprints in automations
+ - docs: /docs/blueprint/tutorial/
+ title: "Tutorial: Create an automation blueprint"
+ - title: "Blueprint community forum"
+ url: /get-blueprints
---
This section gives a high-level introduction to blueprints. To view a description of the YAML-schema used to create a valid blueprint, refer to the section [About the blueprint schema](/docs/blueprint/schema/).
@@ -13,12 +24,4 @@ Imagine you want to control lights based on motion. A blueprint provides the gen
Blueprints are shared by the community in the [blueprint community forum][blueprint-forums].
-### Related information
-
-- [About the blueprint schema](/docs/blueprint/schema/)
-- [About the blueprint selectors](/docs/blueprint/selectors/)
-- [Using blueprints in automations](/docs/automation/using_blueprints/)
-- [Tutorial: Create an automation blueprint](/docs/blueprint/tutorial/)
-- [Blueprint community forum][blueprint-forums]
-
-[blueprint-forums]: /get-blueprints
\ No newline at end of file
+[blueprint-forums]: /get-blueprints
diff --git a/source/_docs/blueprint/schema.markdown b/source/_docs/blueprint/schema.markdown
index 3ff7baf3e278..c615423da5b8 100644
--- a/source/_docs/blueprint/schema.markdown
+++ b/source/_docs/blueprint/schema.markdown
@@ -1,6 +1,17 @@
---
title: "About the blueprint schema"
description: "Introduction to the blueprint schema."
+related:
+ - docs: /docs/blueprint/
+ title: About blueprints
+ - docs: /docs/blueprint/selectors/
+ title: Blueprint selectors
+ - docs: /docs/automation/using_blueprints/
+ title: Using blueprints in automations
+ - docs: /docs/blueprint/tutorial/
+ title: "Tutorial: Create an automation blueprint"
+ - title: "Blueprint community forum"
+ url: /get-blueprints
---
## The blueprint schema
@@ -202,12 +213,4 @@ action:
target: !input light_target
```
-### Related information
-- [About blueprints](/docs/blueprint/)
-- [Blueprint selectors](/docs/blueprint/selectors/)
-- [Using blueprints in automations](/docs/automation/using_blueprints/)
-- [Tutorial: Create an automation blueprint »](/docs/blueprint/tutorial/)
-- [Blueprint community forum][blueprint-forums]
-
[blueprint-built-in]: https://github.com/home-assistant/core/tree/dev/homeassistant/components/automation/blueprints
-[blueprint-forums]: /get-blueprints
diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown
index 42c6f42402ae..fb7419dc58e0 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,22 +31,21 @@ 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)
+- [Label selector](#label-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)
@@ -210,7 +208,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.
@@ -273,7 +271,7 @@ assist_pipeline:
## Backup location selector
This can only be used on an installation with a Supervisor (Operating System or
-Supervised). For installations of type Home Assistant Core or Container, an error
+Supervised). For installations of type {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %}, an error
will be displayed.
The backup location selector shows a list of places a backup could go, depending
@@ -417,20 +415,6 @@ language:
The output of this selector is the ID of the conversation agent.
-## Date selector
-
-The date selector shows a date input that allows the user to specify a date.
-
-![Screenshot of the Date selector](/images/blueprints/selector-date.png)
-
-This selector does not have any other options; therefore, it only has its key.
-
-```yaml
-date:
-```
-
-The output of this selector will contain the date in Year-Month-Day
-(`YYYY-MM-DD`) format, for example, `2022-02-22`.
## Country selector
@@ -458,6 +442,21 @@ no_sort:
The output of this selector is an ISO 3166 country code.
+## Date selector
+
+The date selector shows a date input that allows the user to specify a date.
+
+![Screenshot of the Date selector](/images/blueprints/selector-date.png)
+
+This selector does not have any other options; therefore, it only has its key.
+
+```yaml
+date:
+```
+
+The output of this selector will contain the date in Year-Month-Day
+(`YYYY-MM-DD`) format, for example, `2022-02-22`.
+
## Date & time selector
The date selector shows a date and time input that allows the user to specify a
@@ -579,7 +578,7 @@ faadde5365842003e8ca55267fe9d1f4
- 3da77cb054352848b9544d40e19de562
```
-### Example device selector
+### Example device selector
An example entity selector that, will only show devices that are:
@@ -715,7 +714,7 @@ light.living_room
- light.kitchen
```
-### Example entity selector
+### Example entity selector
An example entity selector that, will only show entities that are:
@@ -735,6 +734,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.
@@ -753,6 +887,43 @@ placeholder:
The output of this selector is a string containing the selected icon,
for example: `mdi:bell`.
+## Label selector
+
+The label selector shows a label finder that can pick labels. The value of the
+input is the label ID. If `multiple` is set to `true`, the value is a list
+of label IDs.
+
+![Screenshot of the label selector](/images/blueprints/selector-label.png)
+
+In its most basic form, this selector doesn't require any options.
+It will show all labels.
+
+```yaml
+label:
+```
+
+{% configuration text %}
+multiple:
+ description: >
+ Allows selecting multiple labels. 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 label ID, or (in case `multiple` is set to
+`true`) a list of label IDs.
+
+```yaml
+# Example label selector output result, when multiple is set to false
+energy_saving
+
+# Example label selector output result, when multiple is set to true
+- energy_saving
+- christmas_decorations
+```
+
## Language selector
The language selector allows a user to pick a language from a list of languages.
@@ -908,7 +1079,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.
@@ -948,6 +1119,39 @@ object:
The output of this selector is a YAML object.
+## QR code selector
+
+The QR code selector shows a QR code. It has no return value.
+
+![Screenshot of a QR code selector](/images/blueprints/selector-qr-code.png)
+
+The QR code's data must be configured, and optionally, the scale, and error correction level can be set.
+The scale makes the QR code bigger or smaller.
+
+{% configuration qr_code %}
+data:
+ description: The data that should be represented in the QR code.
+ type: any
+ required: true
+scale:
+ description: The scale factor to use, this will make the QR code bigger or smaller.
+ type: integer
+ required: false
+ default: 4
+error_correction_level:
+ description: The error correction level of the QR code, with a higher error correction level the QR code can be scanned even when some pieces are missing. Can be "low", "medium", "quartile" or "high".
+ type: string
+ required: false
+ default: medium
+{% endconfiguration %}
+
+```yaml
+qr_code:
+ data: "https://home-assistant.io"
+ scale: 5
+ error_correction_level: quartile
+```
+
## RGB color selector
The RGB color selector allows the user to select an color from a color picker
@@ -1174,7 +1378,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.
@@ -1324,4 +1528,4 @@ The output of this selector is a list of triggers. For example:
- platform: numeric_state
entity_id: "sensor.outside_temperature"
below: 20
-```∏
+```
\ No newline at end of file
diff --git a/source/_docs/blueprint/tutorial.markdown b/source/_docs/blueprint/tutorial.markdown
index 5dd5c86ba584..98908e5f51ec 100644
--- a/source/_docs/blueprint/tutorial.markdown
+++ b/source/_docs/blueprint/tutorial.markdown
@@ -1,6 +1,22 @@
---
title: "Creating an automation blueprint"
description: "Tutorial on creating an automation blueprint."
+related:
+ - docs: /docs/configuration/
+ title: "Editing the configuration file"
+ - docs: /docs/configuration/yaml/
+ - docs: /docs/automation/yaml/
+ title: "YAML used in automations"
+ - docs: /docs/scripts/
+ title: Scripts
+ - docs: /docs/blueprint/selectors/
+ title: Blueprint selectors
+ - docs: /docs/blueprint/schema/
+ title: Blueprint schema
+ - docs: /docs/blueprint/
+ title: About blueprints
+ - docs: /docs/automation/using_blueprints/
+ title: Using automation blueprints
---
@@ -273,17 +289,3 @@ For this tutorial, we're going to share it on GitHub Gists. This is a good optio
### Share on the Blueprint Exchange
If you follow the [Rules and format for posting](/get-blueprints), you can share your blueprint on the Home Assistant Blueprint Exchange forum. This option is accessible to the general Home Assistant community but recommended only for your original blueprints. Please don't post this tutorial to the Blueprint Exchange, but instead, remember this as an option for releasing your real blueprints.
-
-## Related topics
-
-**Prerequisites**
-- [Editing the configuration file](/docs/configuration/)
-- [YAML](/docs/configuration/yaml/), and specifically, [YAML used in automations](/docs/automation/yaml/)
-- [Scripts](/docs/scripts/)
-
-**Blueprints**
-
-- [Blueprint selectors](/docs/blueprint/selectors/)
-- [Blueprint schema](/docs/blueprint/schema/)
-- [About blueprints](/docs/blueprint/)
-- [Using automation blueprints](/docs/automation/using_blueprints/)
diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown
index b02e1a6e379c..ade0f779d0a9 100644
--- a/source/_docs/configuration.markdown
+++ b/source/_docs/configuration.markdown
@@ -1,45 +1,90 @@
---
title: "Configuration.yaml"
description: "Configuring Home Assistant via text files."
+related:
+ - docs: /docs/configuration/yaml/
+ title: YAML syntax
+ - docs: /docs/configuration/secrets
+ title: Storing credentials in `secrets.yaml` file
+ - docs: /common-tasks/os/#backups
+ title: Creating and restoring backups
+ - docs: /integrations/backup/docs/tools/dev-tools/#reloading-the-yaml-configuration
+ title: Creating backups for Home Assistant Container and Core
+ - docs: /docs/tools/dev-tools/#reloading-the-yaml-configuration
+ title: Reloading the YAML configuration from developer tools
+ - docs: /common-tasks/os/#configuring-access-to-files
+ title: Configuring file access on the Operating System
+ - docs: /common-tasks/supervised/#configuring-access-to-files
+ title: Configuring file access on Supervised
+ - docs: docs/configuration/troubleshooting/
+ title: Troubleshooting the configuration
---
-While you can configure most of Home Assistant directly from the user interface under {% my config %}, some parts need you to edit `configuration.yaml`. This file contains {% term integrations %} to be loaded along with their configurations. Throughout the documentation you will find snippets that you can add to your configuration file to enable specific functionality.
+While you can configure most of Home Assistant from the user interface, for some integrations, you need to edit the `configuration.yaml` file. This file contains {% term integrations %} to be loaded along with their configurations. Throughout the documentation, you will find snippets that you can add to your configuration file to enable specific functionality.
-If you run into trouble while configuring Home Assistant, refer to the [configuration troubleshooting page](/docs/configuration/troubleshooting/) and the [`configuration.yaml` examples](/examples/#example-configurationyaml).
+
+
+Example of a configuration.yaml file, accessed using the File editor add-on on a Home Assistant Operating System installation.
+
## Editing `configuration.yaml`
-The easiest option to edit `configuration.yaml` is to use the {% my supervisor_addon title="Studio Code Server add-on" addon="a0d7b954_vscode" %}. This add-on runs VS Code, which offers live syntax checking and auto-fill of various Home Assistant entities. See [here](/common-tasks/supervised/#installing-and-using-the-visual-studio-code-vsc-add-on) for details. If unavailable on your system, use {% my supervisor_addon title="File Editor add-on" addon="core_configurator" %} instead. Again, details can be found [here](/common-tasks/supervised/#installing-and-using-the-file-editor-add-on).
+How you edit your `configuration.yaml` file depends on your editor preferences and the [installation method](/installation/#advanced-installation-methods) you used to set up Home Assistant.
-If you prefer to use a file editor on your computer, use the {% my supervisor_addon title="Samba add-on" addon="core_samba" %} to access the files as a network share. More details can be found [here](/common-tasks/supervised/#installing-and-using-the-samba-add-on).
+### To set up access to the files and prepare an editor
-The path to your configuration directory can be found in the Home Assistant {% term frontend %} by going to {% my system_health title="Settings > System > Repairs > System information from the top right menu" %}
+Before you can edit a file, you need to know how to access files in Home Assistant and setup an editor.
+File access depends on your [installation method](/installation/#advanced-installation-methods). If you use {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %}, you can use editor add-ons, for example, but not if you use {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %}.
-![Show system menu option](/images/screenshots/System_information_menu.png)
+1. To set up file access, follow the steps for your [installation method](/installation/#advanced-installation-methods):
-Right under the version you are running, you will find what path Home Assistant has loaded the configuration from.
-![Screenshot showing the top of the system information panel](/images/screenshots/System_information.png)
+ - [Configuring file access on the Operating System](/common-tasks/os/#configuring-access-to-files)
+ - If you are unsure which option to choose, install the [file editor add-on](/common-tasks/os/#installing-and-using-the-file-editor-add-on).
+ - Alternatively, use the [VS Code add-on](/common-tasks/os/#installing-and-using-the-visual-studio-code-vsc-add-on). This editor offers live syntax checking and auto-fill of various Home Assistant entities. But it looks more complex than the file editor.
+ - If you prefer to use a file editor on your computer, use the [Samba add-on](/common-tasks/os/#installing-and-using-the-samba-add-on).
+ - [Configuring file access on Supervised](/common-tasks/supervised/#configuring-access-to-files)
+ - [File editor add-on](/common-tasks/supervised/#installing-and-using-the-file-editor-add-on).
+ - [VS Code add-on](/common-tasks/supervised/#installing-and-using-the-visual-studio-code-vsc-add-on).
+ - [Samba add-on](/common-tasks/supervised/#installing-and-using-the-samba-add-on).
-_If you use Home Assistant Container, you can find `configuration.yaml` in the config folder that you mounted in your container._
+2. To look up the to your configuration directory, go to {% my system_health title="**Settings** > **System** > **Repairs**" %}.
+ - Select the three dots menu and select **System information**.
-_If you use Home Assistant Operating System, you can find `configuration.yaml` in the `/config` folder of the installation._
+ ![Show system information option](/images/screenshots/System_information_menu.png)
-_If you use Home Assistant Core, you can find `configuration.yaml` in the config folder passed to the `hass` command (default is `~/.homeassistant`)._
+3. Find out the location of the **Configuration directory**.
-## Reloading changes
+ ![Screenshot showing the top of the system information panel](/images/screenshots/System_information.png)
+ - Unless you changed the file structure, the default is as follows: -
+ - {% term "Home Assistant Operating System" %}: the `configuration.yaml` is in the `/config` folder of the installation.
+ - {% term "Home Assistant Container" %}: the `configuration.yaml` is in the config folder that you mounted in your container.
+ - {% term "Home Assistant Core" %}: the `configuration.yaml` is in the config folder passed to the `hass` command (default is `~/.homeassistant`).
-Most integrations in Home Assistant that do not interact with {% term devices %} or {% term services %} can reload changes made to their configuration in `configuration.yaml`. To do this, go to {% my server_controls title="Developer Tools > YAML" %} and scroll down to the YAML configuration reloading section (alternatively, hit "c" anywhere in the UI and search for it).
+## Validating the configuration
-If you can't see your integration listed there, you will need to restart Home Assistant for changes to take effect.
+After changing configuration or automation files, you can check if the configuration is valid. A configuration check is also applied automatically when you reload the configuration or when you restart Home Assistant.
-
+The method for running a configuration check depends on your [installation type](/installation/#advanced-installation-methods). Check the common tasks for your installation type:
- To test any changes to your configuration files from the command line, check out the common tasks for [operating system](/common-tasks/os/#configuration-check), [supervised](/common-tasks/supervised/#configuration-check), [container](/common-tasks/container/#configuration-check), [core](/common-tasks/core/#configuration-check) for how to do that. Configuration changes can also be tested using the UI by navigating to {% my server_controls title="Developer Tools > YAML" %} and clicking "Check Configuration". For the button to be visible, you must enable "Advanced Mode" on your {% my profile title="User Profile" %}.
+- [Configuration check on Operating System](/common-tasks/os/#configuration-check)
+- [Configuration check on Supervised](/common-tasks/supervised/#configuration-check)
+- [Configuration check on Container](/common-tasks/container/#configuration-check)
+- [Configuration check on Core](/common-tasks/core/#configuration-check)
-
+## Reloading the configuration to apply changes
-## Migrating to a new system
+For configuration changes to become effective, the configuration must be reloaded. Most integrations in Home Assistant (that do not interact with {% term devices %} or {% term services %}) can reload changes made to their configuration in `configuration.yaml` without needing to restart Home Assistant.
-The preferred way of migrating to a new system is by {% my supervisor_backups title="making a backup" %}. Once you have created the backup on the old system, you can download it to the system that is running the Home Assistant frontend. When setting up the new system, you may use the backup. Alternatively, you can upload it to your new system using the _Upload backup_ menu option of the _Backups_ menu. Then, a restore of the uploaded backup on the new system concludes the migration.
+1. Under **Settings**, select the three dots menu (top right), select **Restart Home Assistant** > **Quick reload**.
-If you run the container or core installation methods, you will need to manually make a backup of your configuration folder. Be aware that some of the files you need start with `.`, which is hidden by default from both `ls` (in SSH), in Windows Explorer, and macOS Finder. You'll need to ensure that you're viewing all files before you copy them.
+ ![Settings, three dot menu, restart Home Assistant](/images/docs/configuration/settings_restart_ha.png)
+
+2. If you find that your changes were not applied, you need to restart.
+ - Select **Restart Home Assistant**.
+ - Note: This interrupts automations and scripts.
+
+ ![Reload and restart buttons](/images/docs/configuration/reload_restart.png)
+
+## Troubleshooting the configuration
+
+If you run into trouble while configuring Home Assistant, refer to the [configuration troubleshooting page](/docs/configuration/troubleshooting/) and the [`configuration.yaml` examples](/examples/#example-configurationyaml).
\ No newline at end of file
diff --git a/source/_docs/configuration/basic.markdown b/source/_docs/configuration/basic.markdown
index 5fc503984b87..afac72742f32 100644
--- a/source/_docs/configuration/basic.markdown
+++ b/source/_docs/configuration/basic.markdown
@@ -1,117 +1,32 @@
---
title: "Setup basic information"
description: "Setting up the basic info of Home Assistant."
+related:
+ - docs: /integrations/homeassistant/
+ - docs: /docs/configuration/
---
-As part of the default onboarding process, Home Assistant can detect your location from IP address geolocation. Home Assistant will automatically select a unit system and time zone based on this location. You may adjust this during onboarding, or afterwards at {% my general title="Settings > System > General" %}, network related configuration is found under {% my network title="Settings > System > Network" %}.
+As part of the default onboarding process, Home Assistant can detect your location from IP address geolocation. Home Assistant will automatically select a unit system and time zone based on this location. If you didn't adjust this directly during onboarding, you can do it later.
-If you prefer YAML, you can add the following information to your `configuration.yaml`:
+
+
+ Screenshot showing the General settings page.
+
-```yaml
-homeassistant:
- name: Home
- latitude: 32.87336
- longitude: 117.22743
- elevation: 430
- unit_system: metric
- currency: USD
- country: US
- time_zone: "America/Los_Angeles"
- external_url: "https://www.example.com"
- internal_url: "http://homeassistant.local:8123"
- allowlist_external_dirs:
- - "/usr/var/dumping-ground"
- - "/tmp"
- allowlist_external_urls:
- - "http://images.com/image1.png"
- media_dirs:
- media: "/media"
- recordings: "/mnt/recordings"
-```
+The general settings described here are managed by the [Home Assistant Core integration](/integrations/homeassistant/). If you are interested in the services offered by this integration, check out the integration documentation.
-
+## Editing the general settings
- You will not be able to edit anything in {% my general title="Settings > System > General" %} in the UI if you are using YAML configuration for any of the following: name, latitude, longitude, elevation, unit_system, temperature_unit, time_zone, external_url, internal_url, country, currency. Additionally, some options are only visible after "Advanced Mode" is enabled on your {% my profile title="User Profile" %}.
+To change the general settings that were defined during onboarding, follow these steps:
-
+1. Go to {% my general title="**Settings** > **System** > **General**" %} and make your changes.
+2. To change network-related configuration, such as the network name, go to {% my network title="**Settings** > **System** > **Network**" %}.
+3. If some of the settings are not visible, you may need to enable **Advanced mode**.
+ - In the bottom left, select your user name to go to your {% my profile title="**User profile**" %}, and enable **Advanced mode**.
+4. **Troubleshooting**: If any of the settings are grayed out and can't be edited, this is because they are defined in the [`configuration.yaml` file](/docs/configuration/).
+ - If you prefer editing the settings in the UI, you have to delete these entries from the [`configuration.yaml` file](/docs/configuration/).
+ - For more information about the general settings in YAML, refer to the [Home Assistant Core integration documentation](/integrations/homeassistant/).
-{% configuration %}
-name:
- description: Name of the location where Home Assistant is running.
- required: false
- type: string
-latitude:
- description: Latitude of your location required to calculate the time the sun rises and sets.
- required: false
- type: float
-longitude:
- description: Longitude of your location required to calculate the time the sun rises and sets.
- required: false
- type: float
-elevation:
- description: Altitude above sea level in meters. Impacts sunrise data.
- required: false
- type: integer
-unit_system:
- description: "`metric` for Metric, `us_customary` for US Customary. This also sets temperature_unit, Celsius for Metric and Fahrenheit for US Customary"
- required: false
- type: string
-temperature_unit:
- description: "Override temperature unit set by unit_system. `C` for Celsius, `F` for Fahrenheit."
- required: false
- type: string
-time_zone:
- description: "Pick your time zone from the column **TZ** of [Wikipedia's list of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)"
- required: false
- type: string
-currency:
- description: "Pick your currency code from the column **Code** of [Wikipedia's list of ISO 4217 active codes](https://en.wikipedia.org/wiki/ISO_4217#Active_codes)"
- required: false
- type: string
- default: "EUR"
-external_url:
- description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
- required: false
- type: string
-internal_url:
- description: "The URL that Home Assistant is available on from your local network. For example: `http://homeassistant.local:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
- required: false
- type: string
-customize:
- description: "[Customize](/docs/configuration/customizing-devices/) entities."
- required: false
- type: string
-customize_domain:
- description: "[Customize](/docs/configuration/customizing-devices/) all entities in a domain."
- required: false
- type: string
-customize_glob:
- description: "[Customize](/docs/configuration/customizing-devices/) entities matching a pattern."
- required: false
- type: string
-allowlist_external_dirs:
- description: List of folders that can be used as sources for sending files.
- required: false
- type: list
-allowlist_external_urls:
- description: List of external URLs that can be fetched. URLs can match specific resources (e.g., `http://10.10.10.12/images/image1.jpg`) or a relative path that allows access to resources within it (e.g., `http://10.10.10.12/images` would allow access to anything under that path)
- required: false
- type: list
-media_dirs:
- description: A mapping of local media sources and their paths on disk.
- required: false
- type: map
-language:
- description: "Default language used by Home Assistant. This may, for example, influence the language used by voice assistants. The language should be specified as an RFC 5646 language tag, and must be a language which Home Assistant is translated to."
- required: false
- type: string
- default: "en"
-country:
- description: "Country in which Home Assistant is running. This may, for example, influence radio settings to comply with local regulations. The country should be specified as an ISO 3166.1 alpha-2 code. Pick your country from the column **Code** of [Wikipedia's list of ISO 31661 alpha-2 officially assigned code codes](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements)"
- required: false
- type: string
-{% endconfiguration %}
+ ![Setting fields are grayed out because the configuration settings stored in configuration.yaml file](/images/docs/configuration/general-settings-stored-in-config-yaml.png)
-## Reload core service
-
-Home Assistant offers a service to reload the core configuration while Home Assistant is running called {% my developer_call_service service="homeassistant.reload_core_config" %}. This allows you to change any of the above sections and see it being applied without having to restart Home Assistant. To call this service, go to the "{% my developer_services %}" tab under {% my developer_services title="Developer Tools" %}, select the {% my developer_call_service service="homeassistant.reload_core_config" %} service and click the "CALL SERVICE" button. Alternatively, you can press the "Location & Customizations" button under {% my server_controls title="Developer Tools > YAML" %}.
+5. To apply the changes, follow the steps on [reloading the configuration](/docs/configuration/#reloading-configuration-changes).
diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown
index e289cdc10e8a..6a2d8e64db82 100644
--- a/source/_docs/configuration/customizing-devices.markdown
+++ b/source/_docs/configuration/customizing-devices.markdown
@@ -1,129 +1,33 @@
---
title: "Customizing entities"
description: "Simple customization for entities."
+related:
+ - docs: /integrations/homeassistant/
+ - docs: /docs/configuration/
+ title: Home Assistant Core integration documentation
---
-## Changing the entity ID
+## Changing entity name and entity ID
-You can use the UI to change the entity ID and friendly name of supported entities. To do this:
+After adding a new device, the entity may not have a name and the automatically assigned entity ID might look very technical. If you like, you can use your own naming concept for devices.
-1. Select the {% term entity %}, either from the frontend or by selecting the info button next to the entity in the Developer Tools "States" tab.
-2. Select the cog icon in the right corner of the entity's dialog
-![Entity dialog box.](/images/docs/configuration/customizing-entity-dialog.png)
-3. Enter the new name or the new entity ID (remember not to change the domain of the entity - the part before the `.`)
-![Settings for entity.](/images/docs/configuration/customizing-entity.png)
-4. Select *Update*
+To change the entity ID and friendly name of supported entities, follow these steps:
-If your entity is not supported, or you cannot customize what you need via this method, please see below for more options.
+1. Go to {% my entities title="**Settings** > **Devices & services** > **Entities**" %} and select the entity from the list.
+2. In the top right corner, select the cog icon.
-## Customizing entities
+ ![Entity dialog box with cog icon.](/images/docs/configuration/customizing-entity-dialog.png)
-By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities.
+3. Enter the new name or the new entity ID.
+ - For example, the entity ID here could be `light.bedroom_ligthstrip`.
+ - Do not change the domain of the entity - the part before the `.`.
-### Possible values
+ ![Settings for entity.](/images/docs/configuration/customizing-entity.png)
-{% configuration customize %}
-friendly_name:
- description: Name of the entity as displayed in the UI.
- required: false
- type: string
-entity_picture:
- description: URL to use as picture for entity.
- required: false
- type: string
-icon:
- description: "Any icon from [Material Design Icons](https://pictogrammers.com/library/mdi/). Prefix name with `mdi:`, ie `mdi:home`. Note: Newer icons may not yet be available in the current Home Assistant release."
- required: false
- type: string
-assumed_state:
- description: For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon.
- required: false
- type: boolean
- default: true
-device_class:
- description: Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). It does not set the `unit_of_measurement`.
- required: false
- type: device_class
- default: None
-unit_of_measurement:
- description: Defines the units of measurement, if any. This will also influence the graphical presentation in the history visualization as continuous value. Sensors with missing `unit_of_measurement` are showing as discrete values.
- required: false
- type: string
- default: None
-initial_state:
- description: Sets the initial state for automations, `on` or `off`.
- required: false
- type: boolean
- default: None
-{% endconfiguration %}
+4. Select **Update**.
+5. If you have used this entity in automations and scripts, you need to rename the entity ID there, too.
+ - Go to {% my automations title="**Settings** > **Automations & Scenes**" %} open the respective tab and find your automation or script.
-### Device class
+ ![Edit entity ID in automation.](/images/docs/configuration/edit_entity-id_in_automation.png)
-Device class is currently supported by the following platforms:
-
-- [Binary sensor](/integrations/binary_sensor/)
-- [Button](/integrations/button/)
-- [Cover](/integrations/cover/)
-- [Humidifier](/integrations/humidifier/)
-- [Media player](/integrations/media_player/)
-- [Number](/integrations/number/)
-- [Sensor](/integrations/sensor/)
-- [Switch](/integrations/switch/)
-
-### Manual customization
-
-
-
-If you implement `customize`, `customize_domain`, or `customize_glob` you must make sure it is done inside of `homeassistant:` or it will fail.
-
-
-
-```yaml
-homeassistant:
- name: Home
- unit_system: metric
- # etc
-
- customize:
- # Add an entry for each entity that you want to overwrite.
- thermostat.family_room:
- entity_picture: https://example.com/images/nest.jpg
- friendly_name: Nest
- switch.wemo_switch_1:
- friendly_name: Toaster
- entity_picture: /local/toaster.jpg
- switch.wemo_switch_2:
- friendly_name: Kitchen kettle
- icon: mdi:kettle
- switch.rfxtrx_switch:
- assumed_state: false
- media_player.my_media_player:
- source_list:
- - Channel/input from my available sources
- # Customize all entities in a domain
- customize_domain:
- light:
- icon: mdi:home
- automation:
- initial_state: "on"
- # Customize entities matching a pattern
- customize_glob:
- "light.kitchen_*":
- icon: mdi:description
- "scene.month_*_colors":
- icon: mdi:other
-```
-
-### Reloading customize
-
-Home Assistant offers a service to reload the core configuration while Home Assistant is running. This allows you to change your customize section and see your changes being applied without having to restart Home Assistant.
-
-To reload customizations, navigate to Developer Tools > YAML and then press the "Reload Location & Customizations" button. If you don't see this, enable Advanced Mode on your user profile page first.
-
-You can also use the [Quick bar](/docs/tools/quick-bar/#command-palette), and choose "Reload Location & Customizations".
-
-Alternatively, you can reload via service call. Navigate to Developer Tools > Services tab, select `homeassistant.reload_core_config` from the dropdown and press the "Call Service" button.
-
-
-New customize information will be applied the next time the state of the entity gets updated.
-
+If your entity is not supported, or you cannot customize what you need via this method, you need to edit the settings in your [`configuration.yaml` file](/docs/configuration/). For a detailed description of the entity configuration variables and device class information, refer to the [Home Assistant Core integration documentation](/integrations/homeassistant/).
diff --git a/source/_docs/configuration/secrets.markdown b/source/_docs/configuration/secrets.markdown
index df67cfd84302..559f1ff4dc20 100644
--- a/source/_docs/configuration/secrets.markdown
+++ b/source/_docs/configuration/secrets.markdown
@@ -1,6 +1,11 @@
---
title: "Storing secrets"
description: "Storing secrets outside of your configuration.yaml."
+related:
+ - docs: /docs/configuration/
+ title: configuration.yaml file
+ - docs: /docs/configuration/splitting_configuration/
+ title: Splitting the configuration
---
The `configuration.yaml` file is a plain-text file, thus it is readable by anyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. By using `!secret` you can remove any private information from your configuration files. This separation can also help you to keep easier track of your passwords and API keys, as they are all stored at one place and no longer spread across the `configuration.yaml` file or even multiple YAML files if you [split up your configuration](/docs/configuration/splitting_configuration/).
@@ -42,7 +47,7 @@ When you start splitting your configuration into multiple files, you might end u
- A `secrets.yaml` located in the same folder as the YAML file referencing the secret,
- next, parent folders will be searched for a `secrets.yaml` file with the secret, stopping at the folder with the main `configuration.yaml`.
-To see where secrets are being loaded from, you can either add an option to your `secrets.yaml` file or use the `check_config` script. The latter is only available for Home Assistant Core installations given it's available through [`hass`](/docs/tools/hass/).
+To see where secrets are being loaded from, you can either add an option to your `secrets.yaml` file or use the `check_config` script. The latter is only available for {% term "Home Assistant Core" %} installations given it's available through [`hass`](/docs/tools/hass/).
*Option 1*: Print where secrets are retrieved from to the Home Assistant log by adding the following to `secrets.yaml`:
diff --git a/source/_docs/configuration/splitting_configuration.markdown b/source/_docs/configuration/splitting_configuration.markdown
index 2f3e7bd30c10..c4f459b03dd6 100644
--- a/source/_docs/configuration/splitting_configuration.markdown
+++ b/source/_docs/configuration/splitting_configuration.markdown
@@ -1,17 +1,32 @@
---
title: "Splitting up the configuration"
description: "Splitting the configuration.yaml into several files."
+related:
+ - docs: /docs/configuration/
+ title: configuration.yaml file
+ - docs: /examples/#example-configurationyaml
+ title: Example configuration files by the community
+ - docs: /docs/configuration/packages
+ title: Using packages to organize configuration files
---
-So you've been using Home Assistant for a while now and your `configuration.yaml` file brings people to tears or you simply want to start off with the distributed approach, here's how to split the `configuration.yaml` into more manageable (read: humanly readable) pieces.
+So you've been using Home Assistant for a while now and your `configuration.yaml` file brings people to tears because it has become so large. Or, you simply want to start off with the distributed approach. Here's how to split the `configuration.yaml` into more manageable (read: human-readable) pieces.
-First off, several community members have sanitized (read: without API keys/passwords etc) versions of their configurations available for viewing, you can see a list of them [here](/examples/#example-configurationyaml).
+## Example configuration files for inspiration
-As commenting code doesn't always happen, please read on for the details.
+First off, several community members have sanitized (read: without API keys/passwords) versions of their configurations available for viewing. You can see a [list of example files here](/examples/#example-configurationyaml).
-Now despite the logical assumption that the `configuration.yaml` will be replaced by this process it will in fact remain, albeit in a much less cluttered form.
+As commenting code doesn't always happen, please read on to learn in detail how configuration files can be structured.
-In this lighter version we will still need what could be called the core snippet:
+## Analyzing the configuration files
+
+In this section, we are going use some example configuration files and look at their structure and format in more detail.
+
+Now you might think that the `configuration.yaml` will be replaced during the splitting process. However, it will in fact remain, albeit in a much less cluttered form.
+
+### The core configuration file
+
+In this lighter version, we will still need what could be called the core snippet:
```yaml
homeassistant:
@@ -27,9 +42,11 @@ homeassistant:
customize: !include customize.yaml
```
+### Indentation, includes, comments, and modularization
+
Note that each line after `homeassistant:` is indented two (2) spaces. Since the configuration files in Home Assistant are based on the YAML language, indentation and spacing are important. Also note that seemingly strange entry under `customize:`.
-`!include filename.yaml` is the statement that tells Home Assistant to insert the contents of `filename.yaml` at that point. This is how we are going to break a monolithic and hard to read file (when it gets big) into more manageable chunks.
+`!include customize.yaml` is the statement that tells Home Assistant to insert the parsed contents of `customize.yaml` at that point. The contents of the included file must be yaml data that is valid at the location it is included. This is how we are going to break a monolithic and hard to read file (when it gets big) into more manageable chunks.
Now before we start splitting out the different components, let's look at the other integrations (in our example) that will stay in the base file:
@@ -51,9 +68,20 @@ mqtt:
state_topic: "test/some_topic2"
```
-As with the core snippet, indentation makes a difference. The integration headers (`mqtt:`) should be fully left aligned (aka no indent), and the key (`sensor:`) should be indented two (2) spaces. The list `-` under the key `sensor` should be indented another two (2) spaces followed by a single space. The `mqtt` sensor list contains two (2) configurations containing two (2) keys each.
+As with the core snippet, indentation makes a difference:
+
+- The integration headers (`mqtt:`) should be fully left aligned (aka no indent).
+- The key (`sensor:`) should be indented two (2) spaces.
+- The list `-` under the key `sensor` should be indented another two (2) spaces followed by a single space.
+- The `mqtt` sensor list contains two (2) configurations, with two (2) keys each.
-While some of these integrations can technically be moved to a separate file they are so small or "one off's" where splitting them off is superfluous. Also, you'll notice the # symbol (hash/pound). This represents a "comment" as far as the commands are interpreted. Put another way, any line prefixed with a `#` will be ignored. This makes breaking up files for human readability really convenient, not to mention turning off features while leaving the entry intact.
+#### Comments
+
+The # symbol (hash/pound) represents a "comment" as far as the commands are interpreted. Put another way, any line prefixed with a `#` will be ignored by the software. It is for humans only. Comments allow breaking up files for readability, as well as turning off features while leaving the entry intact.
+
+#### Modularization and granularity
+
+While some of these integrations could technically be moved to a separate file, they are so small or "one off's" where splitting them off is superfluous.
Now, lets assume that a blank file has been created in the Home Assistant configuration directory for each of the following:
@@ -68,7 +96,7 @@ customize.yaml
`automation.yaml` will hold all the automation integration details. `zone.yaml` will hold the zone integration details and so forth. These files can be called anything but giving them names that match their function will make things easier to keep track of.
-Inside the base configuration file add the following entries:
+Inside the base configuration file, add the following entries:
```yaml
automation: !include automation.yaml
@@ -78,9 +106,15 @@ switch: !include switch.yaml
device_tracker: !include device_tracker.yaml
```
-Nesting `!include`s (having an `!include` within a file that is itself `!include`d) will also work.
+#### Include statements and packages to split files
+
+Nesting `!include` statements (having an `!include` within a file that is itself `!include`d) will also work.
+
+Some integrations support multiple top-level `!include` statements. This includes integrations defining an IoT domain. For example, `light`, `switch`, or `sensor`; as well as the `automation`, `script`, and `template` integrations, if you give a different label to each one.
+
+Configuration for other integrations can instead be split up by using packages. To learn more about packages, see the [Packages](/docs/configuration/packages) page.
-Some integrations support multiple top-level `!include`s, this includes integrations defining an IoT domain, e.g. `light`, `switch`, `sensor` as well as the `automation`, `script` and `template` integrations, if you give a different label to each one. Configuration for other integrations can instead be split up by using packages. To learn more about packages, see the [Packages](/docs/configuration/packages) page.
+#### Top level keys
Example of multiple top-level keys for the `light` platform.
@@ -189,11 +223,11 @@ learn more about packages, see the [Packages](/docs/configuration/packages) page
That about wraps it up.
-If you have issues checkout `home-assistant.log` in the configuration directory as well as your indentations. If all else fails, head over to our [Discord chat server][discord] and ask away.
+If you have issues, checkout `home-assistant.log` in the configuration directory as well as your indentations. If all else fails, head over to our [Discord chat server][discord] and ask away.
## Debugging configuration files
-If you have many configuration files, Home Assistant provides a CLI that allows you to see how it interprets them, each installation type has its own section in the common-tasks about this:
+If you have many configuration files, Home Assistant provides a CLI that allows you to see how it interprets them. Each installation type has its own section in the common-tasks about this:
- [Operating System](/common-tasks/os/#configuration-check)
- [Container](/common-tasks/container/#configuration-check)
diff --git a/source/_docs/configuration/state_object.markdown b/source/_docs/configuration/state_object.markdown
index 0b33f6bf7cb5..4736c0da719d 100644
--- a/source/_docs/configuration/state_object.markdown
+++ b/source/_docs/configuration/state_object.markdown
@@ -16,8 +16,9 @@ All states will always have an entity id, a state and a timestamp when last upda
| `state.domain` | Domain of the entity. Example: `light`. |
| `state.object_id` | Object ID of entity. Example: `kitchen`. |
| `state.name` | Name of the entity. Based on `friendly_name` attribute with fall back to object ID. Example: `Kitchen Ceiling`. |
-| `state.last_updated` | Time the state was written to the state machine in UTC time. Note that writing the exact same state including attributes will not result in this field being updated. Example: `2017-10-28 08:13:36.715874+00:00`. |
-| `state.last_changed` | Time the state changed in the state machine in UTC time. This is not updated when there are only updated attributes. Example: `2017-10-28 08:13:36.715874+00:00`. |
+| `state.last_changed` | Time the state changed in the state machine in UTC time. This is not updated if only state attributes change. Example: `2017-10-28 08:13:36.715874+00:00`. |
+| `state.last_reported`| Time the state was written to the state machine in UTC time. This timestamp is updated regardless of any change to the state or a state attribute. Example: `2017-10-28 08:13:36.715874+00:00`. |
+| `state.last_updated` | Time the state or state attributes changed in the state machine in UTC time. This is not updated if neither state nor state attributes changed. Example: `2017-10-28 08:13:36.715874+00:00`. |
| `state.attributes` | A dictionary with extra attributes related to the current state. |
| `state.context` | A dictionary with extra attributes related to the context of the state. |
@@ -41,8 +42,8 @@ When an attribute contains spaces, you can retrieve it like this: `state_attr('s
Context is used to tie {% term events %} and {% term states %} together in Home Assistant. Whenever an {% term automation %} or user interaction causes states to change, a new context is assigned. This context will be attached to all events and states that happen as result of the change.
-| Field | Description |
-| ----- | ------------------------------------------------------------------- |
-| context_id | Unique identifier for the context. |
-| user_id | Unique identifier of the user that started the change. Will be `None` if action was not started by a user (ie. started by an automation) |
-| parent_id | Unique identifier of the parent context that started the change, if available. For example, if an automation is triggered, the context of the trigger will be set as parent. |
+| Field | Description |
+| ------------ | ------------------------------------------------------------------- |
+| `context_id` | Unique identifier for the context. |
+| `user_id` | Unique identifier of the user that started the change. Will be `None` if the action was not started by a user (for example, started by an automation). |
+| `parent_id` | Unique identifier of the parent context that started the change, if available. For example, if an automation is triggered, the context of the trigger will be set as parent. |
diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown
index 791294ae44b2..099bb0b4ac3c 100644
--- a/source/_docs/configuration/templating.markdown
+++ b/source/_docs/configuration/templating.markdown
@@ -325,6 +325,32 @@ List of lights that are on with a brightness of 255:
{% endraw %}
+
+### State translated
+
+Not supported in [limited templates](#limited-templates).
+
+The `state_translated` function returns a translated state of an entity using a language that is currently configured in the [general settings](https://my.home-assistant.io/redirect/general/).
+
+#### State translated examples
+
+{% raw %}
+
+```text
+{{ states("sun.sun") }} # below_horizon
+{{ state_translated("sun.sun") }} # Below horizon
+{{ "sun.sun" | state_translated }} # Below horizon
+```
+
+```text
+{{ states("binary_sensor.movement_backyard") }} # on
+{{ state_translated("binary_sensor.movement_backyard") }} # Detected
+{{ "binary_sensor.movement_backyard" | state_translated }} # Detected
+```
+
+{% endraw %}
+
+
### Working with groups
Not supported in [limited templates](#limited-templates).
@@ -432,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
+{{ floors() }} # ['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
@@ -482,10 +553,12 @@ The same thing can also be expressed as a test:
{% endraw %}
-### Integrations
+### Entities for an integration
- `integration_entities(integration)` returns a list of entities that are associated with a given integration, such as `hue` or `zwave_js`.
-- `integration_entities(title)` if you have multiple instances set-up for an integration, you can also use the title you've set for the integration in case you only want to target a specific device bridge.
+- `integration_entities(config_entry_title)` if you have multiple entries set-up for an integration, you can also use the title you've set for the integration in case you only want to target a specific entry.
+
+If there is more than one entry with the same title, the entities for all the matching entries will be returned, even if the entries are for different integrations. It's not possible to search for entities of an untitled integration.
#### Integrations examples
@@ -501,6 +574,78 @@ The same thing can also be expressed as a test:
{% 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.
+- `issue(domain, issue_id)` returns a specific issue for the provided domain and issue_id.
+
+#### Issues examples
+
+{% raw %}
+
+```text
+{{ issues() }} # { ("homeassistant", "deprecated_yaml_ping"): {...}, ("cloud", "legacy_subscription"): {...} }
+```
+
+```text
+{{ issue('homeassistant', 'python_version') }} # {"breaks_in_ha_version": "2024.4", "domain": "homeassistant", "issue_id": "python_version", "is_persistent": False, ...}
+```
+
+{% endraw %}
+
### Immediate if (iif)
A common case is to conditionally return a value based on another value.
@@ -587,12 +732,16 @@ For example, if you wanted to select a field from `trigger` in an automation bas
{% endraw %}
-- `as_datetime()` converts a string containing a timestamp, or valid UNIX timestamp, to a datetime object.
+- `as_datetime(value, default)` converts a string containing a timestamp, or valid UNIX timestamp, to a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error. When the input is already a datetime object it will be returned as is. in case the input is a datetime.date object, midnight will be added as time. This function can also be used as a filter.
- `as_timestamp(value, default)` converts datetime object or string to UNIX timestamp. If that fails, returns the `default` value, or if omitted raises an error. This function can also be used as a filter.
- `as_local()` converts datetime object to local time. This function can also be used as a filter.
- `strptime(string, format, default)` parses a string based on a [format](https://docs.python.org/3.10/library/datetime.html#strftime-and-strptime-behavior) and returns a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error.
-- `relative_time` converts datetime object to its human-friendly "age" string. The age can be in second, minute, hour, day, month or year (but only the biggest unit is considered, e.g., if it's 2 days and 3 hours, "2 days" will be returned). Note that it only works for dates _in the past_.
- - Using `relative_time()` will cause templates to be refreshed at the start of every new minute.
+- `time_since(datetime, precision)` converts a datetime object into its human-readable time string. The time string can be in seconds, minutes, hours, days, months, and years. `precision` takes an integer (full number) and indicates the number of units returned. The last unit is rounded. For example: `precision = 1` could return "2 years" while `precision = 2` could return "1 year 11 months". This function can also be used as a filter.
+If the datetime is in the future, returns 0 seconds.
+A precision of 0 returns all available units, default is 1.
+- `time_until(datetime, precision)` converts a datetime object into a human-readable time string. The time string can be in seconds, minutes, hours, days, months, and years. `precision` takes an integer (full number) and indicates the number of units returned. The last unit is rounded. For example: `precision = 1` could return "2 years" while `precision = 2` could return "1 year 11 months". This function can also be used as a filter.
+If the datetime is in the past, returns 0 seconds.
+A precision of 0 returns all available units, default is 1.
- `timedelta` returns a timedelta object and accepts the same arguments as the Python `datetime.timedelta` function -- days, seconds, microseconds, milliseconds, minutes, hours, weeks.
{% raw %}
@@ -905,6 +1054,8 @@ The numeric functions and filters raise an error if the input is not a valid num
- `max([x, y, ...])` will obtain the largest item in a sequence. Uses the same parameters as the built-in [max](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.max) filter.
- `min([x, y, ...])` will obtain the smallest item in a sequence. Uses the same parameters as the built-in [min](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.min) filter.
- `average([x, y, ...], default)` will return the average value of the sequence. If list is empty or contains non-numeric value, returns the `default` value, or if omitted raises an error. Can be used as a filter.
+- `median([x, y, ...], default)` will return the median value of the sequence. If list is empty or contains non-numeric value, returns the `default` value, or if omitted raises an error. Can be used as a filter.
+- `statistical_mode([x, y, ...], default)` will return the statistical mode value (most frequent occurrence) of the sequence. If the list is empty, it returns the `default` value, or if omitted raises an error. It can be used as a filter.
- `e` mathematical constant, approximately 2.71828.
- `pi` mathematical constant, approximately 3.14159.
- `tau` mathematical constant, approximately 6.28318.
@@ -914,6 +1065,7 @@ The numeric functions and filters raise an error if the input is not a valid num
- `round(1, "half", default)` will always round to the nearest .5 value. `precision` should be 1 for this mode
- Filter `value_one|bitwise_and(value_two)` perform a bitwise and(&) operation with two values.
- Filter `value_one|bitwise_or(value_two)` perform a bitwise or(\|) operation with two values.
+- Filter `value_one|bitwise_xor(value_two)` perform a bitwise xor(\^) operation with two values.
- Filter `ord` will return for a string of length one an integer representing the Unicode code point of the character when the argument is a Unicode object, or the value of the byte when the argument is an 8-bit string.
### Complex type checking
diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown
index 1033a4859bc9..327d8a8b62e5 100644
--- a/source/_docs/configuration/troubleshooting.markdown
+++ b/source/_docs/configuration/troubleshooting.markdown
@@ -123,3 +123,14 @@ After you download logs, you will also want to download the diagnostics for the
Example of Download Diagnostics.
+
+### Handling unexpected restarts or crashes
+
+Suppose you find that Home Assistant unexpectedly restarts or crashes; it's likely that you have a misbehaving integration impacting system stability. Home Assistant has a built-in debug option that can help find implementation errors. It can also block many unsafe thread operations from crashing the system. Enabling debug has a slight performance impact on the system and is not recommended for long-term use. To enable debug, add the following to your `configuration.yaml`:
+
+```yaml
+homeassistant:
+ debug: true
+```
+
+Once debug is enabled, periodically check [Home Assistant System Logs](https://my.home-assistant.io/redirect/logs) for new messages.
\ No newline at end of file
diff --git a/source/_docs/configuration/yaml.markdown b/source/_docs/configuration/yaml.markdown
index d3f2adda2262..bbc31bf9c0cc 100644
--- a/source/_docs/configuration/yaml.markdown
+++ b/source/_docs/configuration/yaml.markdown
@@ -1,13 +1,30 @@
---
-title: "YAML"
-description: "Details about YAML to configure Home Assistant."
+title: "YAML syntax"
+description: "Details about the YAML syntax used to configure Home Assistant."
+related:
+ - docs: /docs/configuration/
+ title: configuration.yaml file
+ - docs: /docs/configuration/secrets/
+ title: Storing private data in separate file
+ - docs: /docs/automation/yaml/
+ title: Automation.yaml
+ - docs: /docs/configuration/troubleshooting/
+ title: Troubleshooting the configuration files
+ - docs: /docs/configuration/#validating-the-configuration
+ title: Validating the configuration
+ - url: https://developers.home-assistant.io/docs/documenting/yaml-style-guide/
+ title: YAML Style Guide for Home Assistant developers
---
-Home Assistant uses the [YAML](https://yaml.org/) syntax for configuration. YAML might take a while to get used to but is really powerful in allowing you to express complex configurations.
+Home Assistant uses the [YAML](https://yaml.org/) syntax for configuration. While most integrations can be configured through the UI, some integrations require you to edit your [`configuration.yaml`](/docs/configuration/) file to specify its settings.
-While more and more integrations are configured through the UI, for some, you will add code in your [`configuration.yaml`](/docs/configuration/) file to specify its settings.
+## YAML Style Guide
-The following example entry assumes that you would like to set up the [notify integration](/integrations/notify) with the [pushbullet platform](/integrations/pushbullet).
+This page gives a high-level introduction to the YAML syntax used in Home Assistant. For a more detailed description and more examples, refer to the [YAML Style Guide for Home Assistant developers](https://developers.home-assistant.io/docs/documenting/yaml-style-guide/).
+
+## A first example
+
+The following YAML example entry assumes that you would like to set up the [notify integration](/integrations/notify) with the [pushbullet platform](/integrations/pushbullet).
```yaml
notify:
@@ -21,22 +38,20 @@ notify:
The basics of YAML syntax are block collections and mappings containing key-value pairs. Each item in a collection starts with a `-` while mappings have the format `key: value`. This is somewhat similar to a Hash table or more specifically a dictionary in Python. These can be nested as well. **Beware that if you specify duplicate keys, the last value for a key is used**.
-Note that indentation is an important part of specifying relationships using YAML. Things that are indented are nested "inside" things that are one level higher. So in the above example, `platform: pushbullet` is a property of (nested inside) the `notify` integration.
+## Indentation in YAML
-Getting the right indentation can be tricky if you're not using an editor with a fixed width font. Tabs are not allowed to be used for indentation. Convention is to use 2 spaces for each level of indentation.
+In YAML, indentation is important for specifying relationships. Indented lines are nested inside lines that are one level higher. In the above example, `platform: pushbullet` is a property of (nested inside) the `notify` integration.
-You can use the online service [YAML Validator](https://codebeautify.org/yaml-validator/) to check if your YAML syntax is correct before loading it into Home Assistant which will save you some time. If you do so, be aware that this is a third-party service and is not maintained by the Home Assistant community.
+Getting the right indentation can be tricky if you're not using an editor with a fixed-width font. Tabs are not allowed to be used for indentation. The convention is to use 2 spaces for each level of indentation.
-
+## Comments
-Please pay attention to not storing private data (passwords, API keys, etc.) directly in your `configuration.yaml` file. Private data can be stored in either a [separate file](/docs/configuration/secrets/) or in [environmental variables](/docs/configuration/yaml/#using-environment-variables), which circumvents this security problem.
+Strings of text following a `#` are comments. They are ignored by the system. Comments explain in plain language what a particular code block is supposed to do. For future-you or someone else looking at the file.
-
-
-Strings of text following a `#` are comments and are ignored by the system.
+### Example with comment and nesting
The next example shows an [input_select](/integrations/input_select) integration that uses a block collection for the values of options.
-The other properties (like `name:`) are specified using mappings. Note that the second line just has `threat:` with no value on the same line. Here threat is the name of the input_select and the values for it are everything nested below it.
+The other properties (like `name:`) are specified using mappings. Note that the second line just has `threat:` with no value on the same line. Here, `threat` is the name of the input_select. The values for it are everything nested below it.
```yaml
input_select:
@@ -51,6 +66,8 @@ input_select:
initial: 0
```
+### Example of nested mapping
+
The following example shows nesting a collection of mappings in a mapping. In Home Assistant, this would create two sensors that each use the MQTT platform but have different values for their `state_topic` (one of the properties used for MQTT sensors).
```yaml
@@ -65,8 +82,8 @@ sensor:
### Environment variables
-On Home Assistant Core installations, you can include values from your system's environment variables with `!env_var`.
-Note that this will only work for Home Assistant Core installations, in a scenario where it is possible to specify these.
+On {% term "Home Assistant Core" %} installations, you can include values from your system's environment variables with `!env_var`.
+Note that this will only work for {% term "Home Assistant Core" %} installations, in a scenario where it is possible to specify these.
Regular Home Assistant users are recommended to use `!include` statements instead.
```yaml
@@ -76,7 +93,7 @@ example:
#### Default value
-If an environment variable is not set, you can fallback to a default value.
+If an environment variable is not set, you can fall back to a default value.
```yaml
example:
@@ -120,3 +137,9 @@ Not quoting the value may generate an error such as:
```txt
not a valid value for dictionary value @ data
```
+
+## Validating YAML syntax
+
+With all these indents and rules, it is easy to make a mistake. The best way to check if your YAML syntax is correct (validate) depends on the editor you use. We can't list them all here.
+
+- If you edit the files directly in Home Assistant, refer to the section: [Validating the configuration](/docs/configuration/#validating-the-configuration)
diff --git a/source/_docs/energy/faq.markdown b/source/_docs/energy/faq.markdown
index 25fce51be539..2cefbaf96ad4 100644
--- a/source/_docs/energy/faq.markdown
+++ b/source/_docs/energy/faq.markdown
@@ -15,7 +15,7 @@ Think of this in a parallel to speed and distance: Power is the speed you are go
Therefore Energy (kiloWatt-hour) is not an average of the Power you are consuming over a given period of time (the unit of the average power would be Watt or kiloWatt again). Energy is the integral (mathematical operation) of the Power function.
-This difference is very important as you need to use the proper entities in our Energy Panel.
+This difference is very important as you need to use the proper entities in our Energy dashboard.
## Creating an Energy Sensor out of a Power Sensor
@@ -29,9 +29,9 @@ If you are using a 3rd party device (e.g. not reading directly from your utility
To accomplish such, you can use the [utility_meter integration](/integrations/utility_meter/). With this integration, you define as many tariffs as required (in accordance with your utility provider contract) and HA will be able to differentiate energy consumptions in each of the tariffs. Please note that each utility provider has its own time schedules for peak and off-peak and you are required to create an automation that switches the utility_meter entity from one tariff to the other.
-## The energy panel is not visible
+## The energy dashboard is not visible
-If you do not see the Energy panel in the sidebar, make sure you have not removed [`default_config:`](/integrations/default_config/) from your `configuration.yaml`. If you have, you will need to add the `energy:` integration manually.
+If you do not see the Energy dashboard in the sidebar, make sure you have not removed [`default_config:`](/integrations/default_config/) from your `configuration.yaml`. If you have, you will need to add the `energy:` integration manually.
## Troubleshooting missing entities
diff --git a/source/_docs/energy/gas.markdown b/source/_docs/energy/gas.markdown
index ae0f109e8345..ec9b6ebbf106 100644
--- a/source/_docs/energy/gas.markdown
+++ b/source/_docs/energy/gas.markdown
@@ -31,4 +31,4 @@ We have worked with creator [Marcel Zuidwijk](https://www.zuidwijk.com) to devel
#### Read the Gas Meter using a magnetometer
-[Diaphragm gas meters](https://en.wikipedia.org/wiki/Gas_meter#Diaphragm/bellows_meters) are the most common type of gas meter, and their movement can frequently be observed with a magnetometer. The [QMC5883L](https://esphome.io/components/sensor/qmc5883l.html) is a common and inexpensive option that ESPHome supports. Many posts on the forums of users having luck with this method, such as [this one](https://community.home-assistant.io/t/water-gas-meter-monitoring-via-magnetometer-sine-wave-to-pulse-issue/245904).
+[Diaphragm/bellows gas meters](https://en.wikipedia.org/wiki/Gas_meter#Diaphragm/bellows_meters) are the most common type of gas meter, seen in almost all residential installations, and their movement can frequently be observed with a magnetometer. The [QMC5883L](https://esphome.io/components/sensor/qmc5883l.html) is a common and inexpensive option that ESPHome supports. A project that makes it easy to use this magnetometer and calibrate it is [this water-gas-meter project on GitHub](https://github.com/tronikos/esphome-magnetometer-water-gas-meter).
diff --git a/source/_docs/energy/individual-devices.markdown b/source/_docs/energy/individual-devices.markdown
index 6e17a2516a54..ec6222a18c22 100644
--- a/source/_docs/energy/individual-devices.markdown
+++ b/source/_docs/energy/individual-devices.markdown
@@ -19,6 +19,6 @@ Smart relays sit behind your "normal" switches and make them smart. It allows yo
## Devices with power (W) sensors
-Some smart devices, such as air conditioning, boilers, and others, may provide a power sensor, measured in Watts. You can use the [Integration (Riemann sum integral) integration](/integrations/integration/#energy) to calculate the energy your device is using. You can then use the energy sensor in the Energy Dashboard, as individual devices.
+Some smart devices, such as air conditioning, boilers, and others, may provide a power sensor, measured in Watts. You can use the [Integration (Riemann sum integral) integration](/integrations/integration/#energy) to calculate the energy your device is using. You can then use the energy sensor in the Energy Dashboard, as individual devices. For information on setting up an entity for use in the **Energy** dashboard, refer to the [energy FAQ](/docs/energy/faq/#troubleshooting-missing-entities).
diff --git a/source/_docs/energy/water.markdown b/source/_docs/energy/water.markdown
index 496f83b70b41..a37d5ab79144 100644
--- a/source/_docs/energy/water.markdown
+++ b/source/_docs/energy/water.markdown
@@ -5,32 +5,66 @@ description: "Learn how to add information about your water usage to Home Assist
Home Assistant allows you to track your water usage in the home energy management too.
-Although water is not strictly "energy", it is still a valuable resource to track and monitor as it is often tightly coupled with energy usage (like gas). Additionally, it can help you reduce your ecological footprint by using less water.
+Although water usage is not strictly "energy", it is still a valuable resource to track and monitor as it is often tightly coupled with energy usage (like gas). Additionally, it can help you reduce your ecological footprint by using less water.
-## Hardware
+### Home water meters
-Home Assistant will need to know the amount of water that is being consumed in order to be able to track it. Several hardware options are available to do this.
+There are several ways to measure water usage in your home. Multiple methods exist for reading your water usage. Older water meters typically feature a common arrow or only display total consumption. For these meters, you may require an [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) with an ESP32 camera. While effective, this solution can be tedious to set up as it leans towards a DIY approach.
+
+Newer water meters are equipped with a rotary disk that can be read using two methods. The first method utilizes light sensors, while the second method employs proximity sensors. The proximity sensor detects changes in the magnetic field, with each rotation of the disk representing one liter of water used. Meanwhile, the light sensor method operates on an autocorrelation technique, providing accuracy down to 100 milliliters instead of the traditional one-liter step.
+
+For most water meters, the rotary encoder disk suffices the light sensor version. However, some older or specialized meters may necessitate the use of a proximity meter instead.
+
+Home Assistant also has integrations build into the platform that connect with existing products
+
+## Home Assistant integrations
+
+Home Assistant will need to know the amount of water that is being consumed to be able to track usage. Several [water metering (fluid flow rate sensor device)](https://en.wikipedia.org/wiki/Water_metering) hardware options are available to do this. Depending on your setup, the required hardware is provided by your public water utility company, or you may need to buy your own.
+
+Some hardware with water meters may also provide additional practical functions or sensors, such as [valve](/integrations/valve), for example, for controlling water shutoff, or temperature and pressure (to enable freeze alarms).
We have the following integrations available for existing products that can provide information about water usage:
- [Flo](/integrations/flo)
- [Flume](/integrations/flume)
- [HomeWizard Energy](/integrations/homewizard)
+- [StreamLabs](/integrations/streamlabswater)
+- [Suez Water](/integrations/suez_water)
+
+There are also products for water usage monitoring that are based on existing common IoT protocol standards:
+
+- [Z-Wave](/integrations/zwave_js)
+- [Zigbee](/integrations/zha)
+- [Matter (BETA)](/integrations/matter)
+
+
+## Community-made sensors
+
+If your water meter lacks a rotary disk, magnetic disk, or coil. There are alternative solutions available to seamlessly integrate water monitoring into your smart home setup:
+
+- [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) is a project running on an ESP32-CAM and can be fully integrated into Home Assistant using the Home Assistant Discovery Functionality of MQTT. It digitalizes your gas/water/electricity meter display and provides its data in various ways.![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/
+
+If you have a Culligan Water Softener, you may be able to interface with the inbuilt `DEBUG PORT` and receive water usage stats including `Gallons` (gal), `Gallons Per Minute` (gal/min), and `Gallons to Recharge` (gal):
+
+- [cullAssistant](https://github.com/LelandSindt/cullAssistant) (ESPHome)
-Alternatively, the following shops sell ESPHome-based devices, that use a proximity sensor to detect a rotating magnet in your water meter and use that pulse to count each liter of water used.
+Alternatively, the following shops sell ESPHome-based devices that use a 3-phase light sensor to detect a rotating disk in your water meter and convert this to the amount of water used in milliliters (ml):
+- [Muino water meter reader](https://watermeter.muino.nl/) (ESPHome)
-- [S0tool](https://huizebruin.github.io/s0tool/) ("Made for ESPHome" approved)
+Alternatively, the following shops sell ESPHome-based devices, that use a proximity sensor to detect a rotating magnet in your water meter and use that pulse to count each liter of water used:
+- [S0tool](https://s0tool.nl/) ("Made for ESPHome" approved)
- [Waterlezer dongle](https://smart-stuff.nl/product/esphome-waterlezer-dongle/) (Dutch)
- [Slimme Watermeter Gateway](https://smartgateways.nl/product/slimme-watermeter-gateway/) (Dutch)
- [watermeterkit.nl](https://watermeterkit.nl/) (Dutch)
-Alternatively, the following shops sell ESPHome-based devices that use a 3-phase light sensor to detect a rotating disk in your water meter and convert this to the amount of water used in milliliters (ml).
-- [Muino water meter reader](https://watermeter.muino.nl/)
+## DIY
Maybe you like to build one yourself?
- - Pieter Brinkman has quite a [nice blog article on how to create your own water sensor](https://www.pieterbrinkman.com/2022/02/02/build-a-cheap-water-usage-sensor-using-esphome-home-assistant-and-a-proximity-sensor/) using ESPHome, or [build a water meter](https://www.ztatz.nl/p1-monitor-watermeter/) that works with the [P1 Monitor](/integrations/p1_monitor) integration.
- - [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) is a project running on an ESP32-CAM and can be fully integrated into Home Assistant using the Home Assistant Discovery Functionality of MQTT. It digitalizes your gas/water/electricity meter display and provides its data in various ways.![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/ai-on-the-edge-device.jpg)
- - [watermeter](https://github.com/nohn/watermeter) running classic OCR and statistical pattern recognition on any system supporting Docker
+- Pieter Brinkman has quite a [nice blog article on how to create your own water sensor](https://www.pieterbrinkman.com/2022/02/02/build-a-cheap-water-usage-sensor-using-esphome-home-assistant-and-a-proximity-sensor/) using ESPHome, or [build a water meter](https://www.ztatz.nl/p1-monitor-watermeter/) that works with the [P1 Monitor](/integrations/p1_monitor) integration.
+- [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) is a project running on an ESP32-CAM and can be fully integrated into Home Assistant using the Home Assistant Discovery Functionality of MQTT. It digitalizes your gas/water/electricity meter display and provides its data in various ways.![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/ai-on-the-edge-device.jpg)
+- [watermeter](https://github.com/nohn/watermeter) running classic OCR and statistical pattern recognition on any system supporting Docker
+- [Muino water meter reader 3-phase](https://muino.nl/product/3-phase-muino-light-sensor-encoder/) Using the 3-phase sensor technique, a battery-powered version can be possible with this sensor.
+- [Read water meter with magnetometer](https://github.com/tronikos/esphome-magnetometer-water-gas-meter) using [QMC5883L](https://esphome.io/components/sensor/qmc5883l.html), a common and inexpensive magnetometer. This should be compatible with all the water meters the Flume water sensor is compatible with, which is [compatible](https://help.flumewater.com/en/articles/1618594-is-the-flume-device-compatible-with-all-water-meters) with about 95% of water meters in the United States.
If you manually integrate your sensors, for example, using the [MQTT](/integrations/mqtt) or [RESTful](/integrations/rest) integrations: Make sure you set and provide the `device_class`, `state_class`, and `unit_of_measurement` for those sensors.
diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown
deleted file mode 100644
index 18afa58b9606..000000000000
--- a/source/_docs/frontend/browsers.markdown
+++ /dev/null
@@ -1,93 +0,0 @@
----
-title: "Browsers"
-description: "Browser compatibility list"
----
-
-Home Assistant requires a web browser to show the frontend and supports all major modern browsers. We don't test the web interface against all available browsers but this page tracks different browsers on various operating systems and should help you to pick a browser which works. The "Release" column contains the release number which was tested. This doesn't mean that older or newer releases will not work.
-
-If a browser is listed as working but you are still having problems, it is possible that some add-on or extension may be the problem. Some add-ons or extension are known to cause issue with the frontend, but it's not possible to test them all.
-
-If you are having issues with the frontend displaying correctly, you should disable all your add-ons or extensions and enable them one at a time. At last but not least, consider restarting your browser.
-
-We would appreciate if you help to keep this page up-to-date and add feedback.
-
-## Microsoft Windows
-
-| Browser | Release | State | Comments |
-| :------------------------ |:---------------|:-----------|:-------------------------|
-| Internet Explorer ([IE]) | 11 | Not supported | Does not support promises. |
-| Microsoft [Edge] | deli. Win 10 | works | Streaming updates not working. |
-| [Chrome] | 61.0.3163.100 | works | |
-| [Firefox] | 62.0.3 | works | |
-| [Iridium] | 48.2 | works | |
-| [Opera] | 42.0.2393.351 | works | |
-
-## macOS
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [Safari] | | works | Not working with Safari Technology Preview 112 beta |
-
-## Linux
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [Firefox] | 62.0 | works | |
-| [Midori] | 0.5.11 | works | |
-| [Chromium] | 69.0.3497.81 | works | |
-| [Conkeror] | 1.0.2 | works | |
-| [Tor Browser] | 7.0.8 | works | |
-| [Konqueror] | | unknown | |
-| [Uzbl] | 0.9.0 | works | |
-| [Opera] | 42.0.2393.351 | works | |
-| [Lynx] | 2.12 | fails | loads empty page |
-| [elinks] | | fails | page with manifest and import |
-| [w3m] | 0.5.3 | fails | display the icon shown while loading HA |
-| [Epiphany] | 3.18.5 | works | |
-| [surf] | 0.7 | works | |
-| [Chrome] | 71.0.3578.98 | works | |
-| [Waterfox] | 56.2.6 | fails | |
-
-## Android
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [Chrome] | 50.0.2661.89 | works | Can also be added to desktop |
-| [Firefox] | 46.0.1 | works | Can also be added to desktop |
-| [Opera] | 42.0.2246.112628 | works | Can also be added to desktop |
-
-## iOS
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [Safari] | | works | Can also be added to desktop. Not working in iOS 14 beta 5. |
-| [Chrome] | | works | Not working in iOS 14 beta 5. |
-
-There are reports that devices running with iOS prior to iOS 10, especially old iPads, are having trouble. Devices running iOS 14 beta 5, you will not be able to interact with Home Assistant controls.
-
-## webOS
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [LG webOS TV Built-in]| webOS 04.80.03 | works | including magic remote |
-
-[Chrome]: https://www.google.com/chrome/
-[Chromium]: https://www.chromium.org/
-[Conkeror]: http://conkeror.org/
-[Edge]: https://www.microsoft.com/en-us/edge
-[elinks]: http://elinks.or.cz/
-[Epiphany]: https://wiki.gnome.org/Apps/Web
-[Firefox]: https://www.mozilla.org/en-US/firefox/
-[IE]: https://support.microsoft.com/en-us/help/17621/internet-explorer-downloads
-[Iridium]: https://iridiumbrowser.de/
-[Konqueror]: https://konqueror.org/
-[Lynx]: https://lynx.browser.org/
-[Midori]: https://astian.org/en/midori-browser/
-[Opera]: https://www.opera.com/
-[Safari]: https://www.apple.com/safari/
-[surf]: https://surf.suckless.org/
-[Tor Browser]: https://www.torproject.org/
-[Uzbl]: https://www.uzbl.org/
-[w3m]: https://w3m.sourceforge.net/
-[Waterfox]: https://www.waterfox.net
-[LG webOS TV Built-In]: https://www.lg.com/uk/support/help-library/details-on-enjoying-internet-browsing-on-your-lg-webos-tv-CT00008334-1435838149474
diff --git a/source/_docs/locked_out.md b/source/_docs/locked_out.md
index 37cedcf4adc1..d8935e29b31c 100644
--- a/source/_docs/locked_out.md
+++ b/source/_docs/locked_out.md
@@ -1,41 +1,68 @@
---
title: "I'm locked out!"
description: "Options for regaining access"
+related:
+ - docs: /common-tasks/os/#listing-all-users-from-the-command-line
+ title: Listing all user names via command line
+ - url: https://yellow.home-assistant.io/guides/factory-reset/
+ title: Reset the Yellow
+ - url: https://green.home-assistant.io/guides/reset/
+ title: Reset the Green
---
The sections below deal with recovering from a situation where you are not able to sign in,
or need to recover your data.
+## Forgot user name
+
+If you’ve forgotten your username, ask the owner to help you.
+If you are using the {% term "Home Assistant Operating System" %} and have access to the Home Assistant server, you can connect a terminal and enter the `auth list` command. This command lists all users that are registered on your Home Assistant.
+
## Forgot password
-### Home Assistant (including Supervised)
+If you are not the owner or do not have administrator rights, ask the owner to give you a new password.
+
+- In the navigation pane on the left, check if you see the **Settings** menu listed above the **Notifications**.
+ - If you don't, you do not have administrator rights.
+
+If you are the owner or have administrator, there are different methods to reset a password, depending on your setup:
-If you are still logged in to the web interface with your user, then you are in luck.
+### To reset a password while still logged in (including Supervised)
-1. Add a new user as an administrator and give the new user a password you can remember.
-2. Then log out, and log in with this new user.
-3. Reset your password via this new administrator account (and then delete this new account).
- - Your configuration will remain, and you don't have to do a new onboarding process.
+The method used to reset a password depends on your user rights:
-If you’ve forgotten your username, then deleting the files mentioned further below will be necessary to start a new onboarding process.
+- If you are a regular user without administrator rights, ask the owner to [give you a new password](/docs/locked_out/#to-reset-a-users-password-as-an-owner-via-the-web-interface).
+- If you are the owner, choose one of the procedures below to reset your password.
+ - You cannot recover an owner password from within Home Assistant.
+ - There is only one owner per system. You cannot add a new owner.
+- If you are an administrator, add a new user as an administrator and give the new user a password you can remember.
+ 1. Then log out, and log in with this new user.
+ 2. Reset your password via this new administrator account (and then [delete this new account](/docs/locked_out/#to-delete-a-user)).
+ - Your configuration will remain, and you don't have to do a new onboarding process.
-#### To reset a user's password, via console
+### To reset an owner's password, via console
-Use this procedure if you know the username, and you can access the [Home Assistant console](/hassio/commandline/) on the device itself (not the SSH terminal from the add-ons).
+Use this procedure only if the following conditions are met:
-1. Connect a keyboard and monitor to your device and access the terminal:
+- You know the username.
+- You can access the [Home Assistant console](/hassio/commandline/) **on the device itself** (not via the SSH terminal from the add-ons).
+
+1. Connect to the console of the Home Assistant server:
+ - If you are using a virtual machine, connect to your virtual machine console.
- If you are using a Home Assistant Yellow, refer to the following procedure:
- [Using the serial console on Windows](https://yellow.home-assistant.io/guides/use-serial-console-windows/)
- [Using the serial console on macOS / Linux](https://yellow.home-assistant.io/guides/use-serial-console-linux-macos/)
- If you are using a Home Assistant Green, refer to the following procedure:
- [Using the terminal](https://green.home-assistant.io/guides/use-terminal/)
+ - If you are using another board, connect a keyboard and monitor to your device and access the terminal. The procedure is likely very similar to the one described for the Green in the step above.
2. Once you have opened the Home Assistant command line, enter the following command:
- Note: `existing_user` is a placeholder. Replace it with your user name.
- Note: `new_password` is a placeholder. Replace it with your new password.
- **Command**: `auth reset --username existing_user --password new_password`
+ - **Troubleshooting**: If you see the message `zsh: command not found: auth`, you likely did not enter the command in the serial console connected to the device itself, but in the terminal within Home Assistant.
3. You can now log in to Home Assistant using this new password.
-#### To reset a user's password, via the container command line
+### To reset a user's password, via the container command line
If you are running Home Assistant in a container, you can use the command line in the container with the `hass` command to change your password. The steps below refer to a Home Assistant container in Docker named `homeassistant`. Note that while working in the container, commands will take a few moments to execute.
@@ -45,7 +72,9 @@ If you are running Home Assistant in a container, you can use the command line i
4. `exit` to exit the container command line
5. `docker restart homeassistant` to restart the container.
-#### To reset a user's password, as an owner via the web interface
+### To reset a user's password, as an owner via the web interface
+
+Only the owner can change other user's passwords.
1. In the bottom left, select your user to go to the {% my profile title="**Profile**" %} page and make sure **Advanced Mode** is activated.
2. Go to {% my people title="**Settings** > **People**" %} and select the person for which you want to change the password.
@@ -55,7 +84,9 @@ If you are running Home Assistant in a container, you can use the command line i
5. Confirm the new password by entering it again, and select **OK** again.
6. A confirmation box will be displayed with the text **Password was changed successfully**.
-#### To delete a user, as an administrator via the web interface
+### To delete a user
+
+You need to be an owner or have administrator rights to delete a user.
1. Go to {% my people title="**Settings** > **People**" %} and select the person which you want to delete.
- Note: you cannot delete the owner.
@@ -63,21 +94,15 @@ If you are running Home Assistant in a container, you can use the command line i
- A confirmation dialog box will be displayed.
3. To confirm, select **OK**.
-#### Start a new onboarding process
+### To prepare the system to start a new onboarding process
+
+If you lose the password associated with the owner account and the steps above do not work to reset the password, the only way to resolve this is to start a new onboarding process.
-If you lose the password associated with the owner account and the steps above do not work to reset the password, the only way to resolve this is to start a new onboarding process. If you have an external backup with an administrator account of which you still know the login credentials, you can restore that backup. If you do not have a backup, resetting the device will erase all data.
+- If you have an external backup with an administrator account of which you still know the login credentials, you can restore that backup.
+- If you do not have a backup, resetting the device will erase all data.
- If you have a Home Assistant Green, [reset the Green](https://green.home-assistant.io/guides/reset/).
- If you have a Home Assistant Yellow, [reset the Yellow](https://yellow.home-assistant.io/guides/factory-reset/).
-- If you have a Raspberry Pi, delete *all* the authentication data.
- - Shut down Home Assistant.
- - Remove your SD card and access it from your PC.
- - Delete the following files from the `.storage/` folder in your [configuration folder](/docs/configuration/):
- - `auth`
- - `auth_provider.homeassistant`
- - `onboarding`
- - `hassio`
- - `cloud`
## Recovering data for Home Assistant (including Supervised)
diff --git a/source/_docs/organizing.markdown b/source/_docs/organizing.markdown
new file mode 100644
index 000000000000..5091baaac10a
--- /dev/null
+++ b/source/_docs/organizing.markdown
@@ -0,0 +1,55 @@
+---
+title: "Grouping your assets"
+description: "Grouping your assets makes it easier to find them and allows you to target groups in automations."
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /docs/organizing/labels/
+ title: Labels
+ - docs: /docs/organizing/categories/
+ title: Categories
+---
+
+Once you have more devices, you may want to target entire groups of devices in automations. It also becomes more challenging to find items in lists. There are a few tools to group your assets: [Areas](#areas), [floors](#floors), [labels](#labels), and [categories](#categories).
+
+| Taxonomy | Automation target | Entity can have multiple |
+| -------- | ----------------- | ------------------------ |
+| Area | ✅ | ❌ |
+| Floor | ✅ | ❌ |
+| Label | ✅ | ✅ |
+| Category | ❌ | ❌ |
+
+## Area
+
+- Groups {% term devices %} and {% term entities %}.
+- Can be assigned to one floor.
+- Reflects a physical area (or room) in your home.
+- Can be used in automations: Allows targeting an entire group of devices with a service call. For example, turning off all the lights in the living room.
+
+- Areas can also be used to automatically generate cards, such as the [Area card](/dashboards/area/).
+
+## Floor
+
+- Groups areas.
+- {% term Devices %} and {% term entities %} cannot be assigned to floors, but to areas only.
+- Can have multiple areas.
+- Can be used in automations and scripts as a target for actions. For example, to turn off all the lights on the downstairs floor when you go to bed.
+
+
+
+## Labels
+
+- Can be assigned to areas, devices, entities, automations, scenes, scripts, and helpers.
+- Can be used in automations and scripts as a target for actions and services.
+- Labels can also be used to filter data in tables. For example, you can filter the list of devices to show only devices with the label `heavy energy usage` or turn these devices off when there is not a lot of solar energy available.
+
+
+
+## Category
+
+- Groups items in a table.
+- Categories are unique for each table. The automations page can have different categories than the scene, scripts, or helpers settings page.
+
+
diff --git a/source/_docs/organizing/areas.markdown b/source/_docs/organizing/areas.markdown
new file mode 100644
index 000000000000..6af4f1434ba7
--- /dev/null
+++ b/source/_docs/organizing/areas.markdown
@@ -0,0 +1,90 @@
+---
+title: "Areas"
+description: "Group your devices and entities in areas and group areas in floors."
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/
+ - docs: /docs/organizing/labels/
+ title: Labels
+ - docs: /docs/organizing/categories/
+ title: Categories
+ - docs: /docs/configuration/templating/#areas
+ title: Using areas in template
+---
+
+An area in Home Assistant is a logical grouping of {% term devices %} and {% term entities %} that are meant to match areas (or rooms) in the physical world of your home. For example, the "Living room" area groups devices and entities in your living room. Areas allow you to target an entire group of devices with a service call. For example, turning off all the lights in the living room.
+Areas can be assigned to floors. Areas can also be used to automatically generate cards, such as the [Area card](/dashboards/area/).
+
+## Creating an area
+
+Follow these steps to create a new area from the **Areas** view.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select **Create area**.
+2. In the dialog, enter the area details:
+ - Give the area a **Name** (required).
+ - Add an icon (We use [Material icons](https://pictogrammers.com/library/mdi/)).
+ - Assign the area to a floor.
+ - If you have not created floors yet, you can [create a new one](/docs/organizing/floors/#creating-a-floor).
+ - The number can be negative. For example for underground floors.
+ - This number can later be used for sorting.
+ - Add an image representing that area.
+ - Add an **Alias**.
+ - Aliases are alternative names used in [voice assistants](/voice_control/aliases/) to refer to an area, entity, or floor.
+
+ ![Create area dialog](/images/organizing/create_area_01.png)
+3. Select **Add**.
+
+ **Result**: A new area is created.
+
+## Assigning areas to floors and add labels
+
+If an area has not yet been assigned to a floor, it is shown in the **Unassigned areas** section. Follow these steps to assign an area to a floor.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select **Create area**.
+2. On the area card, select the pencil icon.
+3. In the dialog, select the floor and add labels, if you like.
+
+## Assigning an area to multiple items
+
+You can assign an area to multiple items at once in the automation, scene, script, and device pages.
+
+1. Depending on what you want to assign, go to one of the following pages:
+ - For automations, scripts, or scenes {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+ - For devices, go to {% my devices title="**Settings** > **Devices & services** > **Devices**" %}.
+2. In the list, [select all the items](/docs/organizing/filtering#selecting-multiple-items-in-a-table) you want to assign to an area.
+
+ ![Screenshot showing how to assign multiple devices to an area](/images/organizing/area_assign_devices.png)
+
+3. In the top right corner, select **Move to area** and select the target area from the list.
+
+## Editing an area
+
+Follow these steps to edit an area.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and on the area card, select the pencil icon.
+2. In the dialog, adjust the area details you want to change:
+ - Edit the area **Name**.
+ - Add an icon (We use [Material icons](https://pictogrammers.com/library/mdi/)).
+ - Assign the area to a floor.
+ - If you have not created floors yet, you can [create a new one](/docs/organizing/floors/#creating-a-floor).
+ - The number can be negative. For example for underground floors.
+ - This number can later be used for sorting.
+ - Add an image representing that area.
+ - Add an **Alias**.
+ - Aliases are alternative names used in [voice assistants](/voice_control/aliases/) to refer to an area, entity, or floor.
+
+## Deleting an area
+
+Follow these steps to delete an area. It will be removed from all the floors it was assigned to. All the devices that were assigned to this area will become unassigned.
+If you used this area in automations or script as targets, or with voice assistant, these will no longer work.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select the area card.
+2. In the top right corner, select the three dot menu. Then, select **Delete**.
+
+ ![Delete area](/images/organizing/area_delete.png)
+
+3. If you used this area in automations or script as targets, or with voice assistant, they will no longer work.
+ - You can adjust or delete the related scripts or automations.
+4. If you still had devices in that area, they are no longer assigned to any room.
+ - If you have moved the devices, you can now reassign them to a new area.
diff --git a/source/_docs/organizing/categories.markdown b/source/_docs/organizing/categories.markdown
new file mode 100644
index 000000000000..261332fbc02c
--- /dev/null
+++ b/source/_docs/organizing/categories.markdown
@@ -0,0 +1,56 @@
+---
+title: "Categories"
+description: "Use categories to group and filter your table items"
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /docs/organizing/labels/
+ title: Labels
+---
+
+Categories let you group and filter items in a table. Like labels, categories allow grouping irrespective of the items physical location. For example, on the automations page, you can create the categories “Notifications” or “NFC tags” to view your automations grouped or filtered. These categories group automations on the automation page, but have no effect anywhere else. Categories are unique for each table. The automations page can have different categories than the scene, scripts, or helpers settings page.
+
+## Creating a category
+
+Follow these steps to create a new category.
+
+1. Go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+2. In the top left, select the **Filters** button.
+
+ ![Select the filter button](/images/organizing/filters_01.png)
+3. Select **Category**, then **Add category**.
+4. Enter a name, select an icon and select **Add**.
+
+ **Result**: A new category is created.
+
+## Assigning a category
+
+1. Go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+2. To assign a category to a single item:
+ - Find the item in the list and select the three dots menu.
+ - Select **Assign category** and select the category from the list.
+ - If the category is not in the list, select **Add new category** and make a new one.
+3. To assign a category to multiple items:
+ - Select the button.
+ - From the list, select all the items to which you want to apply a category.
+ - In the top right corner, select **Move to category**.
+ - Then, select the category from the list.
+4. Once categories are applied, the table items are grouped by those categories.
+ - The example shows 2 categories: Coffee and housekeeping.
+
+ ![Group table items by category](/images/organizing/category_02.png)
+
+## Editing or deleting a category
+
+To rename or delete a category, follow these steps:
+
+1. Go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+2. In the top left, select the **Filters** button.
+
+ ![Select the filter button](/images/organizing/filters_01.png)
+3. In the list, find the category you want to edit and select the three dot menu next to it.
+4. Select **Edit category** or **Delete category**.
+
+ ![Screenshot showing the edit and delete buttons for categories](/images/organizing/edit-delete-category.png)
diff --git a/source/_docs/organizing/filtering.markdown b/source/_docs/organizing/filtering.markdown
new file mode 100644
index 000000000000..d8fa65532d75
--- /dev/null
+++ b/source/_docs/organizing/filtering.markdown
@@ -0,0 +1,62 @@
+---
+title: "Filtering your assets"
+description: "Filter for items in tables."
+related:
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /docs/organizing/labels/
+ title: Labels
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/categories/
+ title: Categories
+ - docs: /docs/organizing/
+ title: Grouping your assets
+ - docs: /common-tasks/general/
+ title: Enabling or disabling entities and automations
+---
+
+When working with tables, you can select multiple items to apply an action. If you have [grouped](/docs/organizing/) items by assigning them to floors, areas, labels, or directories, you can also filter your data accordingly.
+
+## Selecting multiple items in a table
+
+1. In your table, select the button.
+
+ ![Screenshots point out the enable selection mode button in the toolbar of the tables in Home Assistant](/images/blog/2024-04/enable-selection-mode.png)
+
+2. In the list, select the items of interest.
+
+ ![Selecting multiple elements in a list](/images/organizing/multiselect_01.png)
+
+3. You can now apply changes to all selected elements, such as [applying labels](/docs/organzing/labels/) or [enabling or disabling entities and automations](/common-tasks/general/).
+
+## Filtering items in a table
+
+You can filter a table so that only items matching certain criteria are shown.
+
+1. In the top left corner above the table, select the **Filters** button.
+
+ ![Select the filter button](/images/organizing/filters_01.png)
+
+2. In the filters panel, select your filter criteria.
+ - You can filter for [floors](/docs/organizing/floors/), [areas](/docs/organizing/areas/), [labels](/docs/organizing/labels/), and [categories](/docs/organizing/categories/) if you have previously defined them.
+ - The list of available criteria depends on the type of table.
+
+ ![Screenshots showing the filter panel that tables can have, allowing you to easily find what you are looking for](/images/organizing/filter-panel.png)
+
+## Grouping and sorting items in a table
+
+You can group items in a table according to certain criteria. The number of shown items stays the same. No items will be hidden.
+
+1. In the top right above the table, select the **Group by** button.
+2. The items will be grouped according to the criteria you chose.
+ - The list of available criteria depends on the type of table.
+ - The example shows a list of devices, grouped by manufacturer.
+ - In contrast, the entities table does not allow grouping by manufacturer, but by entity domains.
+
+ ![Select the Group by button](/images/organizing/table_group_01.png)
+
+3. To sort the items, select the **Sort by** button.
+4. To get a better overview, you can collapse groups in the list.
+
+ ![Collapse groups](/images/organizing/table_group_collapse.png)
\ No newline at end of file
diff --git a/source/_docs/organizing/floors.markdown b/source/_docs/organizing/floors.markdown
new file mode 100644
index 000000000000..3a39c03ec91e
--- /dev/null
+++ b/source/_docs/organizing/floors.markdown
@@ -0,0 +1,50 @@
+---
+title: "Floors"
+description: "Group your areas per floor"
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/
+ - docs: /docs/organizing/labels/
+ title: Labels
+ - docs: /docs/configuration/templating/#floors
+ title: Using floors in templates
+ - docs: /voice_control/aliases/
+ title: Using floor alias for voice assistants
+---
+
+A floor in Home Assistant is a logical grouping of areas meant to match your home's physical floors. Devices and entities
+cannot be assigned to floors directly but to areas. Floors can be used in automations and scripts as a target for actions. For example, to turn off all the lights on the downstairs floor when you go to bed.
+
+## Creating a floor
+
+Follow these steps to create a new floor.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select **Create floor**.
+2. In the dialog, enter the floor details:
+ - Give the floor a **Name** (required).
+ - Add a floor **Level**.
+ - The number can be negative. For example for underground floors.
+ - This number can later be used for sorting.
+ - Add an icon (We use [Material icons](https://pictogrammers.com/library/mdi/)).
+ - Add an **Alias**.
+ - Aliases are alternative names used in [voice assistants](/voice_control/aliases/) to refer to an entity, area, or floor.
+
+ ![Create floor dialog](/images/organizing/create_floor_01.png)
+3. Select **Add**.
+
+ **Result**: A new floor is created.
+
+ ![Create floor dialog](/images/organizing/create_floor_02.png)
+4. You can now [assign areas to that floor](/docs/organizing/areas/#assigning-areas-to-floors-and-add-labels).
+
+## Deleting a floor
+
+Follow these steps to delete a floor. Areas that are assigned to a floor will become unassigned. Automations and scripts or voice assistants that used a floor as a target will no longer work as they no longer have a target.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %}.
+2. Next to the floor, select the three dots menu and select **Delete floor**.
+
+ ![Screenshot showing the dialog to delete a floor](/images/organizing/floor_delete.png)
+
+3. If you have automations, scripts, or voice assistants that used floors as a target, you will need to update these.
diff --git a/source/_docs/organizing/labels.markdown b/source/_docs/organizing/labels.markdown
new file mode 100644
index 000000000000..0e95e8dc515b
--- /dev/null
+++ b/source/_docs/organizing/labels.markdown
@@ -0,0 +1,73 @@
+---
+title: "Labels"
+description: "Label your areas, devices, entities, automations, scripts, and helpers. Then, filter by label or run an automation on all entities with that label."
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /docs/organizing/categories/
+ title: Categories
+ - docs: /docs/configuration/templating/#labels
+ title: Using labels in templates
+---
+
+Labels in Home Assistant allow grouping elements irrespective of their physical location or type. Labels can be assigned to areas, devices, entities, automations, scenes, scripts, and helpers. Labels can be used in automations and scripts as a target for actions and services. Labels can also be used to filter data. For example, you can filter the list of devices to show only devices with the label `heavy energy usage` or turn these devices off when there is not a lot of solar energy available.
+
+## Creating a label
+
+Follow these steps to create a new label from the **Labels** view.
+
+1. Go to {% my labels title="**Settings** > **Areas, labels & zones**" %} and on top, select the **Labels** tab.
+2. Select the **Create label** button.
+3. In the dialog, enter the label details:
+ - Give the label a **Name** (required).
+ - Add an icon (We use [Material icons](https://pictogrammers.com/library/mdi/)).
+ - Add a **Color**.
+
+ ![Create label dialog](/images/organizing/create_label_01.png)
+4. Select **Create**.
+
+ **Result**: A new label is created.
+
+## Applying labels
+
+Follow these steps to apply a label
+
+1. To apply a label to an area:
+ - Go to {% my areas title="**Settings** > **Areas, labels & zones**" %}.
+ - On the area card, select the pencil icon.
+ - Select one or more labels or select **Add new label** to create a new one.
+2. To apply a label to a device, entity, or helper:
+ - Go to **{% my integrations title="Settings > Devices & Services" %}** and open the respective tab.
+ - Select the button.
+ - From the list, select all the list entries to which you want to apply a label.
+ - In the top right corner, select **Add label**. Then, select the labels from the list.
+
+ ![Apply label](/images/organizing/labels_add_05.png)
+3. To apply a label to an automation, scene, or script:
+ - Go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+ - Select the button.
+ - From the list, select all the list entries to which you want to apply a label.
+ - In the top right corner, select the three dots menu, then select **Add label**. Then, select the labels from the list.
+
+## Deleting a label
+
+Follow these steps to delete a label. It will be removed from all the list entries it was applied to.
+If you used this label in automations or script as targets, you need to adjust those.
+
+1. Go to {% my labels title="**Settings** > **Areas, labels & zones**" %} and on top, select the **Labels** tab.
+2. In the list of labels, find the label you want to delete and select the three dots menu.
+3. Select **Delete**.
+4. If you used this label in automations or script as targets, you need to adjust those.
+
+## Removing labels
+
+1. Go to the data table that contains the element from which you want to remove the label:
+ - Go to **{% my integrations title="Settings > Devices & Services" %}** and open the respective tab.
+ - Or, go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+2. Select the button.
+ - From the list, select all the items from which you want to remove a label.
+ - In the top right corner, select the three dots menu, then select **Add label**.
+ - Then, deselect the checkbox for the label you want to remove.
+
diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown
index a8988e68b8f2..f7b5ee49517a 100644
--- a/source/_docs/scripts.markdown
+++ b/source/_docs/scripts.markdown
@@ -7,11 +7,13 @@ no_toc: true
Scripts are a sequence of {% term actions %} that Home Assistant will execute. Scripts are available as an entity through the standalone [Script integration] but can also be embedded in {% term automations %} and [Alexa/Amazon Echo] configurations.
-When the script is executed within an automation the `trigger` variable is available. See [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data).
+When the script is executed within an {% term automation %}, the `trigger` variable is available. See [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data).
-The script syntax basic structure is a list of key/value maps that contain actions. If a script contains only 1 action, the wrapping list can be omitted.
+## Script syntax
-All actions support an optional `alias`.
+The script syntax basic structure is a list of key/value maps that contain {% term actions %}. If a script contains only 1 {% term action %}, the wrapping list can be omitted.
+
+All {% term actions %} support an optional `alias`.
```yaml
# Example script integration containing script syntax
@@ -31,9 +33,9 @@ script:
{{ page.content | markdownify | toc_only }}
-## Call a Service
+## Call a service
-The most important one is the action to call a service. This can be done in various ways. For all the different possibilities, have a look at the [service calls page].
+The most important one is the action to call a {% term service %}. This can be done in various ways. For all the different possibilities, have a look at the [service calls page].
```yaml
- alias: "Bedroom lights on"
@@ -44,9 +46,9 @@ The most important one is the action to call a service. This can be done in vari
brightness: 100
```
-### Activate a Scene
+### Activate a scene
-Scripts may also use a shortcut syntax for activating scenes instead of calling the `scene.turn_on` service.
+Scripts may also use a shortcut syntax for activating {% term scenes %} instead of calling the `scene.turn_on` service.
```yaml
- scene: scene.morning_living_room
@@ -54,7 +56,7 @@ Scripts may also use a shortcut syntax for activating scenes instead of calling
## Variables
-The variables action allows you to set/override variables that will be accessible by templates in actions after it. See also [script variables] for how to define variables accessible in the entire script.
+The variables {% term action %} allows you to set/override variables that will be accessible by templates in {% term action %} after it. See also [script variables] for how to define variables accessible in the entire script.
{% raw %}
@@ -91,11 +93,11 @@ Variables can be templated.
{% endraw %}
-### Scope of Variables
+### Scope of variables
Variables have local scope. This means that if a variable is changed in a nested sequence block, that change will not be visible in an outer sequence block.
-Inside the `if` sequence the `variables` action will only alter the `people` variable for that sequence.
+Inside the `if` sequence the `variables` {% term action %} will only alter the `people` variable for that sequence.
{% raw %}
@@ -125,13 +127,13 @@ sequence:
{% endraw %}
-## Test a Condition
+## Test a condition
-While executing a script you can add a condition in the main sequence to stop further execution. When a condition does not return `true`, the script will stop executing. There are many different conditions which are documented at the [conditions page].
+While executing a script you can add a condition in the main sequence to stop further execution. When a condition does not return `true`, the script will stop executing. For documentation on the many different conditions refer to the [conditions page].
-The `condition` action only stops executing the current sequence block. When it is used inside a [repeat](#repeat-a-group-of-actions) action, only the current iteration of the `repeat` loop will stop. When it is used inside a [choose](#choose-a-group-of-actions) action, only the actions within that `choose` will stop.
+The `condition` {% term action %} only stops executing the current sequence block. When it is used inside a [repeat](#repeat-a-group-of-actions) action, only the current iteration of the `repeat` loop will stop. When it is used inside a [choose](#choose-a-group-of-actions) action, only the {% term actions %} within that `choose` will stop.
@@ -204,11 +206,11 @@ All forms accept templates.
## Wait
-These actions allow a script to wait for entities in the system to be in a certain state as specified by a template, or some event to happen as expressed by one or more triggers.
+These {% term actions %} allow a script to wait for entities in the system to be in a certain state as specified by a template, or some event to happen as expressed by one or more triggers.
### Wait for a template
-This action evaluates the template, and if true, the script will continue. If not, then it will wait until it is true.
+This {% term action %} evaluates the template, and if true, the script will continue. If not, then it will wait until it is true.
The template is re-evaluated whenever an entity ID that it references changes state. If you use non-deterministic functions like `now()` in the template it will not be continuously re-evaluated, but only when an entity ID that is referenced is changed. If you need to periodically re-evaluate the template, reference a sensor from the [Time and Date](/integrations/time_date/) integration that will update minutely or daily.
@@ -224,7 +226,7 @@ The template is re-evaluated whenever an entity ID that it references changes st
### Wait for a trigger
-This action can use the same triggers that are available in an automation's `trigger` section. See [Automation Trigger](/docs/automation/trigger). The script will continue whenever any of the triggers fires. All previously defined [trigger variables](/docs/automation/trigger#trigger-variables), [variables](#variables) and [script variables] are passed to the trigger.
+This {% term action %} can use the same triggers that are available in an automation's `trigger` section. See [Automation Trigger](/docs/automation/trigger). The script will continue whenever any of the triggers fires. All previously defined [trigger variables](/docs/automation/trigger#trigger-variables), [variables](#variables) and [script variables] are passed to the trigger.
{% raw %}
```yaml
@@ -324,9 +326,9 @@ This can be used to take different actions based on whether or not the condition
```
{% endraw %}
-## Fire an Event
+## Fire an event
-This action allows you to fire an event. Events can be used for many things. It could trigger an automation or indicate to another integration that something is happening. For instance, in the below example it is used to create an entry in the logbook.
+This {% term action %} allows you to fire an event. Events can be used for many things. It could trigger an {% term automation %} or indicate to another integration that something is happening. For instance, in the below example it is used to create an entry in the logbook.
```yaml
- alias: "Fire LOGBOOK_ENTRY event"
@@ -356,7 +358,7 @@ The `event_data` accepts templates.
### Raise and Consume Custom Events
-The following automation example shows how to raise a custom event called `event_light_state_changed` with `entity_id` as the event data. The action part could be inside a script or an automation.
+The following {% term automation %} example shows how to raise a custom event called `event_light_state_changed` with `entity_id` as the event data. The {% term action %} part could be inside a script or an {% term automation %}.
```yaml
- alias: "Fire Event"
@@ -370,7 +372,7 @@ The following automation example shows how to raise a custom event called `event
state: "on"
```
-The following automation example shows how to capture the custom event `event_light_state_changed` with an [Event Automation Trigger](/docs/automation/trigger#event-trigger), and retrieve corresponding `entity_id` that was passed as the event trigger data, see [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data) for more details.
+The following {% term automation %} example shows how to capture the custom event `event_light_state_changed` with an [Event Automation Trigger](/docs/automation/trigger#event-trigger), and retrieve corresponding `entity_id` that was passed as the event trigger data, see [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data) for more details.
{% raw %}
@@ -389,7 +391,7 @@ The following automation example shows how to capture the custom event `event_li
## Repeat a group of actions
-This action allows you to repeat a sequence of other actions. Nesting is fully supported.
+This {% term action %} allows you to repeat a sequence of other {% term actions %}. Nesting is fully supported.
There are three ways to control how many times the sequence will be run.
### Counted repeat
@@ -566,7 +568,7 @@ For example:
### Repeat loop variable
-A variable named `repeat` is defined within the repeat action (i.e., it is available inside `sequence`, `while` & `until`.)
+A variable named `repeat` is defined within the repeat {% term action %} (i.e., it is available inside `sequence`, `while` & `until`.)
It contains the following fields:
field | description
@@ -577,7 +579,7 @@ field | description
## If-then
-This action allow you to conditionally (`if`) run a sequence of actions (`then`)
+This {% term action %} allow you to conditionally (`if`) run a sequence of actions (`then`)
and optionally supports running other sequence when the condition didn't
pass (`else`).
@@ -600,13 +602,13 @@ script:
message: "Skipped cleaning, someone is home!"
```
-This action supports nesting, however, if you find yourself using nested if-then
+This {% term action %} supports nesting, however, if you find yourself using nested if-then
actions in the `else` part, you may want to consider using
[choose](#choose-a-group-of-actions) instead.
-## Choose a Group of Actions
+## Choose a group of actions
-This action allows you to select a sequence of other actions from a list of sequences.
+This {% term action %} allows you to select a sequence of other {% term actions %} from a list of sequences.
Nesting is fully supported.
Each sequence is paired with a list of conditions. (See the [conditions page] for available options and how multiple conditions are handled.) The first sequence whose conditions are all true will be run.
@@ -614,7 +616,7 @@ An _optional_ `default` sequence can be included which will be run only if none
An _optional_ `alias` can be added to each of the sequences, excluding the `default` sequence.
-The `choose` action can be used like an "if/then/elseif/then.../else" statement. The first `conditions`/`sequence` pair is like the "if/then", and can be used just by itself. Or additional pairs can be added, each of which is like an "elif/then". And lastly, a `default` can be added, which would be like the "else."
+The `choose` {% term action %} can be used like an "if/then/elseif/then.../else" statement. The first `conditions`/`sequence` pair is like the "if/then", and can be used just by itself. Or additional pairs can be added, each of which is like an "elif/then". And lastly, a `default` can be added, which would be like the "else."
{% raw %}
@@ -696,7 +698,7 @@ automation:
More `choose` can be used together. This is the case of an IF-IF.
-The following example shows how a single automation can control entities that aren't related to each other but have in common the same trigger.
+The following example shows how a single {% term automation %} can control entities that aren't related to each other but have in common the same trigger.
When the sun goes below the horizon, the `porch` and `garden` lights must turn on. If someone is watching the TV in the living room, there is a high chance that someone is in that room, therefore the living room lights have to turn on too. The same concept applies to the `studio` room.
@@ -753,13 +755,13 @@ automation:
## Parallelizing actions
-By default, all sequences of actions in Home Assistant run sequentially. This
-means the next action is started after the current action has been completed.
+By default, all sequences of {% term actions %} in Home Assistant run sequentially. This
+means the next {% term action %} is started after the current action has been completed.
This is not always needed, for example, if the sequence of actions doesn't rely
on each other and order doesn't matter. For those cases, the `parallel` action
-can be used to run the actions in the sequence in parallel, meaning all
-the actions are started at the same time.
+can be used to run the {% term actions %} in the sequence in parallel, meaning all
+the {% term actions %} are started at the same time.
The following example shows sending messages out at the same time (in parallel):
@@ -802,32 +804,32 @@ script:
-Running actions in parallel can be helpful in many cases, but use it with
+Running {% term actions %} in parallel can be helpful in many cases, but use it with
caution and only if you need it.
There are some caveats (see below) when using parallel actions.
While it sounds attractive to parallelize, most of the time, just the regular
-sequential actions will work just fine.
+sequential {% term actions %} will work just fine.
-Some of the caveats of running actions in parallel:
+Some of the caveats of running {% term actions %} in parallel:
-- There is no order guarantee. The actions will be started in parallel, but
+- There is no order guarantee. The {% term actions %} will be started in parallel, but
there is no guarantee that they will be completed in the same order.
-- If one action fails or errors, the other actions will keep running until
+- If one {% term action %} fails or errors, the other {% term actions %} will keep running until
they too have finished or errored.
-- Variables created/modified in one parallelized action are not available
- in another parallelized action. Each step in a parallelized has its own scope.
+- Variables created/modified in one parallelized {% term action %} are not available
+ in another parallelized {% term action %}. Each step in a parallelized has its own scope.
## Stopping a script sequence
It is possible to halt a script sequence at any point and return script responses
-using the `stop` action.
+using the `stop` {% term action %}.
-The `stop` action takes a text as input explaining the reason for halting the
-sequence. This text will be logged and shows up in the automations and
+The `stop` {% term action %} takes a text as input explaining the reason for halting the
+sequence. This text will be logged and shows up in the {% term automations %} and
script traces.
`stop` can be useful to halt a script halfway through a sequence when,
@@ -847,7 +849,7 @@ response data must contains a mapping of key/value pairs.
```
There is also an `error` option, to indicate we are stopping because of
-an unexpected error. It stops the sequence as well, but marks the automation
+an unexpected error. It stops the sequence as well, but marks the {% term automation %}
or script as failed to run.
```yaml
@@ -857,20 +859,20 @@ or script as failed to run.
## Continuing on error
-By default, a sequence of actions will be halted when one of the actions in
-that sequence encounters an error. The automation or script will be halted,
-an error is logged, and the automation or script run is marked as errored.
+By default, a sequence of {% term actions %} will be halted when one of the {% term actions %} in
+that sequence encounters an error. The {% term automation %} or script will be halted,
+an error is logged, and the {% term automation %} or script run is marked as errored.
Sometimes these errors are expected, for example, because you know the service
you call can be problematic at times, and it doesn't matter if it fails.
-You can set `continue_on_error` for those cases on such an action.
+You can set `continue_on_error` for those cases on such an {% term action %}.
-The `continue_on_error` is available on all actions and is set to
-`false`. You can set it to `true` if you'd like to continue the action
-sequence, regardless of whether that action encounters an error.
+The `continue_on_error` is available on all {% term actions %} and is set to
+`false`. You can set it to `true` if you'd like to continue the {% term action %}
+sequence, regardless of whether that {% term action %} encounters an error.
-The example below shows the `continue_on_error` set on the first action. If
-it encounters an error; it will continue to the next action.
+The example below shows the `continue_on_error` set on the first {% term action %}. If
+it encounters an error; it will continue to the next {% term action %}.
```yaml
- alias: "If this one fails..."
@@ -891,8 +893,8 @@ or errors that Home Assistant does not handle.
## Disabling an action
-Every individual action in a sequence can be disabled, without removing it.
-To do so, add `enabled: false` to the action. For example:
+Every individual {% term action %} in a sequence can be disabled, without removing it.
+To do so, add `enabled: false` to the {% term action %}. For example:
```yaml
# Example script with a disabled action
@@ -914,6 +916,36 @@ script:
entity_id: light.ceiling
```
+## Respond to a conversation
+
+The `set_conversation_response` script {% term action %} allows returning a custom response
+when an {% term automation %} is triggered by a conversation engine, for example a voice
+assistant. The conversation response can be templated.
+
+{% raw %}
+
+```yaml
+# Example of a templated conversation response resulting in "Testing 123"
+- variables:
+ my_var: "123"
+- set_conversation_response: "{{ 'Testing ' + my_var }}":
+```
+
+{% endraw %}
+
+The response is handed to the conversation engine when the {% term automation %} finishes. If
+the `set_conversation_response` is executed multiple times, the most recent
+response will be handed to the conversation engine. To clear the response, set it
+to `None`:
+
+```yaml
+# Example of a clearing a conversation response
+set_conversation_response: ~
+```
+
+If the {% term automation %} was not triggered by a conversation engine, the response
+will not be used by anything.
+
[Script integration]: /integrations/script/
[automations]: /docs/automation/action/
[Alexa/Amazon Echo]: /integrations/alexa/
diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown
index 71529b270f58..2860510c95a3 100644
--- a/source/_docs/scripts/conditions.markdown
+++ b/source/_docs/scripts/conditions.markdown
@@ -218,8 +218,8 @@ condition:
below: 25
```
-Number helpers (`input_number` entities), `number` and `sensor` entities that
-contain a numeric value, can be used in the `above` and `below`
+Number helpers (`input_number` entities), `number`, `sensor`, and `zone` entities
+that contain a numeric value, can be used in the `above` and `below`
options to make the condition more dynamic.
```yaml
diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown
index d153233b4ca3..ccd734c536cf 100644
--- a/source/_docs/scripts/service-calls.markdown
+++ b/source/_docs/scripts/service-calls.markdown
@@ -28,7 +28,7 @@ Instead of targeting an entity, you can also target an {% term area %} or {% ter
This is done with the `target` key.
A `target` is a map that contains at least one of the following: `area_id`, `device_id`, `entity_id`.
-Each of these can be a list.
+Each of these can be a list. The values should be lower-cased.
The following example uses a single service call to turn on the lights in the
living room area, 2 additional light devices and 2 additional light entities:
@@ -80,7 +80,7 @@ entity_id: switch.ac
### Using the Services Developer Tool
You can use the Services Developer Tool to test data to pass in a service call.
-For example, you may test turning on or off a 'group' (See [groups] for more info)
+For example, you may test turning on or off a 'group' (See [groups](/integrations/group/) for more info)
To turn a group on or off, pass the following info:
@@ -133,13 +133,12 @@ Examples of service response data are upcoming calendar events for the next week
Templates can also be used for handling response data. The service call can specify
a `response_variable`. This is the [variable](/docs/scripts/#variables)
-that contains the response data. You can define any name for your `response_variable`. This example calls a service and stores the response in
-the variable called `agenda`.
+that contains the response data. You can define any name for your `response_variable`. This example calls a service and stores the response in the variable called `agenda`.
{% raw %}
```yaml
-service: calendar.list_events
+service: calendar.get_events
target:
entity_id: calendar.school
data:
@@ -168,7 +167,7 @@ data:
message: >-
Your agenda for today:
- {% for event in agenda.events %}
+ {% for event in agenda['calendar.school'].events %}
{{ event.start}}: {{ event.summary }}
{% endfor %}
diff --git a/source/_docs/tools/check_config.markdown b/source/_docs/tools/check_config.markdown
index 245922939132..4a805d672cd0 100644
--- a/source/_docs/tools/check_config.markdown
+++ b/source/_docs/tools/check_config.markdown
@@ -1,9 +1,12 @@
---
title: "check_config"
description: "Script to perform a check of the current configuration"
+related:
+ - docs: /docs/configuration/#validating-the-configuration
+ title: Validating the configuration
---
-Test any changes to your `configuration.yaml` file before launching Home Assistant. This {% term script %} allows you to test changes without the need to restart Home Assistant.
+Test any changes to your `configuration.yaml` file before launching Home Assistant. This script allows you to test changes without the need to restart Home Assistant.
```bash
hass --script check_config
diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown
index 627fac764f47..f33111825d3e 100644
--- a/source/_docs/tools/dev-tools.markdown
+++ b/source/_docs/tools/dev-tools.markdown
@@ -10,8 +10,8 @@ The dashboard contains a section called **Developer tools**.
Screenshot of Home Assistant's developer tools.
-| Section |Description |
-| ---------- |---------------------------------------------------------------------|
+| Section | Description |
+| ---------- | ------------------------------------------------------------------- |
| YAML | Lets you validate the configuration and trigger a reload or restart |
| States | Sets the representation of an entity |
| Services | Calls services from integrations |
@@ -24,7 +24,27 @@ Screenshot of Home Assistant's developer tools.
The Developer Tools is meant for **all** (not just for the developers) to quickly try out things - like calling services, updating states, raising events, and publishing messages in MQTT). It is also a necessary tool for those who write custom automations and scripts by hand. The following describes each of the sections in detail.
-## States
+## YAML tab
+
+The YAML tab provides buttons to trigger a check of configuration files and to reload the configuration. Reloading is needed to apply changes that you've made to the configuration.
+
+It is almost the same as the option under **Settings** > three dot menu (top right) > **Restart Home Assistant** > **Quick reload**. The only difference is that **Quick reload** reloads all the configuration, whereas this YAML tab allows you to only reload one specific configuration at a time.
+
+### Reloading the YAML configuration
+
+For configuration changes to become effective, the configuration must be reloaded. Most integrations in Home Assistant (that do not interact with {% term devices %} or {% term services %}) can reload changes made to their configuration in `configuration.yaml` without needing to restart Home Assistant.
+
+1. Go to {% my server_controls title="**Developer Tools** > **YAML**" %} and scroll down to the YAML configuration reloading section (alternatively, hit ["c"](/docs/tools/quick-bar/) anywhere in the UI and search for "reload").
+ - You are presented with a list of integrations, such as **Automations** or **Conversation**.
+
+ ![Reload configuration changes](/images/docs/configuration/reloading_config.png)
+
+2. Depending on what you find in the list, you can proceed with either reloading or you need to restart Home Assistant:
+ - If the integration is listed, select it to reload the settings.
+ - For example, if you've changed the [General settings](/docs/configuration/basic/), you can select **Location & customizations** to apply those changes.
+ - If the integration is not listed, you need to **Restart** Home Assistant for changes to take effect.
+
+## States tab
This section shows all the available entities, their corresponding state and the attribute values. The state and the attribute information is what Home Assistant sees at run time. To update the entity with a new state, or a new attribute value, click on the entity, scroll to the top, and modify the values, and click on “SET STATE” button.
@@ -35,7 +55,7 @@ For example, changing the `light.bedroom` state from `off` to `on` does not turn
The table containing all entities can be filtered for each column. The used search is a wildcard search meaning that if you input "office" in the entity column filter, every entity whose ID matches "\*office\*" will be shown. You can also add your own wildcards in the search input (e.g., "office\*light").
The attribute filter supports separate filters for attribute names and values, separated by a colon ":". So the filter "location:3" will result in the table showing all entities that have an attribute name that contains "location" and whose attribute value contains "3".
-## Services
+## Services tab
This section is used to call Services that are available in the ServiceRegistry.
@@ -48,6 +68,7 @@ A Service may also require additional input to be passed. It is commonly referre
When an entity is selected from the Entity dropdown, it automatically populates service data with the corresponding `entity_id`. The service data YAML can then be modified to pass additional \[optional\] parameters. The following is an illustration on how to call a `light.turn_on` service.
To turn on a light bulb, use the following steps:
+
1. Select `light.turn_on` from the Service dropdown
2. Select the entity (typically the light bulb) from the Entity dropdown (if no entity_id is selected, it turns on ALL lights)
3. If an entity is selected, the service data is populated with basic YAML that will be passed to the service. Additional data can also be passed by updating the YAML as below.
@@ -58,7 +79,7 @@ brightness: 255
rgb_color: [255, 0, 0]
```
-## Template editor
+## Template editor tab
The template editor provides a way to quickly test templates prior to placing them into automations and scripts. A code editor is on the left side and your real-time output is displayed in the preview on the right side.
@@ -66,7 +87,7 @@ By default, this will contain sample code that illustrates how templates can be
For more information about Jinja2, visit [Jinja2 documentation](https://jinja.palletsprojects.com/en/latest/templates/), and also read templating document [here](/docs/configuration/templating).
-## Events
+## Events tab
In the Events section, you can either fire an event on the event bus or subscribe to an event type in order to view the event data JSON.
@@ -118,7 +139,7 @@ Event 0 fired 9:53 AM:
}
```
-## Statistics
+## Statistics tab
The **Statistics** tab shows a list of long-term statistic entities. If the long term statistics is not working for an entity, a **Fix Issue** link is shown. Select it to view a description of the issue. There might also be an option to fix the issue.
@@ -130,15 +151,16 @@ icon. Use date & time to search for the incorrect data point and adjust the valu
![Screenshot showing adjusting the long-term statistic history value](/images/blog/2022-04/adjust-statistics.png)
-## Assist
+## Assist tab
The **Assist** tab lets you see how Home Assistant's Assist processes a sentence.
If no matching intent is found, then Assist is unable to interpret the sentence. If a matching intent was found, information is provided on the action that will be performed on which entities. The example below shows how the following sentence was parsed: *what lights are on in the office*.
+
- Assist found a matching intent: *HassGetState*.
- It found entities matching the domain: *lights*.
- The lights have the state *on*.
-- The lights are in the area *office*.
+- The lights are in the area *office*.
- The targets are the narrowed-down entities in scope.
![Example use of assist developer tools](/images/docs/developer-tools/Assist.png)
diff --git a/source/_docs/troubleshooting_general.markdown b/source/_docs/troubleshooting_general.markdown
new file mode 100644
index 000000000000..9180465edbd0
--- /dev/null
+++ b/source/_docs/troubleshooting_general.markdown
@@ -0,0 +1,44 @@
+---
+title: "General troubleshooting"
+description: "General troubleshooting information"
+related:
+ - docs: /docs/configuration/#editing-configurationyaml
+ title: Editing your configuration
+ - docs: /integrations/recovery_mode/
+ title: Recovery mode integration
+ - docs: /docs/locked_out/
+ title: Resetting your password
+---
+
+This page provides some information about more generic troubleshooting topics.
+
+## Home Assistant went into recovery mode
+
+### Symptom: Home Assistant is in recovery mode
+
+On top of the page you see a red banner. On the **Overview** page, you see a **Recovery mode** notification.
+
+![image](/images/docs/troubleshooting/recovery_mode_active.png)
+
+### Description
+
+When Home Assistant is in recovery mode, there was an issue with the configuration.
+
+Recovery mode loads a minimum set of integrations to allow troubleshooting the configuration. Recovery mode will use the parts of the configuration that was used the last time Home Assistant started successfully. You can still see the user interface, the settings, and add-ons.
+
+### Resolution
+
+You need to identify the issue in the configuration files and fix it there. The issue could be caused by something as simple as an invalid YAML file.
+
+- If you are running {% term "Home Assistant Operating System" %}, you can install an add-on such as VS code to edit the configuration file if needed.
+- If you are still logged in, you can [edit your configuration](/docs/configuration/#editing-configurationyaml).
+ - In the Home Assistant user interface, open the add-on you usually use and edit the configuration file.
+- Restart Home Assistant.
+- If you are locked out because you forgot your password, you cannot edit the configuration file from the user interface. Follow the steps to [reset your password](/docs/locked_out/).
+
+## Restarting Home Assistant in safe mode
+
+If your Home Assistant is acting up and you cannot identify a root cause, you can use **Safe mode** to narrow down the number of possible causes.
+Safe mode loads Home Assistant Core, but no custom integrations, no custom cards, and no custom themes. If the issue does not persist in Safe mode, the issue is not with Home Assistant Core. Before reporting an issue, check if the issue persists in Safe mode.
+
+To enable Safe mode, go to **Settings** > **System** > **Restart Home Assistant** (top right) > **Restart Home Assistant in safe mode**.
diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown
index 14b849223f52..b5f007108087 100644
--- a/source/_docs/z-wave/controllers.markdown
+++ b/source/_docs/z-wave/controllers.markdown
@@ -66,12 +66,7 @@ The alternative to a stick is a hub that supports Z-Wave. Home Assistant support
### 800 Series Controllers
-Z-Wave JS and Z-Wave JS UI do not support the following features available on most 800 series controllers.
-
-Unsupported:
-
- - Long Range
- - NVM Backup/Restore
+Z-Wave JS does not support Z-Wave Long Range yet.
### Aeotec Z-Stick
@@ -85,9 +80,20 @@ It's totally normal for your Z-Wave stick to cycle through its LEDs (Yellow, Blu
### Razberry Board
-You need to disable the on-board Bluetooth since the board requires the use of the hardware UART (and there's only one on the Pi3). You do this by adding the following to the end of `/boot/config.txt`:
+On Raspberry Pi 3 and 4, you need to disable the on-board Bluetooth since the board requires the use of the hardware UART (whose pins are shared with the Bluetooth). You do this by adjusting the `/boot/config.txt`.
+
+For both processes below you will need to insert your SD card into your PC and open the configuration file with your favorite text editor.
+
+- If you are using {% term "Home Assistant Operating System" %}, once you mounted the disk, you will see the `config.txt` directly in the root directory.
+- If you are using {% term "Home Assistant Supervised" %}, the config file is stored in the boot folder: `/boot/config.txt`.
-For both processes below you will need to insert your SD card into your PC and open the `/boot/config.txt` file with your favorite text editor.
+#### Raspberry Pi 5 procedure
+
+Add the following parameters to the bottom of the `config.txt` file.
+
+```text
+dtoverlay=uart0
+```
#### Raspberry Pi 4 procedure
diff --git a/source/_includes/asides/categories.html b/source/_includes/asides/categories.html
index f7dda7399480..639ce3fc038d 100644
--- a/source/_includes/asides/categories.html
+++ b/source/_includes/asides/categories.html
@@ -4,7 +4,7 @@
Categories
{% assign categories = site.categories | sort %}
{% for category in categories %}
{% assign category_name = category | first | downcase %}
- {% if category_name != "core" %}
+ {% if category_name != "core"%}
- {% active_link /docs/frontend/browsers/ Browser compatibility list %}
-
-
{% active_link /dashboards Dashboards %}
-
{% active_link /docs/frontend/icons/ Icons%}
-
-
{% active_link /docs/backend/ Backend %}
@@ -182,4 +187,4 @@
Topics
-
+
\ No newline at end of file
diff --git a/source/_includes/asides/getting_started_navigation.html b/source/_includes/asides/getting_started_navigation.html
index 687c7e456650..5af49d203de9 100644
--- a/source/_includes/asides/getting_started_navigation.html
+++ b/source/_includes/asides/getting_started_navigation.html
@@ -4,8 +4,8 @@
{% active_link /voice_control/troubleshooting_the_s3_box/ Troubleshooting the ESP32-S3-BOX %}
+
+
diff --git a/source/_includes/common-tasks/backups.md b/source/_includes/common-tasks/backups.md
index f6ed9efed9bd..b8e89b4352bd 100644
--- a/source/_includes/common-tasks/backups.md
+++ b/source/_includes/common-tasks/backups.md
@@ -1,6 +1,8 @@
## Backups
-Backup of your Home Assistant and add-on data and configuration. They are stored in a compressed archive file (.tar). Backups are made from the backups panel under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}. There is also a service available that allows you to trigger the creation of a backup from an automation. By default, backups are stored locally in the `/backup` directory.
+Backup of your Home Assistant, add-on data, and configuration. Backups are used to [restore](#restoring-a-backup) a system or parts of it if a rollback is needed or to migrate your Home Assistant to new hardware. It is good practice to create a backup before updating.
+
+Backups are made from the backups panel under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}. There is also a [service](/integrations/hassio/#service-hassiobackup_full) available that allows you to trigger the creation of a backup from an automation. Backups are stored in a compressed archive file (.tar) and by default, stored locally in the `/backup` directory.
A full backup includes the following directories:
@@ -26,7 +28,9 @@ A partial backup consists of any number of the above default directories and ins
1. Go to {% my supervisor_backups title="**Settings** > **System** > **Backups**" %} in the UI.
2. Select the **Create backup** button in the lower right.
3. Provide a name for the backup.
-4. Choose full or partial.
+4. Choose **Full backup** or **Partial backup**.
+ - If you choose **Partial backup**, make sure to select Home Assistant and all the folders and add-ons you want to backup or migrate.
+ - Note that the number of add-ons increases the size of the backup as well as the time it takes to restore from that backup.
5. Optionally, enable password protection.
6. Select **Create** to begin the backup.
@@ -44,7 +48,8 @@ You might need a backup in case your system has crashed. If you only store them
There are multiple ways to store the backup on another device:
-- **Option 1**: Under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}, select the backup from the list.
+- **Option 1**: Under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}, on the list, single-click or tap the backup of interest.
+ - **Result**: The backup dialog opens.
- In the dialog, select the three dots menu and select **Download backup**.
- **Result**: The selected backup is stored in the **Downloads** folder of your computer.
- **Option 2**: If you haven't already done so, [configure access to files on Home Assistant](/common-tasks/{{page.installation}}/#configuring-access-to-files), using one of the methods listed there.
@@ -54,7 +59,7 @@ There are multiple ways to store the backup on another device:
- [Add a network storage location](/common-tasks/{{page.installation}}/#network-storage) for backups.
- [Change the default location](/common-tasks/{{page.installation}}/#change-default-backup-location) for backups.
-- **Option 4**: Or even better, create an automation to handle that.
+- **Option 4**: Or even better, create an automation to handle that, using one of the [backup services](/integrations/hassio/#service-hassiobackup_full).
- **Option 5**: Make use of a third-party add-on:
- [Google Drive Backup](https://github.com/sabeechen/hassio-google-drive-backup)
- [Dropbox Sync](https://github.com/danielwelch/hassio-dropbox-sync)
diff --git a/source/_includes/common-tasks/commandline.md b/source/_includes/common-tasks/commandline.md
index 530ea7087d7d..8505c66f962a 100644
--- a/source/_includes/common-tasks/commandline.md
+++ b/source/_includes/common-tasks/commandline.md
@@ -1,10 +1,5 @@
## Home Assistant via the command line
-
-
-Home Assistant upgrade process from the SSH command line
-
-
On the SSH command line, you can use the `ha` command to retrieve logs, check the details of connected hardware, and more.
### Home Assistant
@@ -100,7 +95,25 @@ Use "ha [command] --help" for more information about a command.
```
{% if page.installation == "os" %}
+
### Console access
-You can also access the Home Assistant Operating System via a directly connected keyboard and monitor, the console.
+You can also access the {% term "Home Assistant Operating System" %} via a directly connected keyboard and monitor, the console.
+
+#### Wiping the data disk wipe from the command line
+
+In {% term "Home Assistant Operating System" %}, the `ha os datadisk wipe` command wipes the data disk. The command deletes all user data as well as Home Assistant Core, Supervisor, and any installed add-ons.
+
+The command `ha os datadisk wipe` marks the data partition (either internal on the eMMC or the SD card, or on an external attached data disk) as to be cleared on the next reboot. The command automatically reboots the system. Upon reboot, the data is cleared. Then the system continues to boot and reinstalls the latest version of all Home Assistant components.
+
+The `ha os datadisk wipe` command can only be run from the local terminal. Connect a display and keyboard and use the terminal.
+
+Note, if you have a Home Assistant Yellow, there is a red hardware button to wipe the data disk. Follow the procedure on [resetting the device](https://yellow.home-assistant.io/guides/factory-reset/).
+
+#### Listing all users from the command line
+
+In {% term "Home Assistant Operating System" %}, the `ha auth list` command lists all users that are registered on your Home Assistant.
+
+The `ha auth list` command can only be run from the local terminal. Connect a display and keyboard and use the terminal.
+
{% endif %}
diff --git a/source/_includes/common-tasks/configuration_check.md b/source/_includes/common-tasks/configuration_check.md
index cc68d4075187..4d0fbaa64bf1 100644
--- a/source/_includes/common-tasks/configuration_check.md
+++ b/source/_includes/common-tasks/configuration_check.md
@@ -2,12 +2,28 @@
{% if page.installation == "os" or page.installation == "supervised" %}
+After changing configuration or automation files, check if the configuration is valid before restarting Home Assistant Core.
+
+## To run a configuration check from the UI
+
+1. Go to {% my profile title="your user profile" %} and enable **Advanced Mode**.
+2. Go to {% my server_controls title="**Developer tools** > **YAML**" %} and in the **Configuration validation** section, select the **Check configuration** button.
+ - This is to make sure there are no syntax errors before restarting Home Assistant.
+ - It checks for valid YAML and valid config structures.
+3. If you need to do a more comprehensive configuration check, [run the check from the CLI](#to-run-a-configuration-check-from-the-cli).
+
+## To run a configuration check from the CLI
+
+Use the following command to check if the configuration is valid. The command line configuration check validates the YAML files and checks for valid config structures, as well as some other elements.
+
```bash
ha core check
```
{% elsif page.installation == "container" %}
+After changing configuration files, check if the configuration is valid before restarting Home Assistant Core.
+
_If your container name is something other than `homeassistant`, change that part in the examples below._
Run the full check:
@@ -42,19 +58,21 @@ docker exec homeassistant python -m homeassistant --script check_config --help
{% elsif page.installation == "core" %}
-1. Switch to the user that is running Home Assistant
+After changing configuration files, check if the configuration is valid before restarting Home Assistant Core.
+
+1. Switch to the user that is running Home Assistant.
```bash
sudo -u homeassistant -H -s
```
-2. Activate the virtual environment that Home Assistant is running in
+2. Activate the virtual environment that Home Assistant is running in.
```bash
source /srv/homeassistant/bin/activate
```
-3. Run the configuration check
+3. Run the configuration check.
Run the full check:
@@ -86,6 +104,6 @@ docker exec homeassistant python -m homeassistant --script check_config --help
hass --script check_config --help
```
-4. When that is complete restart the service for it to use the new files.
+4. When that is complete, restart the service for it to use the new files.
{% endif %}
diff --git a/source/_includes/common-tasks/data_disk.md b/source/_includes/common-tasks/data_disk.md
index 33cd7dddd037..3202dfa86a28 100644
--- a/source/_includes/common-tasks/data_disk.md
+++ b/source/_includes/common-tasks/data_disk.md
@@ -1,6 +1,6 @@
-## Using external Data Disk
+## Using external data disk
-Home Assistant Operating System supports storing most data on an external storage medium (e.g. USB attached SSD or HDD). This data disk contains not only user data but also most of the Home Assistant software as well (Core, Supervisor etc.). This means a fast data disk will make the system overall much faster.
+{% term "Home Assistant Operating System" %} supports storing most data on an external storage medium, such as an USB attached SSD or HDD. This data disk contains not only user data but also most of the Home Assistant software as well (Core, Supervisor, etc.). This means a fast data disk will make the system overall much faster.
![Graphics showing the architecture of the data disk feature](/images/haos/usb-data-disk.png)
@@ -20,7 +20,7 @@ The data disk feature can be used on an existing installation without losing dat
- If you have been using a data disk previously with Home Assistant Operating System, you need to use your host computer to delete all partitions *before* using it as a data disk again.
+ If you have been using a data disk previously with {% term "Home Assistant Operating System" %}, you need to use your host computer to delete all partitions *before* using it as a data disk again.
@@ -28,7 +28,7 @@ The data disk feature can be used on an existing installation without losing dat
1. Connect the data disk to your system.
2. Go to **{% my storage title="Settings > System > Storage" %}** in the UI.
-3. Select the "Move data disk" button.
+3. Select **Move data disk**.
4. Select the data disk from the list of available devices.
5. Select **Move**.
@@ -64,3 +64,41 @@ The system will prepare the data disk and immediately reboot. The reboot will ta
Using an USB attached SSD can draw quite some power. For instance on Raspberry Pi 3 the official Raspberry Pi power supply (PSU) only provides 2.5A which can be too tight. Use a more powerful power supply if you experience issues. Alternatively use a powered USB hub. Connect the Hub to one of the USB slots of your Raspberry Pi, and connect the SSD to the Hub. In this setup the power supply of the Hub will power the attached device(s).
+
+### Migrating an external data disk to another system
+
+This section shows how to move an external data disk from one system to another.
+This can be an option if the following elements apply to your use case:
+
+- You already have a functioning Home Assistant instance (system 1) that is using an external data disk.
+- You have another, new, Home Assistant instance (system 2).
+- You want now want to use the data disk of system 1 on system 2 instead.
+
+The aim is to migrate the data from system 1 to system 2. One way to do this is by [restoring a backup](/common-tasks/os/#restoring-a-backup). The other way is to move the data disk. This can be an interesting option if you have a large amount of data on your external disk or if your external disk has more storage capacity than your new system.
+
+#### Prerequisites
+
+- A Home Assistant instance using an external data disk (system 1)
+- A Home Assistant instance to which you want to move the external data disk (system 2)
+
+#### To migrate an external data disk to another system
+
+To migrate an external data disk from one system to another, follow these steps:
+
+1. [Create a backup](/common-tasks/os/#backups) of both systems and store these backups on another system (not strictly necessary, but recommended just in case, at least for the important data).
+2. Shut down system 1 and remove the data disk.
+3. Make sure system 2 has Home Assistant OS installed, and Home Assistant is up and running. Home Assistant is using the data disk (partition) on the boot drive (e.g. SD card) at this point.
+4. Make sure system 2 has completed the basic [onboarding](/getting-started/onboarding/) steps, including the last steps where devices are discovered automatically.
+5. Plug the external disk into system 2 and go to the **Settings** > **System**. Select the three dots menu, and **Restart Home Assistant** > **Reboot system**.
+ **Result**: A repair issue is displayed **Multiple data disks detected**.
+ - The repair issue comes up because system 2 now sees two file systems with an identical name. During a reboot, there is a name conflict with the existing data disk as it is undefined which file system should be used. This can lead to a random selection of the system you end up with. Hence you must make a decision.
+6. Open the repair issue and choose one of the options:
+ - Select **Use the detected data disk instead of the current system**.
+ - This will override the current file system of system 2 and use your external data disk instead.
+ - You won't have access anymore to the current Home Assistant data. It will be marked as inactive data disk.
+ - If you changed your mind about using the external data disk:
+ - Unplug the external data disk.
+ - If you cannot unplug the external data disk for some reason, select **Mark as inactive data disk (rename file system)**.
+ - This makes sure that there is no name conflict after rebooting.
+ - It also means you cannot use the file system that is stored on your external disk.
+ - You keep using the current file system of system 1.
diff --git a/source/_includes/common-tasks/define_custom_polling.md b/source/_includes/common-tasks/define_custom_polling.md
index bfa616483928..13b3e15f2d6f 100644
--- a/source/_includes/common-tasks/define_custom_polling.md
+++ b/source/_includes/common-tasks/define_custom_polling.md
@@ -1,6 +1,8 @@
-If you want to define a specific interval at which your device is being polled for data, you can disable the default polling interval and create your own polling service.
+If you want to define a specific interval at which your device is being polled for data, you can disable the default polling interval and create your own polling automation.
+
+To add the automation:
1. Go to {% my integrations title="**Settings** > **Devices & Services**" %}, and select your integration.
2. On the integration entry, select the three dots.
diff --git a/source/_includes/common-tasks/enable_entities.md b/source/_includes/common-tasks/enable_entities.md
index 25981da8629c..4b05c795dd79 100644
--- a/source/_includes/common-tasks/enable_entities.md
+++ b/source/_includes/common-tasks/enable_entities.md
@@ -1,12 +1,17 @@
-## Enabling entities
+## Enabling or disabling elements
Some entities are disabled by default. To enable them, follow these steps:
-1. Go to **{% my integrations title="Settings > Devices & Services" %}** and select the integration of interest.
-2. Select **entities**.
-3. From the list of entities, select the entity you want to enable.
- ![Select entity from list](/images/screenshots/enable_entities_01.png)
-4. In the pop-up, select the cogwheel.
-5. Toggle the **Enabled** button.
- ![Enable entities](/images/screenshots/enable_entities_03.png)
-6. To save the changes, select **Update**.
+1. In Home Assistant, open the table of interest.
+ - To enable or disable entities, go to {% my entities title="**Settings** > **Devices & Services** > **Entities**" %}.
+ - To enable or disable automations, go to {% my automations title="**Settings** > **Automations & Scenes**" %}.
+2. [Enable multiselect](/docs/organizing/filtering) and select all the entities you want to enable or disable.
+3. In the top right corner, select the three dots menu, then select **Enable** or **Disable**.
+
+ ![Screenshot showing how to enable or disable multiple automations](/images/organizing/enable_disable.png)
+
+## Related topics
+
+- [Enable multiselect](/docs/organizing/filtering)
+- [Grouping your assets](/docs/organizing/)
+- [Filtering your assets](/docs/organizing/filtering)
diff --git a/source/_includes/common-tasks/enable_i2c.md b/source/_includes/common-tasks/enable_i2c.md
index 27877fd75f6d..8e89d4b89cd7 100644
--- a/source/_includes/common-tasks/enable_i2c.md
+++ b/source/_includes/common-tasks/enable_i2c.md
@@ -1,6 +1,6 @@
## Enable I2C
-Home Assistant using the Home Assistant Operating System which is a managed environment, which means you can't use existing methods to enable the I2C bus on a Raspberry Pi. In order to use I2C devices you will have to
+Home Assistant using the {% term "Home Assistant Operating System" %} which is a managed environment, which means you can't use existing methods to enable the I2C bus on a Raspberry Pi. In order to use I2C devices you will have to
- Enable I2C for the Home Assistant Operating System
- Setup I2C devices e.g. sensors
@@ -10,7 +10,7 @@ Home Assistant using the Home Assistant Operating System which is a managed envi
You will need:
- SD card reader
-- SD card with Home Assistant Operating System flashed on it
+- SD card with {% term "Home Assistant Operating System" %} flashed on it
Shutdown/turn-off your Home Assistant installation and unplug the SD card.
Plug the SD card into an SD card reader and find a drive/file system named
@@ -43,7 +43,7 @@ and make sure the first partition is available.
### Enable I2C via Home Assistant Operating System Terminal
-Alternatively, by attaching a keyboard and screen to your device, you can access the physical terminal to the Home Assistant Operating System.
+Alternatively, by attaching a keyboard and screen to your device, you can access the physical terminal to the {% term "Home Assistant Operating System" %}.
You can enable I2C via this terminal:
diff --git a/source/_includes/common-tasks/file_access.md b/source/_includes/common-tasks/file_access.md
index f7a3e7f464cf..f5d13a7c62f7 100644
--- a/source/_includes/common-tasks/file_access.md
+++ b/source/_includes/common-tasks/file_access.md
@@ -4,7 +4,7 @@ Your Home Assistant Operating server includes two repositories by default: The o
One of the first things to take care of after installing Home Assistant OS is to provide yourself access to files. There are several add-ons commonly used for this, and most users employ a mix of various add-ons. Default directories on the host are mapped to the add-ons so that they can be accessed by the services any particular add-on might provide. On the host system these directories exist on the `/data` partition at `/mnt/data/supervisor/`.
-Using any of the add-ons listed below,the following directories are made available for access:
+Using any of the add-ons listed below, the following directories are made available for access:
- `addons`
- `backup`
@@ -47,14 +47,37 @@ The Terminal & SSH add-on also provides a web terminal which allows you to acces
### Installing and using the Visual Studio Code (VSC) add-on
-The Visual Studio Code add-on provides access through a feature packed web-based version of the Visual Studio Code editor and currently only supports AMD64 and aarch64/ARM64 machines. This add-on can be installed in the add-on store from the Community add-on repository. The add-on also provides access to the Home Assistant Command Line Interface (CLI) using VSC's built in terminal, which allows for checking logs, stopping and starting Home Assistant and add-ons, creating/restoring backups, and more. (See [Home Assistant via Command Line](https://www.home-assistant.io/hassio/commandline/) for further info).
+The **Studio Code Server** add-on provides access through a feature-packed web-based version of the Visual Studio Code editor. It currently only supports AMD64 and aarch64/ARM64 machines. The add-on also provides access to the Home Assistant Command Line Interface (CLI) using VSC's built-in terminal, which allows for checking logs, stopping, and starting Home Assistant and add-ons, creating/restoring backups, and more. (See [Home Assistant via Command Line](/hassio/commandline/) for further info).
-There is no configuration required for editing files within your `/config` directory. In order to enable access to other directories, it is necessary to edit the add-on's configuration from its configuration tab. See the add-on documentation for details.
+
+
+Example of a configuration.yaml file, accessed using the Studio Code Server add-on on a Home Assistant Operating System installation.
+
+
+To install and use the **Studio Code Server** in Home Assistant, follow these steps:
+
+1. To install the add-on, go to {% my supervisor_addon title="**Settings** > **Add-ons** > **Studio Code Server**" addon="a0d7b954_vscode" %} and install the add-on.
+2. Once you have the add-on installed, if you want, select the **Show in sidebar** option. Then, select **Start**.
+3. For information on configuration settings, open the **Documentation** tab.
+4. To start browsing, on the **Info** tab, select **Open Web UI**.
---
### Installing and using the File Editor add-on
-A more basic and light weight alternative to Visual Studio Code, the File Editor add-on provides access through Hass-Configurator, which is a web-based filesystem-browser and text-editor. YAML files are automatically checked for syntax errors while editing. This add-on can be installed via the add-on store from the official add-on repository.
+The **File Editor** add-on is a web-based file system browser and text editor. It is a more basic and light weight alternative to Visual Studio Code. YAML files are automatically checked for syntax errors while editing.
+
+
+
+Example of a configuration.yaml file, accessed using the File editor add-on on a Home Assistant Operating System installation.
+
+
+To install and use the File Editor in Home Assistant, follow these steps:
-There is no configuration required for editing files within your `/config` directory. In order to enable access to further directories, editing the add-on configuration is required. See the add-on documentation for details.
+1. To install the add-on, go to {% my supervisor_addon title="**Settings** > **Add-ons** > **File editor**" addon="core_configurator" %}.
+ - Once you have the add-on installed, you can edit files within your `/config` directory.
+2. If you want to be able to access directories outside the `/config` directory, in the add-on, open the **Configuration** tab and disable the **Enforce basepath** option.
+ - Note: The **Enforce basepath** option is intended to protect you from inadvertently making changes to settings files.
+3. For information on other configuration settings, open the **Documentation** tab.
+4. To confirm your changes, select **Save**.
+5. To start browsing, on the **Info** tab, select **Open Web UI**.
diff --git a/source/_includes/common-tasks/flashing_m1s_otg.md b/source/_includes/common-tasks/flashing_m1s_otg.md
new file mode 100644
index 000000000000..abefeba173b5
--- /dev/null
+++ b/source/_includes/common-tasks/flashing_m1s_otg.md
@@ -0,0 +1,47 @@
+## Flashing an ODROID-M1S
+
+Home Assistant can be flashed to an ODROID-M1S by connecting the device directly to your computer via the USB-OTG connection on the front of the board.
+Unlike other ODROID boards, the M1S does not have a socket for an optional eMMC module. It also does not have a separate flash chip that holds a dedicated bootloader.
+Instead, the M1S has a build-in 64GB eMMC soldered directly on the board that holds a bootloader by default. This guide will show you how to install the {% term "Home Assistant Operating System" %} to the built-in eMMC.
+
+**Warning: Installing Home Assistant OS replaces the firmware and SPL on the eMMC with the mainline version provided by the Home Assistant OS. As a result, it is not possible to use the SD card with the EMMC2UMS image anymore, because the mainline SPL is not compatible with U-Boot in the EMMC2UMS image at this time (February 2024). This does not pose any problem for standard use, just makes it more complicated in case you want to return to the Hardkernel-provided OS (see [HK Recovery](#hk-recovery)).**
+
+### What you will need
+
+To flash your eMMC using USB-OTG, you will need the following items:
+
+- A small SD card
+- Another computer
+- USB 2.0 to micro-USB cable
+- the special Hardkernel eMMC-to-USB-mass-storage image
+
+### Boot into mass-storage mode
+
+(These steps are identical to the official [Hardkernel wiki](https://wiki.odroid.com/odroid-m1s/getting_started/os_installation_guide?redirect=1#install_over_usb_from_pc) page.)
+
+1. Download [ODROID-M1S_EMMC2UMS.img](https://dn.odroid.com/RK3566/ODROID-M1S/Installer/ODROID-M1S_EMMC2UMS.img).
+2. Use [balena Etcher](https://www.balena.io/etcher/) or another tool to flash the UMS utility onto an SD card.
+ - Use **Flash from file**. **Flash from URL** does not work on all systems.
+ (balena Etcher will complain that something went wrong during flashing. You can ignore this message)
+3. Plug-in that SD card to your ODROID-M1S and boot it.
+
+### Flashing Home Assistant M1S
+
+1. Download the latest stable version of Home Assistant OS for the [ODROID-M1S](https://github.com/home-assistant/operating-system/releases/download/{{site.data.version_data.hassos['odroid-m1s']}}/haos_odroid-m1s-{{site.data.version_data.hassos['odroid-m1s']}}.img.xz).
+2. Apart from the HAOS image to flash (M1S instead of N2+ version), you can follow the N2+ step-by-step flashing guide [HERE](/common-tasks/os/#flashing-home-assistant).
+
+
+#### _HK Recovery_
+
+If you want to restore your M1S back into Hardkernel's initial state, you will have to restore the HK's bootloader.
+A reliable way of reflashing the eMMC with an operating system of your choice is to use Home Assistant OS to flash the EMMC2UMS image which turns the ODROID-M1S into USB Mass Storage device. Once you have flashed the EMMC2UMS image, you can flash any OS again. You will need a micro USB cable to connect ODROID-M1S to PC.
+
+Note: This commands will render your current Home Assistant OS installation unbootable!
+
+Use the local terminal (HDMI/keyboard) to access the system console. On the Home Assistant CLI (command line), enter `login` to enter the root shell and use `curl` to download an image and `dd` it to the eMMC block device:
+
+```sh
+curl https://dn.odroid.com/RK3566/ODROID-M1S/Installer/ODROID-M1S_EMMC2UMS.img | dd of=/dev/mmcblk0
+```
+
+This way, the device will start in the UMS mode on the next boot with the SD card removed. Follow the [Install over USB from PC](https://wiki.odroid.com/odroid-m1s/getting_started/os_installation_guide#install_over_usb_from_pc) to install a different operating system.
diff --git a/source/_includes/common-tasks/network_storage.md b/source/_includes/common-tasks/network_storage.md
index 00cf377105ed..540e8baa891c 100644
--- a/source/_includes/common-tasks/network_storage.md
+++ b/source/_includes/common-tasks/network_storage.md
@@ -13,7 +13,7 @@ To list all your currently connected network storages, go to **{% my storage tit
- You need to make sure you run a supported Home Assistant Supervised installation with the latest version of the [os-agent](https://github.com/home-assistant/os-agent). Make sure that your supervisor uses [slave bind propagation](https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation) for the data volume.
+ You need to make sure you run a supported {% term "Home Assistant Supervised" %} installation with the latest version of the [os-agent](https://github.com/home-assistant/os-agent). Make sure that your supervisor uses [slave bind propagation](https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation) for the data volume.
diff --git a/source/_includes/common-tasks/update.md b/source/_includes/common-tasks/update.md
index e4f924d70083..00498602479b 100644
--- a/source/_includes/common-tasks/update.md
+++ b/source/_includes/common-tasks/update.md
@@ -1,11 +1,9 @@
-## Update
+Best practice for updating Home Assistant Core:
-Best practice for updating a Home Assistant installation:
-
-1. Backup your installation{% if page.installation == "os" or page.installation == "supervised" %}, using the backup functionality Home Assistant offers{% endif %}.
+1. Backup your installation{% if page.installation == "os" or page.installation == "supervised" %}, using the [backup functionality](/common-tasks/os/#backups) Home Assistant offers{% endif %}.
2. Check the release notes for backward-incompatible changes on [Home Assistant release notes](/blog/categories/core/). Be sure to check all release notes between the version you are running and the one you are upgrading to. Use the search function in your browser (`CTRL + f` / `CMD + f`) and search for **Backward-incompatible changes**.
{% if page.installation == "os" or page.installation == "supervised" %}
-3. Select "Create backup before updating" in case you encounter an issue that requires a rollback.
+3. Select **Create backup before updating** in case you encounter an issue that requires a rollback.
4. Update Home Assistant.
5. Review persistent notifications and log to see if there are any issues with your configuration that need to be addressed.
{% endif %}
@@ -19,9 +17,9 @@ To update Home Assistant Core when you run Home Assistant {{ page.installation_n
- title: Using the UI
content: |
- 1. Open your Home Assistant UI
- 2. Navigate to the Settings panel
- 3. On the top you will be presented with an update notification
+ 1. Open your Home Assistant UI.
+ 2. Navigate to the **Settings** panel.
+ 3. On the top you will be presented with an update notification.
_If you do not see that notification you can click the overflow menu in the top right and select "Check for updates"._
diff --git a/source/_includes/dashboard/edit_dashboard.md b/source/_includes/dashboard/edit_dashboard.md
index d826f6906b9f..0e5d9dd0bb1a 100644
--- a/source/_includes/dashboard/edit_dashboard.md
+++ b/source/_includes/dashboard/edit_dashboard.md
@@ -3,6 +3,10 @@
{% capture title %}{{ include.title | default: page.title }}{% endcapture %}
To add the {{ title | downcase }} to your user interface:
-1. In the top right of the screen, select the three dots menu and then select **Edit dashboard**.
- - By editing the dashboard, you are taking over control of this dashboard. This means that it is no longer automatically updated when new dashboard elements become available. To continue, in the dialog, select **Take control**.
-2. In the bottom right corner, select the **Add card** button and select from the card picker.
+
+1. In the top right of the screen, select the pencil icon.
+ - If this is your first time editing a dashboard, the **Edit dashboard** dialog appears.
+ - By editing the dashboard, you are taking over control of this dashboard.
+ - This means that it is no longer automatically updated when new dashboard elements become available.
+ - To continue, in the dialog, select the three dots menu, then select **Take control**.
+2. [Add a card](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard.
diff --git a/source/_includes/installation/container.md b/source/_includes/installation/container.md
index 554a30af4302..6dbf16734afd 100644
--- a/source/_includes/installation/container.md
+++ b/source/_includes/installation/container.md
@@ -1,7 +1,7 @@
## Install Home Assistant Container
{% if page.installation_type != 'alternative' %}
-These below instructions are for an installation of Home Assistant Container running in your own container environment, which you manage yourself. Any [OCI](https://opencontainers.org/) compatible runtime can be used, however this guide will focus on installing it with Docker.
+These below instructions are for an installation of {% term "Home Assistant Container" %} running in your own container environment, which you manage yourself. Any [OCI](https://opencontainers.org/) compatible runtime can be used, however this guide will focus on installing it with Docker.
Prerequisites
@@ -129,8 +129,8 @@ As jemalloc can cause issues on certain hardware, it can be disabled by passing
services:
homeassistant:
...
- environment:
- - DISABLE_JEMALLOC: true
+ environment:
+ DISABLE_JEMALLOC: true
```
{% endtabbed_block %}
diff --git a/source/_includes/installation/core.md b/source/_includes/installation/core.md
index 045241c23f80..7e06ce3b64c8 100644
--- a/source/_includes/installation/core.md
+++ b/source/_includes/installation/core.md
@@ -3,9 +3,9 @@
{% if page.installation_type == 'windows' %}
### Install WSL
-To install Home Assistant Core on Windows, you will need to use the Windows Subsystem for Linux (WSL). Follow the [WSL installation instructions](https://docs.microsoft.com/windows/wsl/install-win10) and install Ubuntu from the Windows Store.
+To install {% term "Home Assistant Core" %} on Windows, you will need to use the Windows Subsystem for Linux (WSL). Follow the [WSL installation instructions](https://docs.microsoft.com/windows/wsl/install-win10) and install Ubuntu from the Windows Store.
-As an alternative, Home Assistant OS can be installed in a Linux guest VM. Running Home Assistant Core directly on Windows is not supported.
+As an alternative, Home Assistant OS can be installed in a Linux guest VM. Running {% term "Home Assistant Core" %} directly on Windows is not supported.
{% endif %}
diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md
index b3f7c2aadb9b..53503a6e9c02 100644
--- a/source/_includes/installation/operating_system.md
+++ b/source/_includes/installation/operating_system.md
@@ -1,4 +1,4 @@
-# Install Home Assistant Operating System
+## Install Home Assistant Operating System
{% assign release_url = "https://github.com/home-assistant/operating-system/releases/download" %}
@@ -12,26 +12,26 @@ Follow this guide if you want to get started with Home Assistant easily or if yo
You will need a few things to get started with installing Home Assistant. The links below lead to Ameridroid. If you’re not in the US, you should be able to find these items in web stores in your country.
-To get started, we suggest the ODROID N2+, the board that powers our [Home Assistant Blue](/blue/), or the ODROID M1.
+To get started, we suggest the ODROID-N2+, the board that powers our [Home Assistant Blue](/blue/), or the ODROID-M1.
-If unavailable, we also recommend the [ODROID C4](https://ameridroid.com/products/odroid-c4?ref=eeb6nfw07e).
+If unavailable, we also recommend the [ODROID-C4](https://ameridroid.com/products/odroid-c4?ref=eeb6nfw07e).
Home Assistant bundles (US market):
The bundles come with Home Assistant pre-installed.
-- [ODROID N2+: 2 GB RAM / 16 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44748729286935?ref=eeb6nfw07e)
-- [ODROID N2+: 4 GB RAM / 64 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44748729221399?ref=eeb6nfw07e)
-- ODROID M1: 4 GB RAM / 256 GB NVMe / [16 GB µSD](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44929573028119?ref=eeb6nfw07e) or [16 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44994940567831?ref=eeb6nfw07e)
-- ODROID M1: 8 GB RAM / 256 GB NVMe / [16 GB µSD](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44929573093655?ref=eeb6nfw07e) or [16 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44994940633367?ref=eeb6nfw07e)
-- [ODROID M1: 8 GB RAM / 1 TB NVMe / 64 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44994940698903?ref=eeb6nfw07e)
+- [ODROID-N2+: 2 GB RAM / 16 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44748729286935?ref=eeb6nfw07e)
+- [ODROID-N2+: 4 GB RAM / 64 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44748729221399?ref=eeb6nfw07e)
+- ODROID-M1: 4 GB RAM / 256 GB NVMe / [16 GB µSD](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44929573028119?ref=eeb6nfw07e) or [16 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44994940567831?ref=eeb6nfw07e)
+- ODROID-M1: 8 GB RAM / 256 GB NVMe / [16 GB µSD](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44929573093655?ref=eeb6nfw07e) or [16 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44994940633367?ref=eeb6nfw07e)
+- [ODROID-M1: 8 GB RAM / 1 TB NVMe / 64 GB eMMC](https://ameridroid.com/products/odroid-n2-home-assistant-blue-bundle-limited-edition?variant=44994940698903?ref=eeb6nfw07e)
Variants without pre-installed Home Assistant:
-- ODROID N2+, [2 GB RAM](https://ameridroid.com/products/odroid-n2-plus?variant=40371828719650?ref=eeb6nfw07e) or [4 GB RAM](https://ameridroid.com/products/odroid-n2-plus?variant=40371828752418?ref=eeb6nfw07e)
-- [ODROID C4](https://ameridroid.com/products/odroid-c4?ref=eeb6nfw07e)
-- [ODROID M1](https://ameridroid.com/products/odroid-M1?ref=eeb6nfw07e)
-
+- ODROID-N2+, [2 GB RAM](https://ameridroid.com/products/odroid-n2-plus?variant=40371828719650?ref=eeb6nfw07e) or [4 GB RAM](https://ameridroid.com/products/odroid-n2-plus?variant=40371828752418?ref=eeb6nfw07e)
+- [ODROID-C4](https://ameridroid.com/products/odroid-c4?ref=eeb6nfw07e)
+- [ODROID-M1](https://ameridroid.com/products/odroid-M1?ref=eeb6nfw07e)
+- ODROID-M1S, [4 GB RAM](https://ameridroid.com/products/odroid-m1s?variant=47425396474135?ref=eeb6nfw07e) or [8 GB RAM](https://ameridroid.com/products/odroid-m1s?variant=47425396506903?ref=eeb6nfw07e)
- [Power Supply](https://ameridroid.com/products/12v-2a-power-supply-plug?ref=eeb6nfw07e)
- [CR2032 Coin Cell](https://ameridroid.com/products/rtc-bios-battery?ref=eeb6nfw07e)
- [eMMC Module](https://ameridroid.com/products/emmc-module-n2-linux-red-dot?ref=eeb6nfw07e)
@@ -46,7 +46,7 @@ Variants without pre-installed Home Assistant:
Prerequisites
-This guide assumes that you have a dedicated {{ site.installation.types[page.installation_type].board }} PC to exclusively run the Home Assistant Operating System.
+This guide assumes that you have a dedicated {{ site.installation.types[page.installation_type].board }} PC to exclusively run the {% term "Home Assistant Operating System" %}.
- This is typically an Intel or AMD-based system.
- The system must be 64-bit capable and be able to boot using UEFI.
@@ -55,7 +55,7 @@ This guide assumes that you have a dedicated {{ site.installation.types[page.ins
Summary
1. First, you will need to configure your {{ site.installation.types[page.installation_type].board }} PC to use UEFI boot mode.
-2. Then, write the Home Assistant Operating System disk image to your boot medium.
+2. Then, write the {% term "Home Assistant Operating System" %} disk image to your boot medium.
@@ -88,7 +88,7 @@ Typically, an internal medium like S-ATA hard disk, S-ATA SSD, M.2 SSD, or a non
To write the HAOS image to the boot medium on your x86-64 hardware, there are 2 different methods:
- **Method 1 (recommended)**: Boot Ubuntu from a USB flash drive and install the Home Assistant Operating System from there. It also works on laptops and PCs with internal hard disks.
+ **Method 1 (recommended)**: Boot Ubuntu from a USB flash drive and install the {% term "Home Assistant Operating System" %} from there. It also works on laptops and PCs with internal hard disks.
**Method 2**: With this method, you write the Home Assistant Operating disk image directly onto a boot medium from your regular computer. The steps are a bit more complex. If you have non-removable internal mediums (for example because you are using a laptop) or do not have the necessary adapter (for example an USB to S-ATA adapter) use method 1 instead.
@@ -97,13 +97,13 @@ To write the HAOS image to the boot medium on your x86-64 hardware, there are 2
#### Required material
- Computer
-- The target x86-64 hardware, on which you want to install the Home Assistant Operating System (HAOS)
+- The target x86-64 hardware, on which you want to install the {% term "Home Assistant Operating System" %} (HAOS)
- USB flash drive (USB thumb drive is sufficient, it should be at least 4 GB in size)
- Internet connection
#### To install HAOS via Ubuntu from a USB flash drive
-1. **Notice**: This procedure will write the Home Assistant Operating System onto your device.
+1. **Notice**: This procedure will write the {% term "Home Assistant Operating System" %} onto your device.
- This means you will lose all the data as well as the previously installed operating system.
- Back up your data before carrying out this procedure.
2. Create a *live operating system* on a USB flash drive:
@@ -114,10 +114,10 @@ To write the HAOS image to the boot medium on your x86-64 hardware, there are 2
4. When prompted, make sure to select **Try Ubuntu**. This runs Ubuntu on the USB flash device.
- The system then starts Ubuntu.
- Connect your system to your network and make sure it has internet access.
-5. In Ubuntu, open a browser and open [this procedure](/installation/generic-x86-64).
+5. In Ubuntu, open a browser and open the current documentation page, so you can follow the steps.
- From there, [download the image][generic-x86-64].
6. In Ubuntu, in the bottom left corner, select **Show Applications**.
-7. In the applications, search and open **Disks** and start restoring the HOAS image:
+7. In the applications, search and open **Disks** and start restoring the HAOS image:
1. In **Disks**, on the left side, select the internal disk device you want to install HAOS onto.
2. On top of the screen, select the three dots menu and select **Restore Disk Image...**.
![Restore disk image: select three dots menu](/images/installation/ubuntu_restore_disk_image.png)
@@ -145,7 +145,7 @@ Use this method only if Method 1 does not work for you.
#### Required material
- Computer
-- The target x86-64 hardware, on which you want to install the Home Assistant Operating System (HAOS)
+- The target x86-64 hardware, on which you want to install the {% term "Home Assistant Operating System" %} (HAOS)
- Boot medium
- Internet connection
@@ -157,14 +157,16 @@ Use this method only if Method 1 does not work for you.
{% endif %}
-1. **Notice**: This procedure will write the Home Assistant Operating System onto your device.
+1. **Notice**: This procedure will write the {% term "Home Assistant Operating System" %} onto your device.
- This means you will lose all the data as well as the previously installed operating system.
- Back up your data before continuing with the next step.
2. Attach the Home Assistant boot medium ({{site.installation.types[page.installation_type].installation_media}}) to your computer.
{% if page.installation_type == 'odroid' %}
- If you are using ODROID M1, note that booting from NVMe is not supported. If you want to boot from eMMC, [update the firmware](https://github.com/home-assistant/operating-system/blob/dev/Documentation/boards/hardkernel/odroid-m1.md) before installing the image.
+ If you are using ODROID-M1, note that booting from NVMe is not supported. If you want to boot from eMMC, [update the firmware](https://github.com/home-assistant/operating-system/blob/dev/Documentation/boards/hardkernel/odroid-m1.md) before installing the image.
+
+ If you are using a [Home Assistant Blue](/blue) or ODROID-N2+, you can [attach your device directly](/installation/odroid#flashing-an-odroid-n2).
- If you are using a [Home Assistant Blue](/blue) or ODROID N2+, you can [attach your device directly](/common-tasks/os/#flashing-an-odroid-n2).
+ If you are using an ODROID-M1S, you need to follow this guide to [boot your device into UMS mode](/installation/odroid#flashing-an-odroid-m1s).
{% endif %}
3. Download and start Balena Etcher. You may need to run it with administrator privileges on Windows.
4. Download the image to your computer.
@@ -182,7 +184,9 @@ Use this method only if Method 1 does not work for you.
```
{% if variant.key == "odroid-n2" %}
- [Guide: Flashing Odroid-N2 using OTG-USB](/hassio/flashing_n2_otg/)
+ [Guide: Flashing ODROID-N2 using OTG-USB](/installation/odroid#flashing-an-odroid-n2)
+ {% elsif variant.key == "odroid-m1s" %}
+ [Guide: Flashing ODROID-M1S using OTG-USB](/installation/odroid#flashing-an-odroid-m1s)
{% elsif variant.key == "rpi4" or variant.key == "rpi3" %}
*(64-bit is recommended)*
{% endif %}
@@ -212,7 +216,7 @@ Use this method only if Method 1 does not work for you.
9. Select **Flash!** to start writing the image.
- If the operation fails, decompress the .xz file and try again.
![Screenshot of the Etcher software showing the Flash button highlighted.](/images/installation/etcher5.png)
-1. When Balena Etcher has finished writing the image, you will see a confirmation.
+ - When Balena Etcher has finished writing the image, you will see a confirmation.
![Screenshot of the Etcher software showing that the installation has completed.](/images/installation/etcher6.png)
### Start up your {{site.installation.types[page.installation_type].board}}
@@ -468,6 +472,13 @@ With the Home Assistant Operating System installed and accessible, you can conti
{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %}
+{% if page.installation_type == 'odroid' %}
+
+{% include common-tasks/flashing_n2_otg.md %}
+{% include common-tasks/flashing_m1s_otg.md %}
+
+{% endif %}
+
[generic-x86-64]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_generic-x86-64-{{site.data.version_data.hassos['generic-x86-64']}}.img.xz
[vmdk]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_ova-{{site.data.version_data.hassos['ova']}}.vmdk.zip
[vhdx]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_ova-{{site.data.version_data.hassos['ova']}}.vhdx.zip
diff --git a/source/_includes/installation/supervised.md b/source/_includes/installation/supervised.md
index decb6cde8697..c3806b199c7b 100644
--- a/source/_includes/installation/supervised.md
+++ b/source/_includes/installation/supervised.md
@@ -14,6 +14,6 @@ Unless you really need this installation type, you should install Home Assistant
supported). So, make sure you understand the requirements from step 1 above.
3. Then head over to home-assistant/supervised-installer to set it up.
-Once the Home Assistant Supervised installation is running and Home Assistant is accessible you can continue with onboarding.
+Once the {% term "Home Assistant Supervised" %} installation is running and Home Assistant is accessible you can continue with onboarding.
{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %}
diff --git a/source/_includes/integrations/building_block_integration.md b/source/_includes/integrations/building_block_integration.md
index d6a8240dbb12..e7b4df2cd39f 100644
--- a/source/_includes/integrations/building_block_integration.md
+++ b/source/_includes/integrations/building_block_integration.md
@@ -5,6 +5,11 @@
**Building block integration**
-The {{ name | downcase }} integration cannot be directly used. You cannot create your own {{ domain | replace: "_", " " }} entities using this integration. This integration is a building block for other integrations to use, enabling them to create {{ domain | replace: "_", " " }} entities for you.
+This {{ name | downcase }} is a building block integration that cannot be added to your Home Assistant directly but is used and provided by other integrations.
+
+A building block integration differs from the typical integration that connects to a device or service. Instead, other integrations that do integrate a device or service into Home Assistant use this {{ name | downcase }} building block to provide entities, services, and other functionality that you can use in your automations or dashboards.
+
+If one of your integrations features this building block, this page documents the functionality the {{ name | downcase }} building block offers.
diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html
index 21ca613da48a..410c1daad25c 100644
--- a/source/_includes/site/sidebar.html
+++ b/source/_includes/site/sidebar.html
@@ -9,6 +9,8 @@
{% include asides/common_tasks_navigation.html %}
{% elsif root == 'dashboards' %}
{% include asides/dashboards_navigation.html %}
+ {% elsif root == 'docs' and url_parts[2] == "organizing" %}
+ {% include asides/organizing_navigation.html %}
{% elsif root == 'developers' or root == 'help' %}
{% include asides/help_navigation.html %}
{% elsif root == 'getting-started' %}
diff --git a/source/_includes/voice_assistant/install_esp_firmware.md b/source/_includes/voice_assistant/install_esp_firmware.md
new file mode 100644
index 000000000000..15ed804bd12e
--- /dev/null
+++ b/source/_includes/voice_assistant/install_esp_firmware.md
@@ -0,0 +1,33 @@
+{% capture product_name %}{{ include.name | default: page.product_name }}{% endcapture %}
+
+2. To connect the {{ product_name }} to your computer, follow these steps:
+ - In the pop-up window, view the available ports.
+ - Plug the USB-C cable into the {{ product_name }} and connect it to your computer.{% if page.product_name == 'ESP32-S3-BOX' %}
+ - If you have an ESP32-S3-BOX-3, plug it into the box directly, not into the docking station (not into the blue part).
+ - **Troubleshooting**: If your ESP32-S3-BOX-3 does not appear in the list of devices presented by your browser, you need to manually invoke "flash mode":
+ - Hold the "boot" button (left side upper button) as you tap the "reset" button (left side lower button).
+ - After a few seconds, the ESP32-S3-BOX-3 should appear in the list of USB devices presented by your browser.
+ - Follow the steps until step 3. After selecting the **Next** button, on the S3-Box, tap the "Reset" button again.
+ - Then, select the blue **Connect button** again, select the USB device and follow the prompts to configure the Wi-Fi.{% endif %}
+ - In the pop-up window, there should now appear a new entry. Select this USB serial port and select **Connect**.{% if page.product_name == 'ATOM Echo' %}
+ - **Troubleshooting**: If no new port shows, your system may be missing a driver. Close the pop-up window.
+ - In the dialog, select the CH342 driver, install it, then **Try again**.
+ ![Open My link](/images/assist/esp32-atom-flash-no-port.png){% endif %}
+3. Select **Install Voice Assistant**, then **Install**.
+ - Once the installation is complete, select **Next**.
+ - Add the {{ product_name }} to your Wi-Fi:
+ - When prompted, select your network from the list and enter the credentials to your 2.4 GHz Wi-Fi network.
+ - Select **Connect**.
+ - The {{ product_name }} now joined your network. Select **Add to Home Assistant**.
+4. This opens the **My** link to Home Assistant.
+ - If you have not used My Home Assistant before, you will need to configure it. If your Home Assistant URL is not accessible on `http://homeassistant.local:8123`, replace it with the URL to your Home Assistant instance.
+ - Open the link.
+ ![Open My link](/images/assist/esp32-atom-flash-06.png)
+5. Select **OK**.
+
+ ![Set up ESPHome](/images/assist/esp32-atom-flash-07.png)
+6. To add the newly discovered device, select the {{ product_name }} from the list.
+ - Add your {{ product_name }} to a room and select **Finish**.
+7. You should now see the **ESPHome** integration.
+ ![New ESPHome device discovered](/images/assist/m5stack-atom-echo-discovered-33.png)
+
diff --git a/source/_integrations/3_day_blinds.markdown b/source/_integrations/3_day_blinds.markdown
index 16d6206973b9..743c554cd76f 100644
--- a/source/_integrations/3_day_blinds.markdown
+++ b/source/_integrations/3_day_blinds.markdown
@@ -1,12 +1,12 @@
---
title: 3 Day Blinds
-description: Connect and control your 3 Day Blinds devices using the Motion Blinds integration
+description: Connect and control your 3 Day Blinds devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: 3_day_blinds
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/abode.markdown b/source/_integrations/abode.markdown
index 1507a7f14ccd..840b298fa763 100644
--- a/source/_integrations/abode.markdown
+++ b/source/_integrations/abode.markdown
@@ -66,25 +66,27 @@ They are grouped into the below events:
All {% term events %} have the fields:
-Field | Description
------ | -----------
-`device_id` | The Abode device ID of the event.
-`device_name` | The Abode device name of the event.
-`device_type` | The Abode device type of the event.
-`event_code` | The event code of the event.
-`event_name` | The name of the event.
-`event_type` | The type of the event.
-`event_utc` | The UTC timestamp of the event.
-`user_name` | The Abode user that triggered the event, if applicable.
-`app_type` | The Abode app that triggered the event (e.g., web app, iOS app, etc.).
-`event_by` | The keypad user that triggered the event.
-`date` | The date of the event in the format `MM/DD/YYYY`.
-`time` | The time of the event in the format `HH:MM AM`.
+| Field | Description |
+| ----- | ----------- |
+| `device_id` | The Abode device ID of the event. |
+| `device_name` | The Abode device name of the event. |
+| `device_type` | The Abode device type of the event. |
+| `event_code` | The event code of the event. |
+| `event_name` | The name of the event. |
+| `event_type` | The type of the event. |
+| `event_utc` | The UTC timestamp of the event. |
+| `user_name` | The Abode user that triggered the event, if applicable. |
+| `app_type` | The Abode app that triggered the event (e.g., web app, iOS app, etc.). |
+| `event_by` | The keypad user that triggered the event. |
+| `date` | The date of the event in the format `MM/DD/YYYY`. |
+| `time` | The time of the event in the format `HH:MM AM`. |
There is a unique list of known event_codes that can be found
[here](https://github.com/MisterWil/abodepy/files/1262019/timeline_events.txt).
-## {% term Services %}
+## Services
+
+Available {% term services %}: `change_setting`, `capture_image`, `trigger_automation`
### Service `change_setting`
@@ -94,8 +96,8 @@ For a full list of settings and valid values, consult the
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
-| `setting` | No | The setting you wish to change.
-| `value` | No | The value you wish to change the setting to.
+| `setting` | No | The setting you wish to change. |
+| `value` | No | The value you wish to change the setting to. |
### Service `capture_image`
@@ -103,7 +105,7 @@ Request a new still image from your Abode camera.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
-| `entity_id` | No | String or list of strings that point at `entity_id`s of Abode cameras.
+| `entity_id` | No | String or list of strings that point at `entity_id`s of Abode cameras. |
### Service `trigger_automation`
@@ -111,4 +113,4 @@ Trigger an automation on your Abode system.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
-| `entity_id` | No | String or list of strings that point at `entity_id`s of switches that represent your Abode automations.
+| `entity_id` | No | String or list of strings that point at `entity_id`s of switches that represent your Abode automations. |
diff --git a/source/_integrations/accuweather.markdown b/source/_integrations/accuweather.markdown
index fcbaea8ce11b..84bc2fcfb128 100644
--- a/source/_integrations/accuweather.markdown
+++ b/source/_integrations/accuweather.markdown
@@ -1,6 +1,6 @@
---
title: AccuWeather
-description: Instructions on how to integrate Accuweather within Home Assistant.
+description: Instructions on how to integrate AccuWeather within Home Assistant.
ha_category:
- Weather
ha_release: 0.114
diff --git a/source/_integrations/acomax.markdown b/source/_integrations/acomax.markdown
new file mode 100644
index 000000000000..343360682393
--- /dev/null
+++ b/source/_integrations/acomax.markdown
@@ -0,0 +1,21 @@
+---
+title: Acomax
+description: Connect and control your Acomax devices using the Motionblinds integration
+ha_category:
+ - Cover
+ha_domain: acomax
+ha_integration_type: virtual
+ha_supporting_domain: motion_blinds
+ha_supporting_integration: Motionblinds
+ha_release: 2020.12
+ha_codeowners:
+ - '@starkillerOG'
+ha_config_flow: true
+ha_platforms:
+ - cover
+ - sensor
+ha_iot_class: Local Push
+ha_dhcp: true
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown
index 90d3309d6820..32c056c2bb2c 100644
--- a/source/_integrations/advantage_air.markdown
+++ b/source/_integrations/advantage_air.markdown
@@ -2,14 +2,14 @@
title: Advantage Air
description: Instructions on how to integrate Advantage Air A/C controller into Home Assistant.
ha_category:
- - Binary switch
+ - Binary sensor
- Climate
- Cover
- Light
+ - Select
- Sensor
- Switch
- Update
- - Update
ha_release: 0.117
ha_iot_class: Local Polling
ha_config_flow: true
@@ -42,14 +42,12 @@ The wall-mounted Android tablet running the [MyPlace](https://play.google.com/st
### Climate
-The integration will create a climate entity for each air conditioning system found and for each zone that is temperature-controlled. The main climate entity will change its supported features and modes based on the [MyComfort](https://www.advantageair.com.au/wp-content/uploads/2019/10/MyComfort.pdf) temperature mode currently set.
+The integration will create a climate entity for each air conditioning system found and for each zone that is temperature-controlled. The main climate entity will have a preset for each [MyComfort](https://www.advantageair.com.au/wp-content/uploads/2019/10/MyComfort.pdf) temperature mode it supports.
- MyZone (default) - Use the MyZone select platform to pick which zone will be used for temperature control. Setting this to "Inactive" will use the return air vent temperature. e-zone systems do not support any MyComfort temperature modes, so will always be in the MyZone preset with MyZone set as "Inactive".
- MyTemp - Use the main climate entity to change between cool, heat, and off. Use the zone climate entities to set the desired temperature in each zone.
- MyAuto - Uses the average temperature of all zones for temperature control. When set to the Heat/Cool mode, you can adjust the heating and cooling target temperatures separately, and the MyAir system will automatically switch between heating and cooling as required.
-If you change MyComfort mode, you will need to restart Home Assistant or reload the integration.
-
### Cover
The integration will create a cover entity for each air conditioning zone that is not temperature controlled, allowing you to adjust the opening level manually from 0% to 100% in 5% increments.
@@ -71,7 +69,7 @@ The integration will create a binary sensor for each zone that has a motion sens
### Switch
-The integration will create a switch entity to toggle air conditioning fresh air mode, if it is supported.
+The integration will create switch entities to toggle the MyFan/ezFan setting, and to toggle air conditioning fresh air mode, if they are supported by your hardware.
With MyPlace, any relays will be created as switch entities.
diff --git a/source/_integrations/aemet.markdown b/source/_integrations/aemet.markdown
index b31c1c47e354..3dce38584322 100644
--- a/source/_integrations/aemet.markdown
+++ b/source/_integrations/aemet.markdown
@@ -9,6 +9,7 @@ ha_iot_class: Cloud Polling
ha_config_flow: true
ha_domain: aemet
ha_platforms:
+ - diagnostics
- sensor
- weather
ha_integration_type: integration
diff --git a/source/_integrations/aepohio.markdown b/source/_integrations/aep_ohio.markdown
similarity index 90%
rename from source/_integrations/aepohio.markdown
rename to source/_integrations/aep_ohio.markdown
index babf499cc73d..257a024d6acc 100644
--- a/source/_integrations/aepohio.markdown
+++ b/source/_integrations/aep_ohio.markdown
@@ -4,8 +4,8 @@ description: Get energy usage from AEP Ohio using the Opower integration
ha_category:
- Energy
- Sensor
-ha_release: 2024.1
-ha_domain: aepohio
+ha_release: 2023.8
+ha_domain: aep_ohio
ha_integration_type: virtual
ha_supporting_domain: opower
ha_supporting_integration: Opower
diff --git a/source/_integrations/aeptexas.markdown b/source/_integrations/aep_texas.markdown
similarity index 90%
rename from source/_integrations/aeptexas.markdown
rename to source/_integrations/aep_texas.markdown
index 3756a789eb73..34a6774cac44 100644
--- a/source/_integrations/aeptexas.markdown
+++ b/source/_integrations/aep_texas.markdown
@@ -4,8 +4,8 @@ description: Get energy usage from AEP Texas using the Opower integration
ha_category:
- Energy
- Sensor
-ha_release: 2024.1
-ha_domain: aeptexas
+ha_release: 2023.8
+ha_domain: aep_texas
ha_integration_type: virtual
ha_supporting_domain: opower
ha_supporting_integration: Opower
diff --git a/source/_integrations/aftership.markdown b/source/_integrations/aftership.markdown
index 6a1c935dca88..ad71021b6b99 100644
--- a/source/_integrations/aftership.markdown
+++ b/source/_integrations/aftership.markdown
@@ -21,7 +21,7 @@ The sensor value shows the number of packages that are not in `Delivered` state.
To use this sensor, you need an [AfterShip Account](https://accounts.aftership.com/register) and set up an API Key. To set up an API Key go to [AfterShip API](https://admin.aftership.com/settings/api-keys) page, and copy existing key or generate a new one.
-AfterShip recently removed the tracking API functionality from the Forever Free plan. The tracking API functionality requires at least the Essentials plan.
+AfterShip removed the Tracking API functionality from the Forever Free plan, and also no longer offers it in the Essentials plan. Using this integration now requires at least the [Pro](https://www.aftership.com/pricing/tracking) plan.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/air_quality.markdown b/source/_integrations/air_quality.markdown
index 370e6f6c187e..0fc8d32f0a3f 100644
--- a/source/_integrations/air_quality.markdown
+++ b/source/_integrations/air_quality.markdown
@@ -1,5 +1,5 @@
---
-title: Air Quality
+title: Air quality
description: Instructions on how to add air quality sensors with Home Assistant
ha_release: 0.85
ha_domain: air_quality
@@ -10,7 +10,7 @@ ha_codeowners:
ha_integration_type: entity
---
-The `air_quality` base platform allows other integrations to process information about air quality and pollution details. It is used by integrations that provide an `air_quality` sensor - you can find those under the `health` [integrations](/integrations/#health).
+The **Air quality** {% term integration %} allows other integrations to process information about air quality and pollution details. It is used by integrations that provide an `air_quality` sensor - you can find those under the `health` [integrations](/integrations/#health).
The platforms cover the following levels (if they are available):
diff --git a/source/_integrations/airnow.markdown b/source/_integrations/airnow.markdown
index 137c2a247d33..26eacd1770ab 100644
--- a/source/_integrations/airnow.markdown
+++ b/source/_integrations/airnow.markdown
@@ -20,10 +20,20 @@ as a source for air quality data for your location.
## Setup
-To generate an AirNow API key, go to the [AirNow Developer Tools Page](https://docs.airnowapi.org/account/request/) page.
+To generate an AirNow API key, go to the [AirNow Developer Tools](https://docs.airnowapi.org/account/request/) page.
{% include integrations/config_flow.md %}
+## Troubleshooting
+
+The EPA AirNow API is often flaky and will occasionally not return any results for a particular location. This will prevent the integration from being added to Home Assistant, but the situation is usually temporary and will resolve itself later.
+
+If the integration continues to report "No results found for that location" and cannot be added to Home Assistant, please do the following before submitting a bug report.
+
+First, navigate to the [AirNow Current Observations By Lat/Lon](https://docs.airnowapi.org/CurrentObservationsByLatLon/query) page, enter the same latitude/longitude and station radius, select `application/json` as the output format, select "Build" and then "Run".
+
+If the query returns a result other than `[]`, open a bug report and include the query result (you may sanitize the data to remove your latitude and longitude, but please do not remove any fields). This information will help a lot to figure out the source of the issue.
+
The AirNow API allows 500 data updates per hour, but since observations are only updated hourly, the default update rate is set to 2 per hour and should not trigger rate limiting. If you use this API key for other purposes, ensure the total request rate does not exceed 500 per hour.
diff --git a/source/_integrations/airthings.markdown b/source/_integrations/airthings.markdown
index 9fb70e96a8e6..6729d81763a2 100644
--- a/source/_integrations/airthings.markdown
+++ b/source/_integrations/airthings.markdown
@@ -3,11 +3,13 @@ title: Airthings
description: Instructions on how to integrate Airthings into Home Assistant.
ha_category:
- Environment
+ - Health
- Sensor
ha_release: '2021.10'
ha_iot_class: Cloud Polling
ha_codeowners:
- '@danielhiversen'
+ - '@LaStrada'
ha_domain: airthings
ha_config_flow: true
ha_platforms:
diff --git a/source/_integrations/airthings_ble.markdown b/source/_integrations/airthings_ble.markdown
index 3252edb68466..afc98831f271 100644
--- a/source/_integrations/airthings_ble.markdown
+++ b/source/_integrations/airthings_ble.markdown
@@ -3,6 +3,7 @@ title: Airthings BLE
description: Instructions on how to set up Airthings Devices over Bluetooth LE.
ha_category:
- Environment
+ - Health
- Sensor
ha_release: '2022.11'
ha_iot_class: Local Polling
diff --git a/source/_integrations/airtouch5.markdown b/source/_integrations/airtouch5.markdown
new file mode 100644
index 000000000000..a12508f8c84e
--- /dev/null
+++ b/source/_integrations/airtouch5.markdown
@@ -0,0 +1,25 @@
+---
+title: AirTouch 5
+description: Instructions on how to integrate the AirTouch 5 A/C controller into Home Assistant.
+ha_category:
+ - Climate
+ha_release: 2024.2
+ha_iot_class: Local Push
+ha_config_flow: true
+ha_codeowners:
+ - '@danzel'
+ha_domain: airtouch5
+ha_platforms:
+ - climate
+ha_integration_type: integration
+---
+
+The AirTouch 5 integration allows you to control ducted air conditioning systems that are using the [AirTouch 5](https://www.airtouch.net.au/smart-air-conditioning/airtouch-5/) controller.
+
+{% include integrations/config_flow.md %}
+
+## Entities
+
+### Climate
+
+The integration will create a climate entity for each AC unit and each zone.
diff --git a/source/_integrations/airzone_cloud.markdown b/source/_integrations/airzone_cloud.markdown
index f0ea4164fb5e..7cea8a724fe1 100644
--- a/source/_integrations/airzone_cloud.markdown
+++ b/source/_integrations/airzone_cloud.markdown
@@ -4,15 +4,20 @@ description: Instructions on how to integrate Airzone Cloud within Home Assistan
ha_release: 2023.6
ha_category:
- Binary sensor
+ - Climate
+ - Select
- Sensor
-ha_iot_class: Cloud Polling
+ - Water heater
+ha_iot_class: Cloud Push
ha_config_flow: true
ha_domain: airzone_cloud
ha_platforms:
- binary_sensor
- climate
- diagnostics
+ - select
- sensor
+ - water_heater
ha_codeowners:
- '@Noltari'
ha_integration_type: integration
@@ -57,6 +62,7 @@ For each Airzone zone (thermostat), the following *binary sensors* are created:
| Condition | Description |
| :------------------ | :------------------------------------------------------ |
+| air_quality_active | Indicates that the air quality control is running. |
| problems | Indicates that the current zone has errors or warnings. |
## Climate
@@ -69,6 +75,14 @@ For each Airzone zone (thermostat), a climate entity is created.
*Child zones* can only enable/disable the current HVAC mode selected on the corresponding *parent zone*. Attempting to change the HVAC mode on a *child zone* will result in a Home Assistant error.
+## Select
+
+For each Airzone zone (thermostat), the following *selects* are created:
+
+| Condition | Description |
+| :------------------ | :-------------------------------------------------- |
+| air_quality | Selects the desired Air Quality working mode. |
+
## Sensors
For each Airzone Aidoo (HVAC Wi-Fi controller), the following *sensors* are created:
@@ -79,13 +93,21 @@ For each Airzone Aidoo (HVAC Wi-Fi controller), the following *sensors* are crea
For each Airzone zone (thermostat), the following *sensors* are created:
-| Condition | Description |
-| :------------------ | :-------------------------------------------------- |
-| humidity | Measures the relative humidity in the current zone. |
-| temperature | Measures the temperature in the current zone. |
+| Condition | Description |
+| :------------------ | :-------------------------------------------------------- |
+| air_quality_index | Indicates the Air Quality Index in the current zone. |
+| humidity | Measures the relative humidity in the current zone. |
+| pm1 | Concentration of particles with a diameter of less than 1 µm. |
+| pm2_5 | Concentration of particles with a diameter of less than 2.5 µm. |
+| pm10 | Concentration of particles with a diameter of less than 10 µm. |
+| temperature | Measures the temperature in the current zone. |
For each Airzone WebServer (HVAC Wi-Fi controller), the following *sensors* are created:
| Condition | Description |
| :------------------ | :------------------------------------------------- |
| rssi | Wi-Fi RSSI. |
+
+## Water heater
+
+For each Airzone device, a *water heater entity* is created if supported.
diff --git a/source/_integrations/aladdin_connect.markdown b/source/_integrations/aladdin_connect.markdown
index ce995ea79ff5..e557c2f6380d 100644
--- a/source/_integrations/aladdin_connect.markdown
+++ b/source/_integrations/aladdin_connect.markdown
@@ -14,6 +14,7 @@ ha_integration_type: integration
ha_codeowners:
- '@mkmer'
ha_config_flow: true
+ha_quality_scale: platinum
---
The Aladdin Connect integration lets you control Genie Aladdin Connect garage doors through Home Assistant.
diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown
index 2cf9458ed65b..9be9fda1f832 100644
--- a/source/_integrations/alarm_control_panel.mqtt.markdown
+++ b/source/_integrations/alarm_control_panel.mqtt.markdown
@@ -27,8 +27,6 @@ The integration can control your Alarm Panel by publishing to the `command_topic
## Configuration
-
-
To enable this platform, add the following lines to your `configuration.yaml`:
```yaml
@@ -137,6 +135,10 @@ device:
description: "The name of the device."
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -163,7 +165,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
diff --git a/source/_integrations/alarm_control_panel.template.markdown b/source/_integrations/alarm_control_panel.template.markdown
index 431204ddb7b4..6994c03fdf08 100644
--- a/source/_integrations/alarm_control_panel.template.markdown
+++ b/source/_integrations/alarm_control_panel.template.markdown
@@ -9,7 +9,7 @@ ha_qa_scale: internal
ha_domain: template
---
-The `template` integrations creates alarm control panels that combine integrations or adds pre-processing logic to actions.
+The `template` integrations creates alarm control panels that combine integrations or adds preprocessing logic to actions.
There are several powerful ways to use this integration, including grouping existing integrations into a simpler integrations, or adding logic that Home Assistant will execute when accessed.
diff --git a/source/_integrations/alert.markdown b/source/_integrations/alert.markdown
index 41c8821fc211..6310740e9563 100644
--- a/source/_integrations/alert.markdown
+++ b/source/_integrations/alert.markdown
@@ -32,7 +32,7 @@ State | Description
### Basic example
The `alert` integration makes use of any of the `notification` integrations. To
-setup the `alert` integration, first, you must set up a [notification integration](/integrations/#notifications).
+setup the `alert` integration, first, you must set up a [notification integration](/integrations/notify).
Then, add the following to your configuration file:
```yaml
@@ -78,7 +78,7 @@ repeat:
required: true
type: [integer, list]
can_acknowledge:
- description: Allows the alert to be unacknowledgeable.
+ description: Control whether the notification can be acknowledged; set to `false` if the alert should not be acknowledgeable.
required: false
type: boolean
default: true
diff --git a/source/_integrations/alexa.markdown b/source/_integrations/alexa.markdown
index 4759d581e5b8..fd6a60df095e 100644
--- a/source/_integrations/alexa.markdown
+++ b/source/_integrations/alexa.markdown
@@ -12,6 +12,8 @@ ha_codeowners:
- '@jbouwh'
ha_domain: alexa
ha_integration_type: integration
+ha_platforms:
+ - diagnostics
---
## Automatic setup via Home Assistant Cloud
diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown
index 850b6e6fce9f..39bd72964a9e 100644
--- a/source/_integrations/alexa.smart_home.markdown
+++ b/source/_integrations/alexa.smart_home.markdown
@@ -94,19 +94,18 @@ Steps to Integrate an Amazon Alexa Smart Home Skill with Home Assistant:
- [Timer](#timer)
- [Vacuum](#vacuum)
- [Valve](#valve)
- - [Open/Close](#openclose)
- - [Set Valve Position](#set-valve-position)
- - [Stop the Valve](#stop-the-valve)
+ - [Open/close](#openclose)
+ - [Set valve position](#set-valve-position)
+ - [Stop the valve](#stop-the-valve)
- [Water heater](#water-heater)
- [Set target temperature](#set-target-temperature)
- [Operation Mode](#operation-mode)
-- [Alexa Web-Based App](#alexa-web-based-app)
- [Troubleshooting](#troubleshooting)
- [Debugging](#debugging)
## Requirements
-- The Alexa Smart Home API requires your Home Assistant instance to be accessible from the internet via HTTPS on port 443 using an SSL/TLS certificate. A self-signed certificate will work, but a certificate signed by [an Amazon approved certificate authority](https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport) is recommended. Read more on [our blog](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) about how to set up encryption for Home Assistant. When running Home Assistant, using the [Duck DNS](/addons/duckdns/) add-on is the easiest method.
+- The Alexa Smart Home API requires your Home Assistant instance to be accessible from the internet via HTTPS on port 443 using an SSL/TLS certificate. A self-signed certificate will not work, but a public trusted certificate or a certificate signed by [an Amazon approved certificate authority](https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport) should work. Read more on [our blog](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) about how to set up encryption for Home Assistant. When running Home Assistant, using the [Duck DNS](/addons/duckdns/) add-on is the easiest method.
- An Amazon Developer Account. Sign up [here](https://developer.amazon.com).
- An [Amazon Web Services (AWS)](https://aws.amazon.com/free/) account is required to host the Lambda function for your Alexa Smart Home Skill. [AWS Lambda](https://aws.amazon.com/lambda/pricing/) is free to use for up to 1-million requests and 1GB outbound data transfer per month.
@@ -241,9 +240,9 @@ Alexa needs to link your Amazon account to your Home Assistant account. Therefor
- `Authorization URI`: `https://[YOUR HOME ASSISTANT URL]/auth/authorize`
- `Access Token URI`: `https://[YOUR HOME ASSISTANT URL]/auth/token`
- It is also possible to use a different port by appending `:1443` or a similar port number, make sure your firewall is forwarding the correct port:
- - `Authorization URI`: `https://[YOUR HOME ASSISTANT URL]:1443/auth/authorize`
- - `Access Token URI`: `https://[YOUR HOME ASSISTANT URL]:1433/auth/token`
+ Although it is possible to assign a different port, Alexa requires you use port 443, so make sure your firewall/proxy is forwarding via port 443.
+
+ Read [more from the Alexa developer documentation](https://developer.amazon.com/en-US/docs/alexa/account-linking/requirements-account-linking.html) about requirements for account linking.
Note: you must use a valid/trusted SSL certificate for account linking to work. Self signed certificates will not work, but you can use a free Let's Encrypt certificate.
@@ -266,9 +265,8 @@ Alexa needs to link your Amazon account to your Home Assistant account. Therefor
- Click `Save` button in the top right corner.
-- Next, you will use the Alexa Mobile App or the [Alexa web-based app](#alexa-web-based-app) to link your account.
+- Next, you will use the Alexa Mobile App to link your account.
- In the Alexa app, navigate to `More` -> `Skills & Games` -> `Your Skills` -> `Dev`
- - Or In the Alexa web app, navigate to `Skills` -> `Your Skills` in the top right -> `Dev Skill`
- Click the Smart Home skill you just created.
- Click `Enable to use`.
- A new window will open to direct you to your Home Assistant's login screen.
@@ -464,79 +462,7 @@ See [Alexa Display Categories][alexa-display-categories] for a complete list
Home Assistant supports the following integrations through Alexa using a Smart Home Skill. For Home Assistant Cloud Users, documentation can be found [here](https://www.nabucasa.com/config/amazon_alexa/).
-The following platforms are currently supported:
-
-- [Requirements](#requirements)
-- [Create an Amazon Alexa Smart Home Skill](#create-an-amazon-alexa-smart-home-skill)
-- [Create an AWS Lambda Function](#create-an-aws-lambda-function)
- - [Create an IAM Role for Lambda](#create-an-iam-role-for-lambda)
- - [Add Code to the Lambda Function](#add-code-to-the-lambda-function)
- - [Test the Lambda Function](#test-the-lambda-function)
-- [Configure the Smart Home Service Endpoint](#configure-the-smart-home-service-endpoint)
-- [Account linking](#account-linking)
-- [Alexa Smart Home Integration Configuration](#alexa-smart-home-integration-configuration)
-- [Supported platforms](#supported-platforms)
- - [Alarm control panel](#alarm-control-panel)
- - [Arming](#arming)
- - [Disarming](#disarming)
- - [Alert, Automation, Group](#alert-automation-group)
- - [Binary sensor](#binary-sensor)
- - [Routines](#routines)
- - [Button, Input Button](#button-input-button)
- - [Routines](#routines-1)
- - [Doorbell announcement with binary\_sensor](#doorbell-announcement-with-binary_sensor)
- - [Presence Detection with Binary Sensor](#presence-detection-with-binary-sensor)
- - [Camera](#camera)
- - [Climate](#climate)
- - [Set Thermostat Temperature](#set-thermostat-temperature)
- - [Thermostat Mode](#thermostat-mode)
- - [Cover](#cover)
- - [Open/Close/Raise/Lower](#opencloseraiselower)
- - [Set Cover Position](#set-cover-position)
- - [Set Cover Tilt](#set-cover-tilt)
- - [Garage doors](#garage-doors)
- - [Event entities](#event-entities)
- - [Doorbell events](#doorbell-events)
- - [Fan](#fan)
- - [Fan speed](#fan-speed)
- - [Fan Preset Mode](#fan-preset-mode)
- - [Fan Direction](#fan-direction)
- - [Fan Oscillation](#fan-oscillation)
- - [Humidifier](#humidifier)
- - [Humidifier target humidity](#humidifier-target-humidity)
- - [Humidifier Mode](#humidifier-mode)
- - [Image Processing](#image-processing)
- - [Presence Detection Notification](#presence-detection-notification)
- - [Input Number and Number](#input-number-and-number)
- - [Light](#light)
- - [Brightness](#brightness)
- - [Color Temperature](#color-temperature)
- - [Color](#color)
- - [Lock](#lock)
- - [Unlocking](#unlocking)
- - [Media Player](#media-player)
- - [Change Channel](#change-channel)
- - [Speaker Volume](#speaker-volume)
- - [Equalizer Mode](#equalizer-mode)
- - [Inputs](#inputs)
- - [Playback State](#playback-state)
- - [Scene](#scene)
- - [Script](#script)
- - [Sensor](#sensor)
- - [Switch, Input Boolean](#switch-input-boolean)
- - [Routines](#routines-2)
- - [Timer](#timer)
- - [Vacuum](#vacuum)
- - [Valve](#valve)
- - [Open/Close](#openclose)
- - [Set Valve Position](#set-valve-position)
- - [Stop the Valve](#stop-the-valve)
- - [Water heater](#water-heater)
- - [Set target temperature](#set-target-temperature)
- - [Operation Mode](#operation-mode)
-- [Alexa Web-Based App](#alexa-web-based-app)
-- [Troubleshooting](#troubleshooting)
-- [Debugging](#debugging)
+The following paragraphs explain the features of the platforms that are currently supported.
### Alarm control panel
@@ -1044,7 +970,6 @@ Only temperature sensors are configured at this time.
- _"Alexa, what's the temperature in the kitchen?"_
- _"Alexa, what's the upstairs temperature?"_
-- _"Alexa, what's the temperature of my ex-girlfriend's heart?"_
### Switch, Input Boolean
@@ -1083,7 +1008,7 @@ Pause and Restart Timer entities in Home Assistant.
- _"Alexa, restart the microwave."_
-To avoid issues with Alexa built in timer functionality. The timer entity can not include the word "timer" in the friendly name.
+To avoid issues with Alexa's built-in timer functionality, the timer entity should not include the word "timer" in its friendly name.
### Vacuum
@@ -1151,21 +1076,6 @@ If the water heater entity supports on/off, use _"turn on"_ and _"turn off"_ utt
- _"Alexa, turn on the [mode utterance]."_
- _"Alexa, turn off the [entity name]."_
-## Alexa Web-Based App
-
-The following is a list of regions and the corresponding URL for the web-based Alexa app:
-
-- United States: `https://alexa.amazon.com`
-- United Kingdom: `https://alexa.amazon.co.uk`
-- Germany: `https://alexa.amazon.de`
-- Japan: `https://alexa.amazon.co.jp`
-- Canada: `https://alexa.amazon.ca`
-- Australia: `https://alexa.amazon.com.au`
-- India: `https://alexa.amazon.in`
-- Spain: `https://alexa.amazon.es`
-- France: `https://alexa.amazon.fr`
-- Italy: `https://alexa.amazon.it`
-
## Troubleshooting
### Binary Sensor not available in Routine Trigger
diff --git a/source/_integrations/alpha_vantage.markdown b/source/_integrations/alpha_vantage.markdown
index 5f837f1c9ecc..8aafb68ec00b 100644
--- a/source/_integrations/alpha_vantage.markdown
+++ b/source/_integrations/alpha_vantage.markdown
@@ -75,7 +75,9 @@ foreign_exchange:
## API information
-Alpha Vantage offers two tiers of the API key, one free and one paid for. If you are using the free version you will be limited to five queries per minute. This means that you'll likely only be able to have one or two ticker entries. The paid version starts at thirty queries per minute increasing ticker quantity quite a bit.
+Alpha Vantage offers two tiers of the API key, one free and one paid for. If you are using the free version, you will be limited to twenty-five queries per day. The sensor polls every 5 minutes, so you will only get data for the first two hours per day.
+
+The paid version starts at 75 queries per minute, increasing ticker quantity quite a bit.
## Examples
diff --git a/source/_integrations/ambiclimate.markdown b/source/_integrations/ambiclimate.markdown
deleted file mode 100644
index be06f490186a..000000000000
--- a/source/_integrations/ambiclimate.markdown
+++ /dev/null
@@ -1,74 +0,0 @@
----
-title: Ambiclimate
-description: Instructions on how to integrate Ambiclimate A/C controller into Home Assistant.
-ha_category:
- - Climate
-ha_release: 0.93
-ha_iot_class: Cloud Polling
-ha_config_flow: true
-ha_codeowners:
- - '@danielhiversen'
-ha_domain: ambiclimate
-ha_platforms:
- - climate
-ha_integration_type: integration
----
-
-Integrates [Ambiclimate](https://ambiclimate.com/) Air Conditioning controller into Home Assistant.
-
-You must create an application [here](https://api.ambiclimate.com/clients) to obtain a `client_id` and `client_secret`.
-The `callback url` should be configured as your Home Assistant external URL + `/api/ambiclimate`, e.g., `https://example.com/api/ambiclimate`.
-
-To enable this platform, add the following lines to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-ambiclimate:
- client_id: CLIENT_ID
- client_secret: CLIENT_SECRET
-```
-
-Restart Home Assistant. Then, go to the frontend and authorize Ambiclimate.
-
-{% configuration %}
-client_id:
- description: Your Ambiclimate API client ID.
- required: true
- type: string
-client_secret:
- description: Your Ambiclimate API client secret.
- required: true
- type: string
-{% endconfiguration %}
-
-Note that you have to select manual mode from the Ambiclimate app to be able to control the A/C from Home Assistant.
-
-{% include integrations/config_flow.md %}
-
-## Integration {% term services %}
-
-Enable comfort mode on your AC:
-
-`climate.set_comfort_mode`
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `Name` | yes | String with device name.
-
-Send feedback for comfort mode:
-
-`climate.send_comfort_feedback`
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `Name` | yes | String with device name.
-| `value` | yes | Send any of the following comfort values: too_hot, too_warm, bit_warm, comfortable, bit_cold, too_cold, freezing
-
-Enable temperature mode on your AC:
-
-`climate.set_temperature_mode`
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `Name` | yes | String with device name.
-| `value` | yes | Target value in celsius
diff --git a/source/_integrations/ambient_network.markdown b/source/_integrations/ambient_network.markdown
new file mode 100644
index 000000000000..5e4cc442749a
--- /dev/null
+++ b/source/_integrations/ambient_network.markdown
@@ -0,0 +1,27 @@
+---
+title: Ambient Weather Network
+description: How to integrate Ambient Weather Network station within Home Assistant.
+ha_category:
+ - Weather
+ha_release: 2024.5
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@thomaskistler'
+ha_domain: ambient_network
+ha_platforms:
+ - sensor
+ha_integration_type: service
+---
+
+The **Ambient Weather Network** {% term integration %} retrieves local weather station information
+via the [Ambient Weather Network](https://ambientweather.net).
+
+Similar to the [Ambient Weather Station](https://www.home-assistant.io/integrations/ambient_station/)
+integration, this integration gathers sensor data from individual weather stations.
+However, in contrast to the [Ambient Weather Station](https://www.home-assistant.io/integrations/ambient_station/)
+integration, which exclusively enables owners to fetch data solely from their owned stations, this
+integration directly pulls public data from without requiring an API key,
+albeit with a reduced dataset (for example, excluding indoor sensors).
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/amp_motorization.markdown b/source/_integrations/amp_motorization.markdown
index 5035a0ffe62c..a57b076d08b9 100644
--- a/source/_integrations/amp_motorization.markdown
+++ b/source/_integrations/amp_motorization.markdown
@@ -1,12 +1,12 @@
---
title: AMP Motorization
-description: Connect and control your AMP Motorization devices using the Motion Blinds integration
+description: Connect and control your AMP Motorization devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: amp_motorization
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/analytics.markdown b/source/_integrations/analytics.markdown
index af84d7ec1cf0..58e4a1fcc920 100644
--- a/source/_integrations/analytics.markdown
+++ b/source/_integrations/analytics.markdown
@@ -178,7 +178,7 @@ All data is received and processed by the Home Assistant Analytics Receiver ([so
When your installation sends a payload, that payload includes a unique identifier. This identifier is used to make sure that your installation is only counted once.
-Your data is securely stored in [CloudFlare's Key-Value store](https://www.cloudflare.com/products/workers-kv/). It will be stored for a maximum of 60 days since the last update. Only aggregated data is made publicly available.
+Your data is securely stored in [Cloudflare's Key-Value store](https://www.cloudflare.com/products/workers-kv/). It will be stored for a maximum of 60 days since the last update. Only aggregated data is made publicly available.
This is an example of how the information is stored:
{% configuration_basic %}
diff --git a/source/_integrations/analytics_insights.markdown b/source/_integrations/analytics_insights.markdown
new file mode 100644
index 000000000000..b00fc6549b37
--- /dev/null
+++ b/source/_integrations/analytics_insights.markdown
@@ -0,0 +1,23 @@
+---
+title: Home Assistant Analytics Insights
+description: Instructions on how to integrate Home Assistant Analytics Insights within Home Assistant.
+ha_category:
+ - Sensor
+ha_release: '2024.2'
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@joostlek'
+ha_domain: analytics_insights
+ha_platforms:
+ - sensor
+ha_integration_type: service
+---
+
+The **Analytics Insights** {% term integration %} allows you to get integration usage statistics into Home Assistant.
+The data comes from [Home Assistant Analytics](https://analytics.home-assistant.io/).
+For more information about the component that collects analytics, checkout [Analytics](/integrations/analytics).
+
+For a custom integration to show up, it should have its [brands](https://github.com/home-assistant/brands) merged.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/androidtv_remote.markdown b/source/_integrations/androidtv_remote.markdown
index b96bc17d90b2..6431fb0f0a47 100644
--- a/source/_integrations/androidtv_remote.markdown
+++ b/source/_integrations/androidtv_remote.markdown
@@ -143,6 +143,7 @@ Navigation:
- BUTTON_B
- BUTTON_X
- BUTTON_Y
+- BACK
Volume Control:
- VOLUME_DOWN
@@ -208,6 +209,7 @@ Other:
- SETTINGS
- SEARCH
- ASSIST
+- POWER
{% enddetails %}
@@ -534,6 +536,7 @@ cards:
- If you cannot use the Google TV mobile app or the Google Home mobile app to send commands to the device, you cannot send commands with this integration either.
- Commands don't work on Netflix. They don't work from the Google TV mobile app or the Google Home mobile app either.
- Some devices, like Xiaomi, become unavailable after they are turned off and can't be turned on with this integration.
+- Some devices, like TCL, become unavailable after they are turned off, unless you activate the **Screenless service**. To activate it, go to **Settings** > **System** > **Power and energy** > **Screenless service**, and activate it.
- Some devices experience disconnects every 15 seconds. This is typically resolved by rebooting the Android TV device after the initial setup of the integration.
-- If you are not able to connect to the Android TV device, or are asked to pair it again and again, try force-stopping the Android TV Remote Service and clearing its storage. On the Android TV device, go to **settings** > **Apps** > **Show system apps**. Then, select **Android TV Remote Service** > **Storage** > **Clear storage**. You will have to pair again.
-- Some onscreen keyboards enabled by TV manufacturers do not support concurrent virtual and onscreen keyboard use. This presents whenever a text field is selected, such as "search" where a constant **use the keyboard on your mobile device** will show, preventing you from opening the onscreen keyboard to type. This can be overcome by either disabling your 3rd party keyboard and using the default Gboard keyboard or by unselecting **Enable IME** in the **Configure** page of the integration.
+- If you are not able to connect to the Android TV device, or are asked to pair it again and again, try force-stopping the Android TV Remote Service and clearing its storage. On the Android TV device, go to **Settings** > **Apps** > **Show system apps**. Then, select **Android TV Remote Service** > **Storage** > **Clear storage**. You will have to pair again.
+- Some onscreen keyboards enabled by TV manufacturers do not support concurrent virtual and onscreen keyboard use. This presents whenever a text field is selected, such as "search" where a constant **use the keyboard on your mobile device** will show, preventing you from opening the onscreen keyboard to type. This can be overcome by either disabling your 3rd party keyboard and using the default Gboard keyboard or by deselecting **Enable IME** in the **Configure** page of the integration.
diff --git a/source/_integrations/anthemav.markdown b/source/_integrations/anthemav.markdown
index 6d08d0b0515d..59b40e31f26a 100644
--- a/source/_integrations/anthemav.markdown
+++ b/source/_integrations/anthemav.markdown
@@ -52,7 +52,7 @@ port:
## Notes and limitations
- The tuner is currently unsupported as are the `media_player` play, pause, prev, and next controls.
-- Enabling this platform will set and enforce **Standby IP Control On** on your Anthem device. You almost certainly want this. If you disable it on the device, it will just get re-enabled by Home Assistant.
+- Enabling this platform will set and enforce **Standby IP Control On** within your Anthem device. You almost certainly want this. If you disable it on the device, it will just get re-enabled by Home Assistant.
diff --git a/source/_integrations/aosmith.markdown b/source/_integrations/aosmith.markdown
index 180689742982..1ca9c57b7015 100644
--- a/source/_integrations/aosmith.markdown
+++ b/source/_integrations/aosmith.markdown
@@ -10,6 +10,8 @@ ha_config_flow: true
ha_codeowners:
- '@bdr99'
ha_platforms:
+ - diagnostics
+ - sensor
- water_heater
ha_integration_type: integration
---
@@ -20,11 +22,30 @@ Before using this integration, your water heater must be connected to a Wi-Fi ne
## Known compatible models
-- [HPTS-50](https://www.hotwater.com/products/HPTS-50-SG200.html)
-- [HPTS-66](https://www.hotwater.com/products/HPTS-66-SG200.html)
-- [HPTS-80](https://www.hotwater.com/products/HPTS-80-SG200.html)
+- EE9-40R55DV
+- EE9-40H55DV
+- EE9-50R55DV
+- EE9-50H55DV
+- EE12-50R55DVF
+- EE12-50H55DVF
+- EE12-55H55DVF
+- HPS10-50H45DV
+- HPS10-66H45DV
+- HPS10-80H45DV
+- HPSX-50-DHPT
+- HPSX-50-DHPT 2
+- HPSX-66-DHPT
+- HPSX-66-DHPT 2
+- HPSX-80-DHPT
+- HPSX-80-DHPT 2
+- HPTS-50
+- HPTS-66
+- HPTS-80
+- HPV10-50H01DV
+- HPV10-66H01DV
+- HPV10-80H01DV
-Water heaters that can be controlled using the A. O. Smith mobile app should be compatible with this integration. If your water heater is not detected by the integration, but it can be controlled using the mobile app, please [open an issue on GitHub](https://github.com/home-assistant/core/issues/new?template=bug_report.yml&integration_name=A.%20O.%20Smith&integration_link=https%3A%2F%2Fwww.home-assistant.io%2Fintegrations%2Faosmith) so that support can be added. Similarly, if your water heater is working with this integration, but its model number is not listed here, please [open an documentation issue](https://github.com/home-assistant/home-assistant.io/issues/new?template=feedback.yml&url=https%3A%2F%2Fwww.home-assistant.io%2Fintegrations%2Faosmith) so it can be added to the list.
+Water heaters that can be controlled using the A. O. Smith mobile app should be compatible with this integration. If your water heater is not detected by the integration, but it can be controlled using the mobile app, please [open an issue on GitHub](https://github.com/home-assistant/core/issues/new?template=bug_report.yml&integration_name=A.%20O.%20Smith&integration_link=https%3A%2F%2Fwww.home-assistant.io%2Fintegrations%2Faosmith) so that support can be added. Similarly, if your water heater is working with this integration, but its model number is not listed here, please [open a documentation issue](https://github.com/home-assistant/home-assistant.io/issues/new?template=feedback.yml&url=https%3A%2F%2Fwww.home-assistant.io%2Fintegrations%2Faosmith) so it can be added to the list.
{% include integrations/config_flow.md %}
@@ -37,6 +58,17 @@ The water heater entity offers the following capabilities:
- Change operation mode
- Enable/disable away mode (will set the water heater to "vacation" mode)
+#### Operation modes
+
+This table shows the supported operation modes. The available modes will depend on your specific water heater model.
+
+| Mode displayed in A. O. Smith app | Mode displayed in Home Assistant | Mode name for `water_heater.set_operation_mode` service |
+| ---------------------------------- | -------------------------------- | ------------------------------------------------------- |
+| Electric/Standard | Electric | `electric` |
+| Hybrid | Eco | `eco` |
+| Heat Pump | Heat Pump | `heat_pump` |
+| Vacation | N/A - use away mode | N/A - use `water_heater.set_away_mode` |
+
### Sensor
The following sensor entities are available:
@@ -45,4 +77,4 @@ The following sensor entities are available:
## Disclaimer
-This integration is not affiliated with or endorsed by A. O. Smith.
\ No newline at end of file
+This integration is not affiliated with or endorsed by A. O. Smith.
diff --git a/source/_integrations/apcupsd.markdown b/source/_integrations/apcupsd.markdown
index 722ff93b33aa..409a7ec2a6d9 100644
--- a/source/_integrations/apcupsd.markdown
+++ b/source/_integrations/apcupsd.markdown
@@ -13,6 +13,7 @@ ha_codeowners:
- '@yuxincs'
ha_platforms:
- binary_sensor
+ - diagnostics
- sensor
ha_integration_type: integration
ha_quality_scale: silver
diff --git a/source/_integrations/appalachianpower.markdown b/source/_integrations/appalachianpower.markdown
index 4a8819383390..f42024c5c3ee 100644
--- a/source/_integrations/appalachianpower.markdown
+++ b/source/_integrations/appalachianpower.markdown
@@ -4,7 +4,7 @@ description: Get energy usage from Appalachian Power using the Opower integratio
ha_category:
- Energy
- Sensor
-ha_release: 2024.1
+ha_release: 2023.8
ha_domain: appalachianpower
ha_integration_type: virtual
ha_supporting_domain: opower
diff --git a/source/_integrations/apple_tv.markdown b/source/_integrations/apple_tv.markdown
index 2d8a9fc65c7d..406a388f3345 100644
--- a/source/_integrations/apple_tv.markdown
+++ b/source/_integrations/apple_tv.markdown
@@ -91,7 +91,6 @@ The following commands are currently available:
- `wakeup`
- `suspend`
- `home`
-- `home_hold`
- `top_menu`
- `menu`
- `select`
@@ -112,12 +111,13 @@ The following commands are currently available:
### Service `send_command`
-| Service data attribute | Optional | Description |
-| ------------------------- | -------- | ---------------------------------------------------------------------------------------------- |
-| `entity_id` | no | `entity_id` of the Apple TV |
-| `command` | no | Command, or list of commands to be sent |
-| `num_repeats` | yes | Number of times to repeat the commands |
-| `delay_secs` | yes | Interval in seconds between one send and another This is a `float` value e.g. 1, 1.2 etc. |
+| Service data attribute | Optional | Description |
+| ------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `entity_id` | no | `entity_id` of the Apple TV |
+| `command` | no | Command, or list of commands to be sent |
+| `num_repeats` | yes | Number of times to repeat the commands |
+| `delay_secs` | yes | Interval in seconds between one send and another This is a `float` value e.g. 1, 1.2 etc. |
+| `hold_secs` | yes | Number of seconds to hold the button. This is a `float` value but please use 0 for not hold and 1 for holding the button |
### Examples
@@ -140,20 +140,27 @@ lounge_appletv_netflix:
- select
```
-Script using the `home_hold` command to send your Apple TV to sleep and turn off
+Script using the quick action menu to send your Apple TV to sleep and turn off
the Media Player:
```yaml
apple_tv_sleep:
alias: "Make the Apple TV sleep"
sequence:
+ - service: remote.send_command
+ target:
+ entity_id: remote.lounge_appletv
+ data:
+ hold_secs: 1
+ delay_secs: 1
+ command:
+ - home
- service: remote.send_command
target:
entity_id: remote.lounge_appletv
data:
delay_secs: 1
command:
- - home_hold
- select
- service: media_player.turn_off
target:
@@ -178,7 +185,7 @@ data:
### My Apple TV does not turn on/off when I press on/off in the frontend
That is correct; it only toggles the power state in Home Assistant. See the
-example above to use the `home_hold` command. This can be used on Apple TVs
+example above to use the quick action menu. This can be used on Apple TVs
running tvOS 14.0 or later.
### Is it possible to see if a device is on without interacting with it
diff --git a/source/_integrations/application_credentials.markdown b/source/_integrations/application_credentials.markdown
index 83aff2d5e50c..0e50f4cbf0e1 100644
--- a/source/_integrations/application_credentials.markdown
+++ b/source/_integrations/application_credentials.markdown
@@ -1,5 +1,5 @@
---
-title: Application Credentials
+title: Application credentials
description: Allows users to link accounts with integrations that support OAuth2
ha_release: 2022.6
ha_domain: application_credentials
@@ -10,7 +10,7 @@ ha_codeowners:
ha_integration_type: system
---
-The Application Credentials integration is used by integrations that use OAuth2 to link your account to Home Assistant. The most common and preferred approach is using account linking with Home Assistant Cloud, however not all cloud providers support that and integrations can use Application Credentials instead. Additionally, users may use Application Credentials if preferred instead of Home Assistant Cloud Account Linking.
+The **Application credentials** {% term integration %} is used by integrations that use OAuth2 to link your account to Home Assistant. The most common and preferred approach is using account linking with Home Assistant Cloud, however not all cloud providers support that and integrations can use Application Credentials instead. Additionally, users may use Application Credentials if preferred instead of Home Assistant Cloud Account Linking.
## Automatic setup
diff --git a/source/_integrations/apprise.markdown b/source/_integrations/apprise.markdown
index dcfce1349995..d35bdc34c1b2 100644
--- a/source/_integrations/apprise.markdown
+++ b/source/_integrations/apprise.markdown
@@ -27,7 +27,7 @@ notify:
url: YOUR_APPRISE_URLS
```
-You can also pre-define your own configuration files while storing them either remotely or locally. Simply just use the `config` option.
+You can also predefine your own configuration files while storing them either remotely or locally. Simply just use the `config` option.
```yaml
# Example configuration.yaml entry using externally located Apprise
diff --git a/source/_integrations/aprilaire.markdown b/source/_integrations/aprilaire.markdown
new file mode 100644
index 000000000000..0b3d47c4233c
--- /dev/null
+++ b/source/_integrations/aprilaire.markdown
@@ -0,0 +1,31 @@
+---
+title: Aprilaire
+description: Instructions on how to integrate Aprilaire devices into Home Assistant.
+ha_category:
+ - Climate
+ha_iot_class: Local Push
+ha_release: 2024.3
+ha_domain: aprilaire
+ha_codeowners:
+ - '@chamberlain2007'
+ha_config_flow: true
+ha_platforms:
+ - climate
+ha_integration_type: device
+---
+
+The Aprilaire integration allows you to control an Aprilaire thermostat.
+
+## Supported Models
+
+This integration supports Aprilaire [8800-series Home Automation Wi-Fi Thermostats](https://www.aprilaire.com/whole-house-products/thermostats/home-automation) and [6000-series Wi-Fi Zone Control devices](https://www.aprilaire.com/whole-house-products/zone-control) which support setting the thermostat to automation mode. It is known that there are some models which are marketed as home automation capable that do not support automation mode, and are therefore not supported.
+
+## Prerequisites
+
+In order to connect to the thermostat, you will need to enable automation mode. This involves going into the Contractor Menu on your thermostat and changing the Connection Type to Automation. As the specific instructions can vary per model, consult the manual for your specific model.
+
+{% include integrations/config_flow.md %}
+
+## Caution regarding device limitations
+
+Due to limitations of the thermostats, only one automation connection to a device is permitted at one time (the Aprilaire app is not included in this limitation as it uses a separate protocol). Attempting to connect multiple times to the same thermostat simultaneously can cause various issues, including the thermostat becoming unresponsive and shutting down. If this does occur, power cycling the thermostat should restore functionality.
diff --git a/source/_integrations/arris_tg2492lg.markdown b/source/_integrations/arris_tg2492lg.markdown
index d391a3433b9a..2ec082a22a7f 100644
--- a/source/_integrations/arris_tg2492lg.markdown
+++ b/source/_integrations/arris_tg2492lg.markdown
@@ -10,7 +10,7 @@ ha_codeowners:
ha_iot_class: Local Polling
ha_platforms:
- device_tracker
-ha_integration_type: integration
+ha_integration_type: hub
---
This platform allows you to detect presence by looking at connected devices to an Arris TG2492LG router.
diff --git a/source/_integrations/aruba.markdown b/source/_integrations/aruba.markdown
index 0778e577d8a4..257626a69f66 100644
--- a/source/_integrations/aruba.markdown
+++ b/source/_integrations/aruba.markdown
@@ -16,6 +16,10 @@ This platform allows you to detect presence by looking at connected devices to a
Supported devices (tested):
- Aruba AP-105
+- Aruba AP-205
+- Aruba AP-505
+- Aruba AP-515
+- Aruba IAP-315
- Aruba IAP-335
- Aruba Instant IAP-275
diff --git a/source/_integrations/arve.markdown b/source/_integrations/arve.markdown
new file mode 100644
index 000000000000..d4d075086e3b
--- /dev/null
+++ b/source/_integrations/arve.markdown
@@ -0,0 +1,54 @@
+---
+title: Arve
+description: Instructions on how to integrate Arve into Home Assistant
+ha_category:
+ - Environment
+ - Health
+ - Sensor
+ha_release: "2024.5"
+ha_iot_class: Cloud Polling
+ha_codeowners:
+ - "@ikalnyi"
+ha_domain: arve
+ha_platforms:
+ - sensor
+ha_integration_type: hub
+---
+
+The **Arve** {% term integration %} provides the ability to monitor real-life air quality data, as measured by your [Arve](https://www.arveair.com) device.
+
+{% include integrations/config_flow.md %}
+
+To create an integration for an Arve device, you need to fill in two required fields.
+Those are _Home Assistant access token_ and _Arve customer token_.
+_Home Assistant access token_ and _Arve customer token_ can be obtained by the user on the [Arve web platform](https://dashboard.arveair.com).
+
+## Measurement entities
+
+At the moment, an Arve device has the following measurement entities:
+
+| Entity name | Unit of measurement |
+| ----------- | ------------------- |
+| AQI | |
+| CO2 | ppm |
+| Humidity | % |
+| PM10 | µg/m³ |
+| PM25 | µg/m³ |
+| Temperature | °C |
+| TVOC | |
+
+Here:
+
+AQI - air quality index;
+
+CO2 - co2 measurement in parts per million;
+
+Humidity - humidity percentage;
+
+PM10 - concentration of particulates with a diameter less than 10 µm;
+
+PM25 - concentration of particulates with a diameter less than 2.5 µm;
+
+Temperature - temperature measurement in degrees Celsius;
+
+TVOC - Total Volatile Organic Compounds index.
diff --git a/source/_integrations/asterisk_cdr.markdown b/source/_integrations/asterisk_cdr.markdown
deleted file mode 100644
index 36ebb23f87a2..000000000000
--- a/source/_integrations/asterisk_cdr.markdown
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Asterisk Call Detail Records
-description: Instructions on how to integrate an Asterisk CDR within Home Assistant.
-ha_category:
- - Mailbox
-ha_iot_class: Local Polling
-ha_release: 0.79
-ha_domain: asterisk_cdr
-ha_integration_type: integration
----
-
-The Asterisk Call Data Recorder provides access to Asterisk call logs on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail integration](/integrations/asterisk_mbox/) configuration if the `asterisk_mbox_server` is configured to provide CDR data. More information on configuring the server can be found in the [Asterisk PBX configuration guide](/docs/asterisk_mbox/).
diff --git a/source/_integrations/asterisk_mbox.markdown b/source/_integrations/asterisk_mbox.markdown
deleted file mode 100644
index 4febe0f5635c..000000000000
--- a/source/_integrations/asterisk_mbox.markdown
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: Asterisk Voicemail
-description: Instructions on how to integrate your existing Asterisk voicemail within Home Assistant.
-ha_category:
- - Mailbox
-ha_iot_class: Local Push
-ha_release: 0.51
-ha_domain: asterisk_mbox
-ha_integration_type: integration
----
-
-The `asterisk_mbox` Asterisk Voicemail integration for Home Assistant allows you to view, listen to, and delete voicemails from an Asterisk voicemail mailbox. The integration includes a panel on the frontend that provides caller-id and speech-to-text transcription (using Google's API) of messages in addition to playback and message deletion. There is also an included sensor that indicates of the number of available messages. There is no requirement that the Asterisk PBX and Home Assistant are running on the same machine.
-
-To enable the integration, a configuration is required in both Home Assistant as well as on the Asterisk server.
-
-First follow the [Asterisk PBX configuration guide](/docs/asterisk_mbox/) to setup the necessary server on the Asterisk PBX server (this is needed even if Asterisk and Home Assistant are running on the same server)
-
-## Configuration
-
-Once that is complete, add the following entry `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-asterisk_mbox:
- password: ASTERISK_PBX_PASSWORD
- host: ASTERISK_PBX_SERVER_IP_ADDRESS
- port: ASTERISK_PBX_SERVER_PORT
-```
-
-This will add a new 'Mailbox' side-panel, as well as a sensor to indicate # of messages available.
-
-{% configuration %}
-password:
- description: The password that was set during Asterisk PBX configuration
- required: true
- type: string
-host:
- description: The IP-address of the server that is running the Asterisk PBX
- required: true
- type: string
-port:
- description: The port on the Asterisk PBX server that was configured during Asterisk PBX configuration
- required: true
- type: string
-{% endconfiguration %}
-
-
-Communication between the Asterisk PBX server and Home Assistant is password-protected, but the data transmission is not encrypted. It is recommended to only use this integration when communication is contained within a local area network.
-
diff --git a/source/_integrations/aurora_abb_powerone.markdown b/source/_integrations/aurora_abb_powerone.markdown
index a3af51ba906a..8d4634c0c1d9 100644
--- a/source/_integrations/aurora_abb_powerone.markdown
+++ b/source/_integrations/aurora_abb_powerone.markdown
@@ -1,6 +1,6 @@
---
title: Aurora ABB PowerOne Solar PV
-description: Instructions on how to integrate an Aurora ABB Powerone solar inverter within Home Assistant.
+description: Instructions on how to integrate an Aurora ABB PowerOne solar inverter within Home Assistant.
ha_category:
- Energy
- Sensor
diff --git a/source/_integrations/backup.markdown b/source/_integrations/backup.markdown
index 3ebc8216f8a1..d437c9d77dbc 100644
--- a/source/_integrations/backup.markdown
+++ b/source/_integrations/backup.markdown
@@ -10,40 +10,30 @@ ha_codeowners:
- '@home-assistant/core'
ha_iot_class: Calculated
ha_integration_type: system
+related:
+ - docs: /installation/#advanced-installation-methods
+ title: Home Assistant installation methods
+ - docs: /getting-started/onboarding/
+ title: Recover from backup during onboarding
+ - docs: /docs/configuration/
+ title: Configuration file
+ - docs: /common-tasks/os/#restoring-a-backup
+ title: Home Assistant Operating System- Restoring a backup
---
-The Backup integration allow you to create and download backups for your Home Assistant Core and Home Assistant Container installations. This backup file can be used if you migrate to Home Assistant Operating System.
+The **Backup** {% term integration %} is used for {% term "Home Assistant Core" %} and {% term "Home Assistant Container" %} installations to create and download backups. This backup file can be used if you migrate to {% term "Home Assistant Operating System" %}.
-
-
-If you use Home Assistant Operating System or Home Assistant Supervised, [back up functionality is already built-in](/common-tasks/os/#backups).
-
-
-
-
-### Manual configuration
-
-The backup integration is by default enabled. If you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration the following example shows you how to enable this integration manually:
-
-```yaml
-# Example configuration.yaml entry
-backup:
-```
-
-You need to restart Home Assistant after you add this configuration.
-When it has started up again you will find a new "Backup" entry in the main menu (**{% my backup title="Settings > System > Backups" %}**).
-
-The backup files are stored in a new "backups" subdirectory in the root of your configuration directory.
+Note: If you use {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %} installation, this page is not for you. Instead, refer to the documentation on using the [built-in back up](/common-tasks/os/#backups).
## Services
-The backup integration exposes a service that can be used to automate the backup
+The **Backup** integration exposes a service that can be used to automate the backup
process.
### Service {% my developer_call_service service="backup.create" %}
The {% my developer_call_service service="backup.create" %} service can be used
-to create a backup for your Home Assistant instance.
+to create a backup for your Home Assistant instance.
The service has no additional options or parameters.
@@ -53,8 +43,7 @@ Example service call:
service: backup.create
```
-## Example: Backing up every night at 3:00 AM
-
+### Example: Backing up every night at 3:00 AM
This is a YAML example for an automation that initiate a backup every night
at 3 AM:
@@ -69,3 +58,23 @@ automation:
alias: "Create backup now"
service: backup.create
```
+
+## Restoring a backup
+
+Backups created via the **Backup** integration are in a subdirectory `backups`, located in your [configuration directory](/docs/configuration/#editing-configurationyaml).
+The {% term "Home Assistant Container" %} installation typically mounts this directory via `docker-compose.yml` or `docker run` to a directory of your choice.
+
+The steps on recovering from a backup depend on the installation type and use case. Follow one of these steps:
+
+1. If you use {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %}:
+ - Follow the steps described in [Restoring a backup](/common-tasks/os/#restoring-a-backup).
+2. If you use a {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %} installation:
+ - A Home Assistant backup is just a tar file of the [configuration directory](/docs/configuration/#editing-configurationyaml), plus some metadata.
+ - To manually restore a backup, use the following command:
+
+ ```shell
+ tar -xOf "./homeassistant.tar.gz" | tar --strip-components=1 -zxf - -C
+ ```
+
+3. If you migrate from a {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %} installation to {% term "Home Assistant Operating System" %}:
+ - You can use these backup files during [onboarding](/getting-started/onboarding/) to recover your installation from backup.
diff --git a/source/_integrations/balboa.markdown b/source/_integrations/balboa.markdown
index 588b785b520f..7543373ff1d9 100644
--- a/source/_integrations/balboa.markdown
+++ b/source/_integrations/balboa.markdown
@@ -4,12 +4,18 @@ description: Instructions on how to integrate Balboa Spa WiFi within Home Assist
ha_category:
- Binary sensor
- Climate
+ - Fan
+ - Light
+ - Select
ha_release: 2021.12
ha_iot_class: Local Push
ha_domain: balboa
ha_platforms:
- binary_sensor
- climate
+ - fan
+ - light
+ - select
ha_codeowners:
- '@garbled1'
- '@natekspencer'
@@ -23,6 +29,9 @@ There is currently support for the following device types within Home Assistant:
- Binary sensor (Filter cycles and circulation pumps)
- Climate
+- Fan (Pumps/Jets)
+- Light
+- Select (Low/high temperature range)
## Compatible hardware
diff --git a/source/_integrations/bang_olufsen.markdown b/source/_integrations/bang_olufsen.markdown
new file mode 100644
index 000000000000..ddb939932e79
--- /dev/null
+++ b/source/_integrations/bang_olufsen.markdown
@@ -0,0 +1,161 @@
+---
+title: Bang & Olufsen
+description: Instructions on how to integrate Bang & Olufsen devices into Home Assistant.
+ha_category:
+ - Media Player
+ - Multimedia
+ha_release: 2024.2
+ha_iot_class: Local Push
+ha_domain: bang_olufsen
+ha_platforms:
+ - media_player
+ha_codeowners:
+ - '@mj23000'
+ha_config_flow: true
+ha_zeroconf: true
+ha_integration_type: device
+---
+
+The Bang & Olufsen integration enables control of some of the features of certain [Bang & Olufsen](https://www.bang-olufsen.com/) devices through Home Assistant.
+
+## Compatible devices
+
+Devices that have been tested and _should_ work without any trouble are:
+
+- [Beolab 8](https://www.bang-olufsen.com/en/dk/speakers/beolab-8)
+- [Beolab 28](https://www.bang-olufsen.com/en/dk/speakers/beolab-28)
+- [Beosound 2 3rd gen](https://www.bang-olufsen.com/en/dk/speakers/beosound-2)
+- [Beosound A5](https://www.bang-olufsen.com/en/dk/speakers/beosound-a5)
+- [Beosound A9 5th gen](https://www.bang-olufsen.com/en/dk/speakers/beosound-a9)
+- [Beosound Balance](https://www.bang-olufsen.com/en/dk/speakers/beosound-balance)
+- [Beosound Emerge](https://www.bang-olufsen.com/en/dk/speakers/beosound-emerge)
+- [Beosound Level](https://www.bang-olufsen.com/en/dk/speakers/beosound-level)
+- [Beosound Theatre](https://www.bang-olufsen.com/en/dk/soundbars/beosound-theatre)
+
+and any other Mozart based products.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+IP Address:
+ description: The IP address of your device. Can be found by navigating to the device on the [Bang & Olufsen app](https://www.bang-olufsen.com/en/dk/story/apps) and selecting `Settings` → `About` → `IP address`.
+ required: true
+ type: string
+Device model:
+ description: The model name of your Bang & Olufsen device. This is used to determine some capabilities of the device. If the device is not in the list yet, choose a product similar to yours.
+ required: true
+ type: string
+{% endconfiguration_basic %}
+
+
+## Services
+
+### play_media services
+
+The Bang & Olufsen integration supports different playback types in the `media_player.play_media` service: playback from URL, activating a favourite, playback from a local file, playing a radio station, activating a Deezer flow and Deezer playlists, albums, and tracks.
+
+#### play_media examples
+
+Playing [DR P1](https://www.dr.dk/lyd/p1) from a URL:
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.beosound_balance_12345678
+data:
+ media_content_type: url
+ media_content_id: http://live-icy.dr.dk/A/A03H.mp3
+```
+
+Activating the first favourite:
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.beosound_balance_12345678
+data:
+ media_content_type: favourite
+ media_content_id: 1
+```
+
+Playing a local file:
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.beosound_balance_12345678
+data:
+ media_content_id: media-source://media_source/local/example.mp3
+ media_content_type: music
+```
+
+Playing a radio station:
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.beosound_balance_12345678
+data:
+ media_content_id: 1234567890123456
+ media_content_type: radio
+```
+
+Playing a Deezer flow. Optionally define a Deezer user ID:
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.beosound_balance_12345678
+data:
+ media_content_type: deezer
+ media_content_id: flow
+ extra:
+ id: 1234567890
+```
+
+Playing a Deezer playlist. Optionally define starting position for the playlist:
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.beosound_balance_12345678
+data:
+ media_content_type: deezer
+ media_content_id: playlist:1234567890
+ extra:
+ start_from: 123
+```
+
+Playing a Deezer album. Optionally define starting position for the album:
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.beosound_balance_12345678
+data:
+ media_content_type: deezer
+ media_content_id: album:1234567890
+ extra:
+ start_from: 123
+```
+
+Playing a Deezer track:
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.beosound_balance_12345678
+data:
+ media_content_type: deezer
+ media_content_id: 1234567890
+```
+
+## Automations
+
+WebSocket notifications received from the device are fired as events in Home Assistant. These can be received by listening to `bang_olufsen_websocket_event` event types, where `device_id` or `serial_number` can be used to differentiate devices.
+
+### Getting Deezer URIs
+
+To find Deezer playlist, album URIs, and user IDs for Deezer flows, the Deezer website has to be accessed. When navigating to an album, the URL will look something like: , and this needs to be converted to: `album:ALBUM_ID` and the same applies to playlists, which have the format: `playlist:PLAYLIST_ID`.
+
+Additionally a Deezer user ID can be found at by selecting the active user in a web browser.
diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown
index 4666b311bc09..a3bbb1fd63ef 100644
--- a/source/_integrations/binary_sensor.mqtt.markdown
+++ b/source/_integrations/binary_sensor.mqtt.markdown
@@ -20,7 +20,6 @@ Stateless devices such as buttons, remote controls etc are better represented by
The `mqtt` binary sensor platform optionally supports a list of `availability` topics to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT sensor device goes offline (i.e., publishes `payload_not_available` to an `availability` topic), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability` topic is defined, Home Assistant will consider the MQTT device to be `available` and will display its state.
-
To use an MQTT binary sensor in your installation,
add the following to your `configuration.yaml` file:
@@ -78,9 +77,9 @@ device:
required: false
type: string
connections:
- description: "A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `'connections': ['mac', '02:5b:26:a8:dc:12']`."
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
- type: [list, map]
+ type: list
hw_version:
description: The hardware version of the device.
required: false
@@ -101,6 +100,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -115,7 +118,6 @@ device:
type: string
device_class:
description: Sets the [class of the device](/integrations/binary_sensor/#device-class), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`.
- default: None
required: false
type: string
enabled_by_default:
@@ -132,7 +134,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity/#generic-properties) of the entity. When set, the entity category must be `diagnostic` for sensors.
required: false
type: string
- default: None
expire_after:
description: If set, it defines the number of seconds after the sensor's state expires, if it's not updated. After expiry, the sensor's state becomes `unavailable`. Default the sensors state never expires.
required: false
@@ -201,7 +202,7 @@ unique_id:
required: false
type: string
value_template:
- description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no pre-processing of original message is required)."
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no preprocessing of original message is required)."
required: false
type: template
{% endconfiguration %}
diff --git a/source/_integrations/blebox.markdown b/source/_integrations/blebox.markdown
index 80d1fca6f9b2..79cb29769d25 100644
--- a/source/_integrations/blebox.markdown
+++ b/source/_integrations/blebox.markdown
@@ -9,6 +9,7 @@ ha_config_flow: true
ha_codeowners:
- '@bbx-a'
- '@riokuu'
+ - '@swistakm'
ha_domain: blebox
ha_platforms:
- binary_sensor
diff --git a/source/_integrations/blink.markdown b/source/_integrations/blink.markdown
index 712114797691..2963880d50a4 100644
--- a/source/_integrations/blink.markdown
+++ b/source/_integrations/blink.markdown
@@ -7,6 +7,7 @@ ha_category:
- Camera
- Hub
- Sensor
+ - Switch
ha_release: '0.40'
ha_iot_class: Cloud Polling
ha_codeowners:
@@ -27,6 +28,10 @@ ha_integration_type: integration
The **Blink** {% term integration %} lets you view camera images and motion events from [Blink](https://blinkforhome.com/) camera and security systems.
+
+This integration does NOT allow for live viewing of your Blink camera within Home Assistant.
+
+
## Setup
You will need your Blink login information (username, which is usually your email address, and password) to use this module.
@@ -47,34 +52,26 @@ Once Home Assistant starts and you authenticate access, the `blink` integration
- A `camera` for each camera linked to your Blink sync module.
- A `sensor` per camera for temperature and Wi-Fi strength.
- A `binary_sensor` motion detection, camera armed status, and battery status.
+- A `switch` per camera to enable/disable motion detection
-Since the cameras are battery operated, setting the `scan_interval` must be done with care so as to not drain the battery too quickly, or hammer Blink's servers with too many API requests. The cameras can be manually updated via the `trigger_camera` service which will ignore the throttling caused by `scan_interval`. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended.
+Since the cameras are battery operated, polling must be done with care so as to not drain the battery too quickly, or hammer Blink's servers with too many API requests. If an alternate polling rate is desired, disable the "enable poll for updates" option in the Blink integration system options and poll with `homeassistant.update_entity` service. The cameras can be also manually updated via the `trigger_camera` service. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended.
Please note that each camera reports two different states: one as `sensor.blink__status` and the other as `binary_sensor.blink__motion_enabled`. The `motion_enabled` property reports if the `camera` is ready to detect motion **regardless if the system is actually armed**.
## Services
-Any sequential calls to {% term services %} relating to blink should have a minimum of a 5 second delay in between them to prevent the calls from being throttled and ignored.
-
-### `blink.blink_update`
-
-Force a refresh of the Blink system.
+Any sequential calls to {% term services %} relating to blink should have a minimum of a 5 second delay in between them to prevent the calls from being throttled and ignored. The services that act on a camera needs a target parameter.
### `blink.trigger_camera`
Trigger a camera to take a new still image.
-| Service Data Attribute | Optional | Description |
-| ---------------------- | -------- | -------------------------------------- |
-| `entity_id` | yes | Camera entity to take picture with. |
-
### `blink.save_video`
Save the last recorded video of a camera to a local file. Note that in most cases, Home Assistant will need to know that the directory is writable via the `allowlist_external_dirs` in your `configuration.yaml` file (see example below).
| Service Data Attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------- |
-| `name` | no | Name of camera containing video to save. |
| `filename` | no | Location of save file. |
```yaml
@@ -83,6 +80,13 @@ homeassistant:
- '/tmp'
- '/path/to/whitelist'
```
+### `blink.save_recent_clips`
+
+Save the recent video clips of a camera to a local file in the pattern `%Y%m%d_%H%M%S_{name}.mp4`. Note that in most cases, Home Assistant will need to know that the directory is writable via the `allowlist_external_dirs` in your `configuration.yaml` file.
+
+| Service Data Attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------- |
+| `file_path` | no | Location of save files. |
### `blink.send_pin`
@@ -90,11 +94,12 @@ Send a new pin to blink. Since Blink's 2FA implementation is new and changing,
| Service Data Attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------- |
+| `config_entry_id` | no | Blink config to send pin to. |
| `pin` | no | 2FA Pin received from blink. |
### Other services
-In addition to the services mentioned above, there are generic `camera` and `alarm_control_panel` services available for use as well. The `camera.enable_motion_detection` and `camera.disable_motion_detection` services allow for individual cameras to be enabled and disabled, respectively, within the Blink system. The `alarm_control_panel.alarm_arm_away` and `alarm_control_panel.alarm_disarm` services allow for the whole system to be armed and disarmed, respectively. Blink Mini cameras linked to an existing sync module cannot be armed/disarmed individually via Home Assistant.
+In addition to the services mentioned above, there are generic `camera`, `alarm_control_panel`, and `homeassistant` services available. The `camera.enable_motion_detection` and `camera.disable_motion_detection` services allow for individual cameras to be enabled and disabled, respectively, within the Blink system. The `alarm_control_panel.alarm_arm_away` and `alarm_control_panel.alarm_disarm` services allow for the whole system to be armed and disarmed, respectively. The `homeassistant.update_entity` service will force an update of the blink system. Blink Mini cameras linked to an existing sync module cannot be armed/disarmed individually via Home Assistant.
## Examples
@@ -110,8 +115,6 @@ sequence:
- service: blink.trigger_camera
target:
entity_id: camera.blink_my_camera
- - delay: 00:00:05
- - service: blink.blink_update
- service: camera.snapshot
target:
entity_id: camera.blink_my_camera
@@ -171,10 +174,11 @@ The following example assumes your camera's name (in the Blink app) is `My Camer
entity_id: binary_sensor.blink_my_camera_motion_detected
to: "on"
action:
- service: blink.save_video
- data:
- name: "My Camera"
- filename: "/tmp/videos/blink_video_{{ now().strftime('%Y%m%d_%H%M%S') }}.mp4"
+ - service: blink.save_video
+ target:
+ entity_id: camera.blink_my_camera
+ data:
+ filename: "/tmp/videos/blink_video_{{ now().strftime('%Y%m%d_%H%M%S') }}.mp4"
```
{% endraw %}
@@ -199,7 +203,8 @@ The file name of the downloaded video file is not configurable.
minutes: /3
action:
- service: blink.save_recent_clips
+ target:
+ entity_id: camera.my_camera
data:
- name: My Camera
file_path: /tmp/videos
```
diff --git a/source/_integrations/bliss_automation.markdown b/source/_integrations/bliss_automation.markdown
index a1fbe4304897..4e11f761b730 100644
--- a/source/_integrations/bliss_automation.markdown
+++ b/source/_integrations/bliss_automation.markdown
@@ -1,12 +1,12 @@
---
title: Bliss Automation
-description: Connect and control your Bliss Automation devices using the Motion Blinds integration
+description: Connect and control your Bliss Automation devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: bliss_automation
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/bloc_blinds.markdown b/source/_integrations/bloc_blinds.markdown
index 11661c818000..2b8563404a18 100644
--- a/source/_integrations/bloc_blinds.markdown
+++ b/source/_integrations/bloc_blinds.markdown
@@ -1,12 +1,12 @@
---
title: Bloc Blinds
-description: Connect and control your Bloc Blinds devices using the Motion Blinds integration
+description: Connect and control your Bloc Blinds devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: bloc_blinds
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/blue_current.markdown b/source/_integrations/blue_current.markdown
new file mode 100644
index 000000000000..fe29c46ff7f3
--- /dev/null
+++ b/source/_integrations/blue_current.markdown
@@ -0,0 +1,67 @@
+---
+title: Blue Current
+description: Instructions on how to integrate Blue Current charge points within Home Assistant.
+ha_category:
+ - Car
+ - Sensor
+ha_release: 2024.1
+ha_iot_class: Cloud Push
+ha_config_flow: true
+ha_codeowners:
+ - '@Floris272'
+ - '@gleeuwen'
+ha_domain: blue_current
+ha_platforms:
+ - sensor
+ha_integration_type: integration
+---
+
+[Blue Current](https://www.bluecurrent.nl/) is an Dutch company that makes electric car chargers.
+
+The Blue Current integration allows you to connect to your blue current account to Home Assistant and monitor your charge point(s).
+
+## Prerequisites
+
+1. Log in to [my.bluecurrent.nl](https://my.bluecurrent.nl/).
+2. Click on your username and go to settings.
+3. Enable advanced options.
+4. Click on your username again and go to advanced.
+5. Generate an API token.
+
+{% include integrations/config_flow.md %}
+
+## Sensor
+
+The Blue Current integration provides the following sensors:
+
+### Charge point sensors
+
+- Activity
+- Average current
+- Average voltage
+- Energy usage in kWh
+- Max usage in Amps
+ - The max amps the charge point can use.
+- Offline since
+- Started on
+- Stopped on
+- Total cost in EUR
+- Total power (estimate)
+- Vehicle status
+
+The following sensors are created as well, but disabled by default:
+
+- Current phase 1-3
+- offline max usage
+- remaining current
+- smart charging max usage
+- Voltage phase 1-3
+
+### Grid sensors
+
+- Grid average current
+- Grid max current
+
+The following sensors are created as well, but disabled by default:
+
+- Grid current phase 1-3
diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown
index 60e052700e16..7638b8285282 100644
--- a/source/_integrations/bluetooth.markdown
+++ b/source/_integrations/bluetooth.markdown
@@ -21,7 +21,7 @@ The **Bluetooth** {% term integration %} will detect nearby Bluetooth devices. D
## Before you begin
-In many cases, a better approach than a directly connected adapter or card is to use a Bluetooth proxy using an ESP32 since Linux kernel updates have previously broken Bluetooth functionality and Bluetooth driver support Linux generally falls behind other operating systems for newer adapters. A Bluetooth proxy is particularly interesting to users who virtualize their instance, where the USB pass-through may cause additional problems. More information is available in the Remote Adapters section below or by visiting ESPhome's [Bluetooth proxy page](https://esphome.github.io/bluetooth-proxies/).
+In many cases, a better approach than a directly connected adapter or card is to use a Bluetooth proxy using an ESP32 since Linux kernel updates have previously broken Bluetooth functionality and Bluetooth driver support Linux generally falls behind other operating systems for newer adapters. A Bluetooth proxy is particularly interesting to users who virtualize their instance, where the USB pass-through may cause additional problems. More information is available in the Remote Adapters section below or by visiting ESPhome's [Bluetooth proxy page](https://esphome.io/projects/?type=bluetooth).
Suppose a Bluetooth proxy is not a good fit for your use case. Consider using the Home Assistant Operating System when using a local adapter because it includes Bluetooth patches for issues unsolved in other operating systems.
@@ -106,6 +106,7 @@ If you experience an unreliable Bluetooth connection, installing a short USB ext
- Sena UD100-G03 (CSR8510A10) 📶
- StarTech USBBT1EDR4 (CSR8510A10)
- Techkey PBT06H (CSR8510A10)
+- TRENDnet TBW-106UB (CSR8510A10)
- TRENDnet TBW-107UB (CSR8510A10)
- UGREEN CM109 (CSR8510A10)
- Warmstor WBT-AD01 (CSR8510A10)
@@ -250,14 +251,14 @@ When adding multiple remote adapters to increase range or available connection s
The following remote adapters are supported:
-- [ESPHome](https://esphome.github.io/bluetooth-proxies/)
+- [ESPHome](https://esphome.io/projects/?type=bluetooth)
- Bluetooth advertisement listening: ESPHome ESP32 device with firmware 2022.8.2 or later
- Bluetooth advertisement bundling: ESPHome ESP32 device with firmware 2023.6.0 or later
- Single active connection: ESPHome ESP32 device with firmware 2022.9.3 or later
- Multiple active connections: ESPHome ESP32 device with firmware 2022.11.0 or later
- [Shelly](/integrations/shelly/)
- Bluetooth advertisement listening: Shelly v2 device with firmware 12.0 or later
- - Bluetooth advertisement bundling: not supported
+ - Bluetooth advertisement bundling: Shelly v2 device with firmware 12.0 or later
- Single active connection: not supported
- Multiple active connections: not supported
diff --git a/source/_integrations/brandt.markdown b/source/_integrations/brandt.markdown
index b70781dba27f..06367e7dd0ee 100644
--- a/source/_integrations/brandt.markdown
+++ b/source/_integrations/brandt.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/braviatv.markdown b/source/_integrations/braviatv.markdown
index 5688534a7d8a..2d790922dd89 100644
--- a/source/_integrations/braviatv.markdown
+++ b/source/_integrations/braviatv.markdown
@@ -14,6 +14,7 @@ ha_domain: braviatv
ha_config_flow: true
ha_platforms:
- button
+ - diagnostics
- media_player
- remote
ha_ssdp: true
@@ -31,26 +32,84 @@ Almost all [Sony Bravia TV 2013 and newer](https://info.tvsideview.sony.net/en_w
The Bravia TV integration supports two types of authentication:
- **PSK (Pre-Shared-Key)** is a user-defined secret key used for access control. This authentication method is recommended as more reliable and stable. To set up and enable PSK on your TV, go to: **Settings -> Network -> Home Network Setup -> IP Control**.
-- **PIN Code** authentication is easier and does not require additional settings.
+- **PIN Code** authentication is easier and does not require additional settings. [See this guide](#tv-does-not-generate-new-pin) if your TV does not show the PIN code.
For more information, see [IP Control Authentication](https://pro-bravia.sony.net/develop/integrate/ip-control/index.html#ip-control-authentication).
-## Common issues
+## Media browser
-### TV does not generate new pin
+Using the media browser, you can view a list of all installed applications and TV channels and launch them. You can access the media browser from the **Media** section in the Home Assistant side menu or by selecting the **Browse media** button on the media player card.
-If you have previously set up your TV with any Home Assistant instances via PIN code, you must remove Home Assistant from your TV in order for your TV to generate a new pin. To do this, you must do **one** of the following:
+## Using with Google Cast
-- On your TV, go to: **Settings** > **Network** > **Remote device settings** > **Deregister remote device**. Disable and re-enable the **Control remotely** after. Menu titles may differ slightly between models. If needed, refer to your specific model's [manual](https://www.sony.com/electronics/support/manuals) for additional guidance.
-- Reset your TV to factory condition.
+The Bravia TV {% term integration %} provides information about the power status of the device, current source, and volume. It gives you the ability to control playback, run applications, and send remote control commands. Unfortunately, due to limitations of the Bravia REST API, it does not provide information about the currently playing content in applications (app name, media title, duration, play/pause state, etc.). In turn, the [Google Cast](/integrations/cast/) integration does not provide reliable information about the power status of the device (for example on Home Screen) and does not allow you to control playback in Android apps without [MediaSession](https://developer.android.com/reference/android/media/session/MediaSession) support. However, it can display full information about the content being played in supported apps. If your TV runs on Android or Google TV, you can use the Google Cast integration together with the Bravia TV integration. For convenience, you can combine two media players into one using [Universal Media Player](/integrations/universal/). Universal Media Player will automatically select the appropriate active media player entity.
-## Media browser
+{% details "Example YAML configuration" %}
+
+Replace `media_player.sony_tv_native` with your Bravia TV integration media player {% term entity %} ID. Replace `media_player.sony_tv_cast` with your Google Cast integration media player {% term entity %} ID.
+
+{% raw %}
+
+```yaml
+media_player:
+ - platform: universal
+ name: Sony TV
+ unique_id: sony_tv_combined
+ device_class: tv
+ children:
+ - media_player.sony_tv_native
+ - media_player.sony_tv_cast
+ active_child_template: >
+ {% if state_attr('media_player.sony_tv_native', 'media_content_id') %}
+ media_player.sony_tv_native
+ {% endif %}
+ attributes:
+ source: media_player.sony_tv_native|source
+ source_list: media_player.sony_tv_native|source_list
+ browse_media_entity: media_player.sony_tv_native
+ commands:
+ turn_off:
+ service: media_player.turn_off
+ data:
+ entity_id: media_player.sony_tv_native
+ turn_on:
+ service: media_player.turn_on
+ data:
+ entity_id: media_player.sony_tv_native
+ select_source:
+ service: media_player.select_source
+ data:
+ entity_id: media_player.sony_tv_native
+ source: "{{ source }}"
+ media_play:
+ service: media_player.media_play
+ target:
+ entity_id: media_player.sony_tv_native
+ media_pause:
+ service: media_player.media_pause
+ target:
+ entity_id: media_player.sony_tv_native
+ media_play_pause:
+ service: media_player.media_play_pause
+ target:
+ entity_id: media_player.sony_tv_native
+ media_previous_track:
+ service: media_player.media_previous_track
+ target:
+ entity_id: media_player.sony_tv_native
+ media_next_track:
+ service: media_player.media_next_track
+ target:
+ entity_id: media_player.sony_tv_native
+```
-Using the media browser, you can view a list of all installed applications and TV channels and launch them.
+{% endraw %}
+
+{% enddetails %}
## Play media service
-The `play_media` {% term service %} can be used in a automation or script to switch to a specified application or TV channel. It selects the best matching application or channel according to the `media_content_id`:
+The `play_media` {% term service %} can be used in an {% term automation %} or {% term script %} to switch to a specified application or TV channel. It selects the best matching application or channel according to the `media_content_id`:
1. Channel number *(i.e., '1' or '6')*
2. Exact app or channel name *(i.e., 'Google Play' or 'CNN')*
@@ -92,9 +151,19 @@ data:
## Remote
-The integration supports `remote` platform. The remote allows you to send key commands to your TV with the `remote.send_command` service.
+The {% term integration %} supports `remote` {% term platform %}. It allows you to send remote control commands to your TV with the `remote.send_command` service.
+
+The commands that can be sent to the TV depend on the model of your TV. To display a list of supported commands for your TV, call the {% term service %} `remote.send_command` with non-valid command (e.g. `Test`). A list of available commands will be displayed in [Home Assistant System Logs](https://my.home-assistant.io/redirect/logs).
-The commands that can be sent to the TV depends on the model of your TV. To display a list of supported commands for your TV, call the service `remote.send_command` with non-valid command (e.g. `Test`). A list of available commands will be displayed in [Home Assistant System Logs](https://my.home-assistant.io/redirect/logs).
+**Example to send `Down` key command:**
+
+```yaml
+service: remote.send_command
+target:
+ entity_id: remote.bravia_tv
+data:
+ command: "Down"
+```
{% details "Some commonly used commands" %}
@@ -123,20 +192,34 @@ The commands that can be sent to the TV depends on the model of your TV. To disp
{% enddetails %}
-**Example to send `Down` key command:**
+## Buttons
-```yaml
-service: remote.send_command
-target:
- entity_id: remote.bravia_tv
-data:
- command: "Down"
-```
+The {% term integration %} supports `button` {% term platform %} and allows you to reboot the device or terminate all running applications.
-## Buttons
+## Limitations and known issues
+
+### TV does not generate new PIN
+
+If you have previously set up your TV with any Home Assistant instances via PIN code, you must remove Home Assistant from your TV in order for your TV to generate a new PIN. On your TV, go to: **Settings** > **Network** > **Remote device settings** > **Deregister remote device**. Menu titles may differ slightly between models. If needed, refer to your specific model's [manual](https://www.sony.com/electronics/support/manuals) for additional guidance.
+
+### Sometimes, the integration displays an error in the logs and does not respond to commands
+
+Unfortunately, the system service application (WebApiCore) on the TV that provides Sony Bravia REST API does not work very well and has many problems. The service may begin to reboot spontaneously or freeze, especially when the TV has not been rebooted for a long time or a heavy application is running. Perhaps sometimes the process is killed by Android TV itself due to lack of memory. When the service is being rebooted (about 30 seconds), the API will be unavailable, and any interaction with the {% term integration %} may result in an error in the logs.
+
+If you encounter this, you must completely reboot your TV. To do this, hold down the **Power** button on the remote control and select **Restart**. In addition, we recommend periodically completely restarting your TV. You can also create an {% term automation %} that will automatically restart the TV (for example, every night if the TV is turned off).
+
+If this happens very often, you can try to reset **WebApiCore** service. On your TV, go to: **Settings** > **Apps** > **See all aps** > Find **WebApiCore** > Press **Clear data**.
+
+### Integration shows 'Smart TV' instead of the name of the running application
+
+See [Using with Google Cast](#using-with-google-cast) section for more details.
+
+### Power consumption ~15 W when the TV in standby mode while integration is enabled
+
+The Bravia TV is [local pulling integration](https://www.home-assistant.io/blog/2016/02/12/classifying-the-internet-of-things/#polling-the-local-device). Even if the TV is turned off, its status is constantly polled to determine the current state, so the TV's network interface remains enabled. This is normal behavior. If you are concerned about this, you can disable polling for updates in the integration **System options** menu, but the TV status will no longer update automatically and you will have to force the {% term entity %} update by calling `homeassistant.update_entity` {% term service %} manually.
-The integration supports `button` platform and allows you to reboot the device or terminate all running applications.
+Please note that this behavior can be caused not only by the integration, but also by some applications installed on the TV.
-## For TVs older than 2013
+### For TVs older than 2013
Users of TVs older than 2013 can control their devices using [HDMI-CEC](/integrations/hdmi_cec/), [Broadlink](/integrations/broadlink/) or [Kodi](/integrations/kodi/) integrations.
diff --git a/source/_integrations/brel_home.markdown b/source/_integrations/brel_home.markdown
index 297dca15e1a7..7c01250f9bc1 100644
--- a/source/_integrations/brel_home.markdown
+++ b/source/_integrations/brel_home.markdown
@@ -1,12 +1,12 @@
---
title: Brel Home
-description: Connect and control your Brel Home devices using the Motion Blinds integration
+description: Connect and control your Brel Home devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: brel_home
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/bring.markdown b/source/_integrations/bring.markdown
new file mode 100644
index 000000000000..4adf1643c18e
--- /dev/null
+++ b/source/_integrations/bring.markdown
@@ -0,0 +1,81 @@
+---
+title: Bring!
+description: Instructions on how to integrate the Bring! todo list with Home Assistant.
+ha_category:
+ - To-do list
+ha_iot_class: Cloud Polling
+ha_release: 2024.2
+ha_config_flow: true
+ha_codeowners:
+ - '@miaucl'
+ - '@tr4nt0r'
+ha_domain: bring
+ha_integration_type: service
+ha_platforms:
+ - todo
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - url: https://www.getbring.com/
+ title: Bring!
+---
+
+The **Bring!** integration allows you to interact with your [Bring!](https://www.getbring.com/) shopping lists within Home Assistant.
+
+For authentication, the integration requires the `email` and `password` you used for your Bring! account. If you want to automatically receive notifications via the Bring! app when Home Assistant adds or removes an item from the list, you should use a dedicated account (such as `email: your.name+ha@gmail.com`) to connect Home Assistant with [Bring!](https://www.getbring.com/).
+
+{% include integrations/config_flow.md %}
+
+## Services
+
+You can use the services from the [to-do list](/integrations/todo/) to create, update, or delete items on your Bring! shopping lists.
+
+### Notifications
+
+The **Bring** integration offers a service to send push notifications to the Bring! mobile apps of other members of a shared shopping list. The Bring! mobile app has 4 predefined notification types. Note: If you want to receive these notifications yourself, you need to use a dedicated account as mentioned above.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `target` | no | Target Bring! list(s) whose members should be notified. |
+| `message` | no | Type of push notification to send to list members. See [Notification types](#available-notification-types). |
+| `item` | yes | **Required for `urgent_message`.** Article name to include in the message. For example: *Urgent Message - Please buy cilantro urgently*. |
+
+### Available notification types
+
+| Notification type | Text of notification |
+| ----------------- | --------------------------------------------------- |
+| going_shopping | I'm going shopping! - Last chance to make changes |
+| changed_list | List updated - Take a look at the articles |
+| shopping_done | Shopping done - The fridge is well stocked |
+| urgent_message | Urgent Message - Please buy `Article name` urgently |
+
+### Sending a going shopping notification
+
+```yaml
+...
+action:
+ service: bring.send_message
+ target:
+ entity_id: todo.bring_shoppinglist
+ data:
+ message: going_shopping
+```
+
+### Sending an urgent message notification
+
+Note that for the notification type `urgent_message` the attribute `item` is **required**.
+
+```yaml
+...
+action:
+ service: bring.send_message
+ target:
+ entity_id: todo.bring_shoppinglist
+ data:
+ message: urgent_message
+ item: Cilantro
+```
diff --git a/source/_integrations/brother.markdown b/source/_integrations/brother.markdown
index b8222e49034a..904061092408 100644
--- a/source/_integrations/brother.markdown
+++ b/source/_integrations/brother.markdown
@@ -32,7 +32,8 @@ Some very old Brother printers use different data format and these models are no
## Configuring the printer
-To enable SNMP, navigate to the printer's web interface (for example: `http://192.168.5.6`) and turn it on under Network / Protocol / SNMP.
+To enable SNMP, navigate to the printer's web interface (for example: `http://192.168.5.6`) and turn it on under Network / Protocol / SNMP. For some models, access to the web interface is password-protected. For some printers, the default password is printed on a sticker on the back of the printer, preceded by "Pwd:". If the printer does not have a password on the sticker, the default password is "initpass".
+
For some Brother devices, `SNMPv3 read-write access and v1/v2c read-only access` is the option required (under advanced settings).
![SNMP settings on Brother Printer web interface](/images/integrations/brother/brother-printer-webui.png)
diff --git a/source/_integrations/bthome.markdown b/source/_integrations/bthome.markdown
index 21b1978d97bd..be6e82cce254 100644
--- a/source/_integrations/bthome.markdown
+++ b/source/_integrations/bthome.markdown
@@ -12,6 +12,7 @@ ha_domain: bthome
ha_config_flow: true
ha_platforms:
- binary_sensor
+ - event
- sensor
ha_integration_type: integration
---
diff --git a/source/_integrations/bticino.markdown b/source/_integrations/bticino.markdown
index aa09269ca12f..36a08a851f0e 100644
--- a/source/_integrations/bticino.markdown
+++ b/source/_integrations/bticino.markdown
@@ -2,10 +2,12 @@
title: BTicino
description: Connect and control your BTicino devices using the Netatmo integration
ha_category:
+ - Binary sensor
- Camera
- Climate
- Cover
- Environment
+ - Fan
- Hub
- Light
- Media source
@@ -21,10 +23,12 @@ ha_codeowners:
- '@cgtobi'
ha_config_flow: true
ha_platforms:
+ - binary_sensor
- camera
- climate
- cover
- diagnostics
+ - fan
- light
- select
- sensor
diff --git a/source/_integrations/bubendorff.markdown b/source/_integrations/bubendorff.markdown
index 37b8690edac1..993fb43bdaca 100644
--- a/source/_integrations/bubendorff.markdown
+++ b/source/_integrations/bubendorff.markdown
@@ -2,10 +2,12 @@
title: Bubendorff
description: Connect and control your Bubendorff devices using the Netatmo integration
ha_category:
+ - Binary sensor
- Camera
- Climate
- Cover
- Environment
+ - Fan
- Hub
- Light
- Media source
@@ -21,10 +23,12 @@ ha_codeowners:
- '@cgtobi'
ha_config_flow: true
ha_platforms:
+ - binary_sensor
- camera
- climate
- cover
- diagnostics
+ - fan
- light
- select
- sensor
diff --git a/source/_integrations/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown
index 1821dafe2aa2..e3393dc32296 100644
--- a/source/_integrations/button.mqtt.markdown
+++ b/source/_integrations/button.mqtt.markdown
@@ -12,8 +12,6 @@ The `mqtt` button platform lets you send an MQTT message when the button is pres
## Configuration
-
-
```yaml
# Example configuration.yaml entry
mqtt:
@@ -64,7 +62,7 @@ command_template:
type: template
command_topic:
description: The MQTT topic to publish commands to trigger the button.
- required: false
+ required: true
type: string
device:
description: "Information about the device this button is a part of to tie it into the [device registry](https://developers.home-assistant.io/docs/en/device_registry_index.html). Only works when [`unique_id`](#unique_id) is set. At least one of identifiers or connections must be present to identify the device."
@@ -99,6 +97,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -114,9 +116,7 @@ device:
device_class:
description: The [type/class](/integrations/button/#device-class) of the button to set the icon in the frontend. The `device_class` can be `null`.
required: false
- default: None
type: device_class
- default: None
enabled_by_default:
description: Flag which defines if the entity should be enabled when first added.
required: false
@@ -131,7 +131,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
diff --git a/source/_integrations/caldav.markdown b/source/_integrations/caldav.markdown
index e71b85de0559..3031fee40ae0 100644
--- a/source/_integrations/caldav.markdown
+++ b/source/_integrations/caldav.markdown
@@ -12,23 +12,38 @@ ha_platforms:
- todo
ha_integration_type: integration
ha_config_flow: true
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - docs: /integrations/calendar
+ title: Calendar
---
-The CalDAV integration allows you to connect your WebDAV calendar to Home Assistant
+The **CalDAV** integration allows you to connect your WebDAV calendar to Home Assistant
as one of these entity types:
-- A [calendar](/integrations/calendar) entity which can be used to trigger automations based on the the start or end of an event using criteria such as the event name or description.
+- A [calendar](/integrations/calendar) entity which can be used to trigger automations based on the start or end of an event using criteria such as the event name or description.
- A [todo](/integrations/todo) entity which tracks the number of active items
on the to-do list.
-The WebDAV entities are updated roughly every 15 minutes.
+The WebDAV entities are updated roughly every 15 minutes.
{% include integrations/config_flow.md %}
-During the configuraiton flow you will be asked for the CalDAV server and credentials
+During the configuration flow you will be asked for the CalDAV server and credentials
for it. An example CalDAV URL is `https://caldav.icloud.com/`.
-This integration was tested against [iCloud Calendar](https://www.icloud.com/calendar/), [Nextcloud](https://nextcloud.com/), [Owncloud](https://owncloud.org/), [Baikal](https://sabre.io/baikal/). Any integration complying with the RFC4791 should work.
+This integration was tested against the following systems, but any other complying with the RFC4791 should work:
+
+- [Baikal](https://sabre.io/baikal/)
+- [iCloud Calendar](https://www.icloud.com/calendar/)
+- [Nextcloud](https://nextcloud.com/)
+- [Owncloud](https://owncloud.org/)
+- [Synology Calendar](https://www.synology.com/en-us/dsm/feature/calendar)
## Manual configuration
@@ -144,7 +159,6 @@ verify_ssl:
{% enddetails %}
-
## Calendar Event Automations
Individual Calendar *Events* can power automations such as:
diff --git a/source/_integrations/calendar.markdown b/source/_integrations/calendar.markdown
index de20cd1328d2..231c3f6c5e18 100644
--- a/source/_integrations/calendar.markdown
+++ b/source/_integrations/calendar.markdown
@@ -4,7 +4,8 @@ description: Instructions on how to integrate calendars within Home Assistant.
ha_release: 0.33
ha_domain: calendar
ha_quality_scale: internal
-ha_category: []
+ha_category:
+ - Calendar
ha_codeowners:
- '@home-assistant/core'
ha_integration_type: entity
@@ -16,13 +17,10 @@ dashboard and can be used with automations.
This page does not provide instructions on how to create calendar
entities. Please see the ["Calendar" category](/integrations/#calendar) on the
-integrations page to find integration offering calendar entities.
+integrations page to find integrations offering calendar entities. For example, [Local Calendar](/integrations/local_calendar/) is a fully local integration to create calendars and events within your Home Assistant instance or other integrations work with other services providing calendar data.
{% include integrations/building_block_integration.md %}
-A calendar {% term entity %} has a {% term state %} and attributes representing the next event (only).
-A calendar {% term trigger %} is much more flexible, has fewer limitations, and is
-recommended for automations instead of using the entity state.
## Viewing and managing calendars
@@ -43,6 +41,9 @@ event's start or end. Review the [Automating Home Assistant](/getting-started/au
getting started guide on automations or the [Automation](/docs/automation/)
documentation for full details.
+Calendar {% term triggers %} are the best way to automate based on calendar events.
+A calendar {% term entity %} can also be used to automate based on its state, but these are limited and attributes only represent the next event.
+
{% my automations badge %}
![Screenshot Trigger](/images/integrations/calendar/trigger.png)
@@ -192,10 +193,10 @@ data:
{% endraw %}
-### Service `calendar.list_events`
+### Service `calendar.get_events`
This service populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data)
-with calendar events within a date range.
+with calendar events within a date range. It can return events from multiple calendars.
| Service data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
@@ -209,20 +210,20 @@ Use only one of `end_date_time` or `duration`.
-
-{% raw %}
```yaml
-service: calendar.list_events
+service: calendar.get_events
target:
- entity_id: calendar.school
+ entity_id:
+ - calendar.school
+ - calendar.work
data:
duration:
hours: 24
response_variable: agenda
```
-{% endraw %}
-The response data field `events` is a list of events with these fields:
+The response data contains a field for every calendar entity (e.g. `calendar.school` and `calendar.work` in this case).
+Every calendar entity has a field `events` containing a list of events with these fields:
| Response data | Description | Example |
| ---------------------- | ----------- | -------- |
@@ -236,16 +237,17 @@ This example uses a template with response data in another service call:
{% raw %}
```yaml
-service: notify.gmail_com
+service: notify.nina
data:
- target: gduser1@workspacesamples.dev
title: Daily agenda for {{ now().date() }}
message: >-
- Your agenda for today:
-
- {% for event in agenda.events %}
+ Your school calendar for today:
+ {% for event in agenda["calendar.school_calendar"]["events"] %}
+ {{ event.start}}: {{ event.summary }}
+ {% endfor %}
+ Your work calendar for today:
+ {% for event in agenda["calendar.work_calendar"]["events"] %}
{{ event.start}}: {{ event.summary }}
{% endfor %}
-
```
{% endraw %}
diff --git a/source/_integrations/camera.markdown b/source/_integrations/camera.markdown
index 89d840ce5d93..d7e0c7bb9a0d 100644
--- a/source/_integrations/camera.markdown
+++ b/source/_integrations/camera.markdown
@@ -39,27 +39,27 @@ Available services: `enable_motion_detection`, `disable_motion_detection`, `play
Enable the motion detection in a camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.living_room_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.living_room_camera`. |
#### Service `disable_motion_detection`
Disable the motion detection in a camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.living_room_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------------------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.living_room_camera`. |
#### Service `play_stream`
Play a live stream from a camera to selected media player(s). Requires [`stream`](/integrations/stream) integration to be set up.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name of entity to fetch stream from, e.g., `camera.living_room_camera`. |
-| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
-| `format` | yes | Stream format supported by `stream` integration and selected `media_player`. Default: `hls` |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
+| `entity_id` | no | Name of entity to fetch stream from, e.g., `camera.living_room_camera`. |
+| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
+| `format` | yes | Stream format supported by `stream` integration and selected `media_player`. Default: `hls` |
For example, the following action in an automation would send an `hls` live stream to your chromecast.
@@ -78,14 +78,14 @@ Make a `.mp4` recording from a camera stream. Requires `stream` integration to b
Both `duration` and `lookback` options are suggestions, but should be consistent per camera. The actual length of the recording may vary. It is suggested that you tweak these settings to fit your needs.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
-| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/{{ entity_id.name }}.mp4`{% endraw %}. |
-| `duration` | yes | Target recording length (in seconds). Default: 30 |
-| `lookback` | yes | Target lookback period (in seconds) to include in addition to duration. Only available if there is currently an active HLS stream. Default: 0 |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
+| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
+| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/{{ entity_id.name }}.mp4`{% endraw %}. |
+| `duration` | yes | Target recording length (in seconds). Default: 30 |
+| `lookback` | yes | Target lookback period (in seconds) to include in addition to duration. Only available if there is currently an active HLS stream. Default: 0 |
-The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
+The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/integrations/homeassistant/#allowlist_external_dirs) section of your `configuration.yaml` file.
For example, the following action in an automation would take a recording from "yourcamera" and save it to /tmp with a timestamped filename.
@@ -106,12 +106,12 @@ action:
Take a snapshot from a camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
-| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id.name }}`{% endraw %}. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
+| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
+| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id.name }}`{% endraw %}. |
-The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
+The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/integrations/homeassistant/) section of your `configuration.yaml` file.
For example, the following action in an automation would take a snapshot from "yourcamera" and save it to /tmp with a timestamped filename.
@@ -132,17 +132,17 @@ action:
Turn off camera. Not all camera models support this service, please consult individual camera page.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to turn off, e.g., `camera.living_room_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to turn off, e.g., `camera.living_room_camera`. |
#### Service `turn_on`
Turn on camera. Not all camera models support this service, please consult individual camera page.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to turn on, e.g., `camera.living_room_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------ |
+| `entity_id` | yes | Name(s) of entities to turn on, e.g., `camera.living_room_camera`. |
### Test if it works
diff --git a/source/_integrations/camera.mqtt.markdown b/source/_integrations/camera.mqtt.markdown
index 4e09c0bad5a1..d7a1ba782020 100644
--- a/source/_integrations/camera.mqtt.markdown
+++ b/source/_integrations/camera.mqtt.markdown
@@ -14,8 +14,6 @@ This can be used with an application or a service capable of sending images thro
## Configuration
-
-
To enable this camera in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -78,7 +76,7 @@ device:
required: false
type: string
connections:
- description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
type: list
hw_version:
@@ -101,6 +99,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -127,7 +129,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
@@ -136,7 +137,6 @@ image_encoding:
description: The encoding of the image payloads received. Set to `"b64"` to enable base64 decoding of image payload. If not set, the image payload must be raw binary data.
required: false
type: string
- default: None
json_attributes_template:
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
required: false
diff --git a/source/_integrations/cast.markdown b/source/_integrations/cast.markdown
index a49ad572abb4..2a880e2b4abf 100644
--- a/source/_integrations/cast.markdown
+++ b/source/_integrations/cast.markdown
@@ -48,7 +48,7 @@ cast_downstairs_on_kitchen:
-Home Assistant Cast requires your Home Assistant installation to be accessible via `https://`. If you're using Home Assistant Cloud, you don't need to do anything. Otherwise you must make sure that you have configured the `external_url` in your [configuration](/docs/configuration/basic).
+Home Assistant Cast requires your Home Assistant installation to be accessible via `https://`. If you're using Home Assistant Cloud, you don't need to do anything. Otherwise you must make sure that you have configured the `external_url` in your [configuration](/integrations/homeassistant/#configuration-variables).
@@ -58,7 +58,7 @@ Home Assistant Cast requires your Home Assistant installation to be accessible v
Chromecasts generally ignore DNS servers from DHCP and will instead use Google's DNS servers, 8.8.8.8 and 8.8.4.4. This means media URLs must either be specifying the IP-address of the server directly, e.g. `http://192.168.1.1:8123/movie.mp4`, or be publicly resolvable, e.g. `http://homeassistant.internal.mydomain.com:8123/movie.mp4` where `homeassistant.internal.mydomain.com` resolves to `192.168.1.1`. A hostname which can't be publicly resolved, e.g. `http://homeassistant.local:8123/movie.mp4` will fail to play.
-This is important when casting TTS or local media sources; the cast integration will cast such media from the `external_url` if [configured](/docs/configuration/basic), otherwise from the Home Assistant Cloud if configured, otherwise from the [`internal_url`](/docs/configuration/basic). Note that the Home Assistant Cloud will not be used if an `external_url` is configured.
+This is important when casting TTS or local media sources; the cast integration will cast such media from the `external_url` if [configured](/integrations/homeassistant/#editing-the-general-settings-in-yaml), otherwise from the Home Assistant Cloud if configured, otherwise from the [`internal_url`](/integrations/homeassistant/#editing-the-general-settings-in-yaml). Note that the Home Assistant Cloud will not be used if an `external_url` is configured.
@@ -138,10 +138,10 @@ This app doesn't retrieve its own metadata, so if you want the cast interface or
Note: Media ID is NOT the 8 digit alphanumeric in the URL, it can be found by right-clicking the playing video. E.g., [this episode](https://www.bbc.co.uk/iplayer/episode/b09w7fd9/bitz-bob-series-1-1-castle-makeover) shows:
-| | |
-| --- | --- |
+| | |
+| -------- | ------------------------------- |
| 2908kbps | dash (mf_cloudfront_dash_https) |
-| b09w70r2 | 960x540 |
+| b09w70r2 | 960x540 |
With b09w70r2 being the `media_id`
@@ -257,6 +257,72 @@ Optional:
service: media_player.play_media
```
+### [NRK Radio](https://radio.nrk.no)
+
+#### Finding Media IDs
+
+Media ID can be found in the URL, e.g:
+- Live channel: , media ID is `p1`
+- Podcast: , media ID is `l_8457deb0-4f2c-4ef3-97de-b04f2c6ef314`
+- On-demand program: , media ID is `MDUP01004510`
+
+#### Media parameters
+
+- `app_name`: `nrkradio`
+- `media_id`: NRK Radio media ID
+
+#### Example
+
+Example values to cast the item at
+
+```yaml
+'cast_nrkradio_to_chromecast':
+ alias: "Cast NRK Radio to Chromecast"
+ sequence:
+ - target:
+ entity_id: media_player.chromecast
+ data:
+ media_content_type: cast
+ media_content_id: '
+ {
+ "app_name": "nrkradio",
+ "media_id": "l_8457deb0-4f2c-4ef3-97de-b04f2c6ef314"
+ }'
+ service: media_player.play_media
+```
+
+### [NRK TV](https://tv.nrk.no)
+
+#### Finding Media IDs
+
+ - Live programs: ID is in the URL, e.g. for , the media ID is `nrk1`
+ - On-demand programs: ID is found by clicking share button, e.g. for the share link is `https://tv.nrk.no/se?v=OUHA43000207` and the media ID is `OUHA43000207`
+
+#### Media parameters
+
+- `app_name`: `nrktv`
+- `media_id`: NRK TV media ID
+
+#### Example
+
+Example values to cast the item at
+
+```yaml
+'cast_nrktv_to_chromecast':
+ alias: "Cast NRK TV to Chromecast"
+ sequence:
+ - target:
+ entity_id: media_player.chromecast
+ data:
+ media_content_type: cast
+ media_content_id: '
+ {
+ "app_name": "nrktv",
+ "media_id": "OUHA43000207"
+ }'
+ service: media_player.play_media
+```
+
### Plex
To cast media directly from a configured Plex server, set the fields [as documented in the Plex integration](/integrations/plex/#service-media_playerplay_media) and prepend the `media_content_id` with `plex://`:
@@ -277,10 +343,10 @@ To cast media directly from a configured Plex server, set the fields [as documen
Note: Media ID is NOT the 8 digit alphanumeric in the URL, it can be found by right-clicking the playing audio clip. E.g., [this episode](https://www.bbc.co.uk/sounds/play/p009ycqy) shows:
-| | |
-| --- | --- |
-| 128bps | dash (mf_cloudfront_nonbidi_dash_https) |
-| p009ycqz | |
+| | |
+| -------- | --------------------------------------- |
+| 128bps | dash (mf_cloudfront_nonbidi_dash_https) |
+| p009ycqz | |
With p009ycqz being the `media_id`
diff --git a/source/_integrations/ccm15.markdown b/source/_integrations/ccm15.markdown
index c47bc1518b8e..2a8dc78990cd 100644
--- a/source/_integrations/ccm15.markdown
+++ b/source/_integrations/ccm15.markdown
@@ -1,18 +1,17 @@
---
-title: Midea CCM15 Data Converter
+title: Midea CCM15 AC Controller
description: Instructions on how to integrate a Midea CCM15 module into Home Assistant.
ha_category:
- Climate
ha_iot_class: Local Polling
-ha_release: 2023.07.0
+ha_release: 2024.1
ha_config_flow: true
ha_codeowners:
- '@ocalvo'
ha_domain: ccm15
-ha_quality_scale: platinum
-ha_dhcp: true
ha_platforms:
- climate
+ - diagnostics
ha_integration_type: integration
---
@@ -23,20 +22,7 @@ There is currently support for the following device types within Home Assistant:
- [Configuration](#configuration)
- [Climate](#climate)
-## Configuration
-
-Adding a CCM15 data converter to your Home Assistant instance can be done via the user interface, by using this My Button:
-{% my config_flow_start badge domain=page.ha_domain %}
-
-{% details "Manual configuration steps" %}
-
-1. Browse to your Home Assistant instance.
-2. Go to **{% my integrations title="Settings > Devices & Services" %}**.
-3. In the bottom right corner, select the
- **{% my config_flow_start icon domain=page.ha_domain %}** button.
-4. From the list, select **CCM15** and follow the instructions on screen.
-
-{% enddetails %}
+{% include integrations/config_flow.md %}
## Climate
diff --git a/source/_integrations/circuit.markdown b/source/_integrations/circuit.markdown
deleted file mode 100644
index 5adbf535014b..000000000000
--- a/source/_integrations/circuit.markdown
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: Unify Circuit
-description: Instructions on how to send a notification to a Unify Circuit Conversation.
-ha_category:
- - Notifications
-ha_iot_class: Cloud Push
-ha_release: 0.111
-ha_codeowners:
- - '@braam'
-ha_domain: circuit
-ha_platforms:
- - notify
-ha_integration_type: integration
----
-
-The `Unify Circuit` platform allows you to send notifications from Home Assistant to a conversation in [Unify Circuit](https://www.circuit.com/).
-
-## Setup
-
-To send a notification to Circuit, you need to add the Incoming Webhook app to your conversation. When the app is added, you will receive a webhook URL that needs to be added to your `configuration.yaml`.
-
-More details for creating the webhook app, visit: [Create webhook Circuit](https://www.circuit.com/unifyportalfaqdetail?articleId=164448)
-
-## Configuration
-
-To add the Unify Circuit platform to your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-circuit:
- webhook:
- - name: circuit_hass
- url: https://eu.yourcircuit.com/rest/v2/webhooks/incoming/
-```
-
-{% configuration %}
-name:
- description: Setting this parameter allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`.
- required: false
- type: string
- default: "notify"
-url:
- description: The webhook URL created in the setup step.
- required: true
- type: string
-{% endconfiguration %}
-
-### Unify circuit notify message
-
-HTML tags can be placed inside `message` for extended functionality.
-
-Example for message:
-
-```yaml
-message: Message that will be added.
-```
diff --git a/source/_integrations/climate.markdown b/source/_integrations/climate.markdown
index 35b5164d3051..b49e08ac8209 100644
--- a/source/_integrations/climate.markdown
+++ b/source/_integrations/climate.markdown
@@ -19,7 +19,7 @@ The **Climate** {% term integration %} allows you to control and monitor HVAC (h
### Climate control services
-Available services: `climate.set_aux_heat`, `climate.set_preset_mode`, `climate.set_temperature`, `climate.set_humidity`, `climate.set_fan_mode`, `climate.set_hvac_mode`, `climate.set_swing_mode`, `climate.turn_on`, `climate.turn_off`
+Available services: `climate.set_aux_heat`, `climate.set_preset_mode`, `climate.set_temperature`, `climate.set_humidity`, `climate.set_fan_mode`, `climate.set_hvac_mode`, `climate.set_swing_mode`, `climate.turn_on`, `climate.turn_off`, `climate.toggle`
@@ -234,6 +234,14 @@ Turn climate device off. This is only supported if the climate device has the HV
| ---------------------- | -------- | ----------- |
| `entity_id` | yes | String or list of strings that define the entity ID(s) of climate device(s) to control. To target all climate devices, use `all`.
+### Service `climate.toggle`
+
+Toggle climate device. This is only supported if the climate device supports being turned on and off.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `entity_id` | yes | String or list of strings that define the entity ID(s) of climate device(s) to control. To target all climate devices, use `all`.
+
## Attributes
The climate entity has extra attributes to represent the state of the thermostat.
diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown
index 94d91a0d3f26..89151e889342 100644
--- a/source/_integrations/climate.mqtt.markdown
+++ b/source/_integrations/climate.mqtt.markdown
@@ -12,8 +12,6 @@ The `mqtt` climate platform lets you control your MQTT enabled HVAC devices.
## Configuration
-
-
To enable this climate platform in your installation, first add the following to your `configuration.yaml` file:
```yaml
@@ -120,6 +118,10 @@ device:
description: 'The name of the device.'
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -146,7 +148,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
fan_mode_command_template:
description: A template to render the value sent to the `fan_mode_command_topic` with.
required: false
@@ -187,7 +188,7 @@ json_attributes_topic:
max_humidity:
description: The minimum target humidity percentage that can be set.
required: false
- type: integer
+ type: float
default: 99
max_temp:
description: Maximum set point available. The default value depends on the temperature unit, and will be 35°C or 95°F.
@@ -196,7 +197,7 @@ max_temp:
min_humidity:
description: The maximum target humidity percentage that can be set.
required: false
- type: integer
+ type: float
default: 30
min_temp:
description: Minimum set point available. The default value depends on the temperature unit, and will be 7°C or 44.6°F.
diff --git a/source/_integrations/co2signal.markdown b/source/_integrations/co2signal.markdown
index dafd88f8ff1a..250ddfdf5662 100644
--- a/source/_integrations/co2signal.markdown
+++ b/source/_integrations/co2signal.markdown
@@ -15,6 +15,7 @@ ha_config_flow: true
ha_integration_type: service
ha_codeowners:
- '@jpbede'
+ - '@VIKTORVAV99'
---
The `Electricity Maps` sensor platform (formerly known as CO2Signal) queries the [Electricity Maps](https://www.electricitymaps.com/) API for the CO2 intensity of a specific region. Data can be collected for your home by using the latitude/longitude or a country code. This API uses the same data as . Not all countries/regions in the world are supported, so please consult the app to check local availability.
diff --git a/source/_integrations/coautilities.markdown b/source/_integrations/coautilities.markdown
new file mode 100644
index 000000000000..295b00f7aa68
--- /dev/null
+++ b/source/_integrations/coautilities.markdown
@@ -0,0 +1,20 @@
+---
+title: City of Austin Utilities
+description: Get energy usage from City of Austin Utilities using the Opower integration
+ha_category:
+ - Energy
+ - Sensor
+ha_release: 2023.8
+ha_domain: coautilities
+ha_integration_type: virtual
+ha_supporting_domain: opower
+ha_supporting_integration: Opower
+ha_codeowners:
+ - '@tronikos'
+ha_config_flow: true
+ha_platforms:
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/color_extractor.markdown b/source/_integrations/color_extractor.markdown
index 4a338de3faf1..211fa90d800b 100644
--- a/source/_integrations/color_extractor.markdown
+++ b/source/_integrations/color_extractor.markdown
@@ -22,15 +22,15 @@ Because `color_extractor.turn_on` will then call `light.turn_on`, you can pass a
Passing the key `color_extract_url` to the {% term service %} call will download the linked image and extract the predominant color from it. Passing the key `color_extract_path` to the service call will process the image file from local storage instead. `color_extract_url` and `color_extract_path` are exclusive and cannot be used together.
-|Key | Example | Description |
-|---------------------|---------------------------------------|-------------------------------------------------------------------------------|
-|`color_extract_url` | `https://example.com/images/logo.png` | The full URL (including schema, `http://`, `https://`) of the image to process|
-|`color_extract_path` | `/tmp/album.png` | The full path to the image file on local storage we'll process |
-|`entity_id` | `light.shelf_leds` | The RGB capable light we'll set the color of |
+| Key | Example | Description |
+| -------------------- | ------------------------------------- | ------------------------------------------------------------------------------ |
+| `color_extract_url` | `https://example.com/images/logo.png` | The full URL (including schema, `http://`, `https://`) of the image to process |
+| `color_extract_path` | `/tmp/album.png` | The full path to the image file on local storage we'll process |
+| `entity_id` | `light.shelf_leds` | The RGB capable light we'll set the color of |
- Please ensure any [external URLs](/docs/configuration/basic/#allowlist_external_urls) or [external files](/docs/configuration/basic/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources.
+ Please ensure any [external URLs](/integrations/homeassistant/#allowlist_external_urls) or [external files](/docs/integrations/homeassistant/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources.
diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown
index e02dee5ec486..1864b138f10f 100644
--- a/source/_integrations/comelit.markdown
+++ b/source/_integrations/comelit.markdown
@@ -2,7 +2,13 @@
title: Comelit SimpleHome
description: Instructions on how to integrate Comelit SimpleHome home automation devices into Home Assistant.
ha_category:
+ - Alarm
+ - Climate
+ - Cover
+ - Humidifier
- Light
+ - Sensor
+ - Switch
ha_release: '2023.9'
ha_domain: comelit
ha_config_flow: true
@@ -10,18 +16,26 @@ ha_codeowners:
- '@chemelli74'
ha_iot_class: Local Polling
ha_platforms:
+ - alarm_control_panel
+ - climate
- cover
+ - humidifier
- light
- sensor
- switch
-ha_ssdp: false
-ha_integration_type: integration
+ha_integration_type: hub
+ha_quality_scale: silver
---
The Comelit SimpleHome integration allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/domotica-e-smart-home).
There is support for the following platform types within Home Assistant:
-- **Comelit Serial Bridge** - allows local control for light, cover, irrigation and "other" devices; creates power sensors.
+- **Comelit Serial Bridge** - allows local control for light, cover, irrigation, climate, humidifier/dehumidifier and "other" devices; creates power sensors.
+- **Comelit VEDO System** - allows local control of the alarm system.
{% include integrations/config_flow.md %}
+
+## Alarm control panel
+
+The integration will create an alarm entity for each area and a sensor for each zone.
diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown
index 91862c9c7f69..db47f832d301 100644
--- a/source/_integrations/command_line.markdown
+++ b/source/_integrations/command_line.markdown
@@ -1,6 +1,6 @@
---
-title: Command Line
-description: Instructions on how to integrate the Command Line utility within Home Assistant.
+title: Command line
+description: Instructions on how to integrate the command line utility within Home Assistant.
ha_category:
- Binary sensor
- Cover
@@ -21,7 +21,7 @@ ha_codeowners:
- '@gjohansson-ST'
---
-The `command_line` offers functionality that issues specific commands to get data or to control a device.
+The **Command line** {% term integration %} offers functionality that issues specific commands to get data or to control a device.
@@ -43,7 +43,7 @@ command_line:
command:
description: The action to take to get the value.
required: true
- type: string
+ type: template
command_timeout:
description: Defines number of seconds for command timeout.
required: false
@@ -80,6 +80,11 @@ command_line:
description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload.
required: false
type: string
+ availability:
+ description: Defines a template to get the `available` state of the entity. If the template either fails to render or returns `True`, `"1"`, `"true"`, `"yes"`, `"on"`, `"enable"`, or a non-zero number, the entity will be `available`. If the template returns any other value, the entity will be `unavailable`. If not configured, the entity will always be `available`. Note that string comparisons are not case sensitive; `"TrUe"` and `"yEs"` are allowed.
+ required: false
+ type: template
+ default: true
scan_interval:
description: Define time in seconds between each update.
required: false
@@ -118,6 +123,10 @@ command_line:
description: The name used to display the cover in the frontend.
required: true
type: string
+ icon:
+ description: Defines a template for the icon of the entity.
+ required: false
+ type: template
unique_id:
description: An ID that uniquely identifies this cover. Set this to a unique value to allow customization through the UI.
required: false
@@ -126,6 +135,11 @@ command_line:
description: if specified, `command_state` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `command_state` returns a string "open", using `value_template` as in the example configuration above will allow you to translate that into the valid state `100`.
required: false
type: template
+ availability:
+ description: Defines a template to get the `available` state of the entity. If the template either fails to render or returns `True`, `"1"`, `"true"`, `"yes"`, `"on"`, `"enable"`, or a non-zero number, the entity will be `available`. If the template returns any other value, the entity will be `unavailable`. If not configured, the entity will always be `available`. Note that string comparisons are not case sensitive; `"TrUe"` and `"yEs"` are allowed.
+ required: false
+ type: template
+ default: true
scan_interval:
description: Define time in seconds between each update.
required: false
@@ -158,7 +172,7 @@ command_line:
command:
description: The action to take to get the value.
required: true
- type: string
+ type: template
command_timeout:
description: Defines number of seconds for command timeout
required: false
@@ -189,6 +203,11 @@ command_line:
description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload."
required: false
type: string
+ availability:
+ description: Defines a template to get the `available` state of the entity. If the template either fails to render or returns `True`, `"1"`, `"true"`, `"yes"`, `"on"`, `"enable"`, or a non-zero number, the entity will be `available`. If the template returns any other value, the entity will be `unavailable`. If not configured, the entity will always be `available`. Note that string comparisons are not case sensitive; `"TrUe"` and `"yEs"` are allowed.
+ required: false
+ type: template
+ default: true
device_class:
description: Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). It does not set the `unit_of_measurement`.
required: false
@@ -250,6 +269,11 @@ command_line:
description: "If specified, `command_state` will ignore the result code of the command but the template evaluating to `true` will indicate the switch is on."
required: false
type: string
+ availability:
+ description: Defines a template to get the `available` state of the entity. If the template either fails to render or returns `True`, `"1"`, `"true"`, `"yes"`, `"on"`, `"enable"`, or a non-zero number, the entity will be `available`. If the template returns any other value, the entity will be `unavailable`. If not configured, the entity will always be `available`. Note that string comparisons are not case sensitive; `"TrUe"` and `"yEs"` are allowed.
+ required: false
+ type: template
+ default: true
scan_interval:
description: Define time in seconds between each update.
required: false
diff --git a/source/_integrations/compensation.markdown b/source/_integrations/compensation.markdown
index d4ac6ed4b9ec..f71e9c18fa1f 100644
--- a/source/_integrations/compensation.markdown
+++ b/source/_integrations/compensation.markdown
@@ -31,7 +31,7 @@ compensation:
- [0.2, -80.0]
- [1.0, 0.0]
- media_player_db_volume:
+ media_player_zone_2_db_volume:
source: media_player.yamaha_receiver_zone_2
attribute: volume_level
unit_of_measurement: dB
diff --git a/source/_integrations/coned.markdown b/source/_integrations/coned.markdown
index 482ab3dc8173..0af5b2e515c4 100644
--- a/source/_integrations/coned.markdown
+++ b/source/_integrations/coned.markdown
@@ -4,7 +4,7 @@ description: Get energy usage from Consolidated Edison (ConEd) using the Opower
ha_category:
- Energy
- Sensor
-ha_release: 2023.9
+ha_release: 2023.8
ha_domain: coned
ha_integration_type: virtual
ha_supporting_domain: opower
diff --git a/source/_integrations/control4.markdown b/source/_integrations/control4.markdown
index a90dca89a9b2..89d82cf9a333 100644
--- a/source/_integrations/control4.markdown
+++ b/source/_integrations/control4.markdown
@@ -4,6 +4,7 @@ description: Instructions on adding a Control4 system to Home Assistant.
ha_release: '0.114'
ha_category:
- Light
+ - Media Player
ha_iot_class: Local Polling
ha_config_flow: true
ha_codeowners:
@@ -12,10 +13,11 @@ ha_domain: control4
ha_ssdp: true
ha_platforms:
- light
+ - media_player
ha_integration_type: integration
---
-The **Control4** {% term integration %} allows you to control and monitor lights from your local Control4 system. Your Control4 controller must be running OS 3.0+.
+The **Control4** {% term integration %} allows you to control and monitor lights and Room Media from your local Control4 system. Your Control4 controller must be running OS 3.0+.
## Prerequisites
diff --git a/source/_integrations/conversation.markdown b/source/_integrations/conversation.markdown
index 86cc5fc7f3a6..9c7e353bd941 100644
--- a/source/_integrations/conversation.markdown
+++ b/source/_integrations/conversation.markdown
@@ -5,7 +5,6 @@ ha_category:
- Voice
ha_release: 0.7
ha_quality_scale: internal
-ha_iot_class: Local Push
ha_codeowners:
- '@home-assistant/core'
- '@synesthesiam'
@@ -166,6 +165,7 @@ Send a message to a conversation agent for processing.
| `text` | no | Transcribed text input |
| `language` | yes | Language of the text |
| `agent_id` | yes | ID of conversation agent. The conversation agent is the brains of the assistant. It processes the incoming text commands. |
+| `conversation_id` | yes | ID of a new or previous conversation. Will continue an old conversation or start a new one. |
This service is able to return [response data](/docs/scripts/service-calls/#use-templates-to-handle-response-data). The response is the same response as for the
[`/api/conversation/process` API](https://developers.home-assistant.io/docs/intent_conversation_api#conversation-response).
diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown
index b42a4230b2d5..5f06b361b760 100644
--- a/source/_integrations/cover.mqtt.markdown
+++ b/source/_integrations/cover.mqtt.markdown
@@ -27,8 +27,6 @@ Optimistic mode can be forced, even if a `state_topic` / `position_topic` is def
The `mqtt` cover platform optionally supports a list of `availability` topics to receive online and offline messages (birth and LWT messages) from the MQTT cover device. During normal operation, if the MQTT cover device goes offline (i.e., publishes a matching `payload_not_available` to any `availability` topic), Home Assistant will display the cover as "unavailable". If these messages are published with the `retain` flag set, the cover will receive an instant update after subscription and Home Assistant will display correct availability state of the cover when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the cover as "unavailable" when Home Assistant starts up.
-
-
To use your MQTT cover in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -72,7 +70,7 @@ availability_template:
required: false
type: template
availability_topic:
- description: "The MQTT topic subscribed to to receive birth and LWT messages from the MQTT cover device. If an `availability` topic is not defined, the cover availability state will always be `available`. If an `availability` topic is defined, the cover availability state will be `unavailable` by default. Must not be used together with `availability`."
+ description: "The subscribed-to MQTT topic to receive birth and LWT messages from the MQTT cover device. If an `availability` topic is not defined, the cover availability state will always be `available`. If an `availability` topic is defined, the cover availability state will be `unavailable` by default. Must not be used together with `availability`."
required: false
type: string
command_topic:
@@ -89,7 +87,7 @@ device:
required: false
type: string
connections:
- description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
type: list
hw_version:
@@ -112,6 +110,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -126,7 +128,6 @@ device:
type: string
device_class:
description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`.
- default: None
required: false
type: string
enabled_by_default:
@@ -143,7 +144,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
diff --git a/source/_integrations/cover.template.markdown b/source/_integrations/cover.template.markdown
index 7c6ca4cba10b..58859db86ea3 100644
--- a/source/_integrations/cover.template.markdown
+++ b/source/_integrations/cover.template.markdown
@@ -54,7 +54,7 @@ cover:
required: false
type: string
value_template:
- description: Defines a template to get the state of the cover. Valid output values from the template are `open`, `opening`, `closing` and `closed` which are directly mapped to the corresponding states. In addition, `true` is valid as a synonym to `open` and `false` as a synonym to `closed`. If [both a `value_template` and a `position_template`](#combining_value_template_and_position_template) are specified, only `opening` and `closing` are set from the `value_template`. If the template produces a `None` value the state will be set to `unknown`.
+ description: Defines a template to get the state of the cover. Valid output values from the template are `open`, `opening`, `closing` and `closed` which are directly mapped to the corresponding states. In addition, `true` is valid as a synonym to `open` and `false` as a synonym to `closed`. If [both a `value_template` and a `position_template`](#combining-value_template-and-position_template) are specified, only `opening` and `closing` are set from the `value_template`. If the template produces a `None` value the state will be set to `unknown`.
required: false
type: template
position_template:
diff --git a/source/_integrations/cozytouch.markdown b/source/_integrations/cozytouch.markdown
index d057a1905de3..cf3f4f6b4955 100644
--- a/source/_integrations/cozytouch.markdown
+++ b/source/_integrations/cozytouch.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/cribl.markdown b/source/_integrations/cribl.markdown
index e0d9019a8f80..3490909392a9 100644
--- a/source/_integrations/cribl.markdown
+++ b/source/_integrations/cribl.markdown
@@ -3,7 +3,6 @@ title: Cribl
description: Send events to Cribl.
ha_category:
- History
-ha_iot_class: Local Push
ha_release: 0.13
ha_domain: cribl
ha_supporting_domain: splunk
diff --git a/source/_integrations/daikin.markdown b/source/_integrations/daikin.markdown
index 057ebb290fda..89e4e573322e 100644
--- a/source/_integrations/daikin.markdown
+++ b/source/_integrations/daikin.markdown
@@ -9,7 +9,6 @@ ha_category:
ha_release: 0.59
ha_iot_class: Local Polling
ha_config_flow: true
-ha_quality_scale: platinum
ha_codeowners:
- '@fredrike'
ha_domain: daikin
@@ -21,9 +20,11 @@ ha_platforms:
ha_integration_type: integration
---
-
- Daikin has removed their local API in newer products. They offer a cloud API accessible only under NDA, which is incompatible with open source. This affects units fitted with the BRP069C4x wifi adapter. Units listed under Supported Hardware below continue to have access to local control. Additionally the older but commonly available BRP072A42 adapter can be fitted to most if not all newer units for access to local control.
-
+
+
+Daikin has removed their local API in newer products. They offer a Onecta cloud API for controlling Daikin devices through the cloud, see the [Daikin Europe Developer Portal](https://developer.cloud.daikineurope.com) for more details. This affects units fitted with the BRP069C4x wifi adapter. Units listed under Supported Hardware below continue to have access to local control. Additionally the older but commonly available BRP072A42 adapter can be fitted to most if not all newer units for access to local control.
+
+
The **Daikin** {% term integration %} integrates Daikin air conditioning systems into Home Assistant.
diff --git a/source/_integrations/datadog.markdown b/source/_integrations/datadog.markdown
index 0b25132591dd..5c06a6ae6506 100644
--- a/source/_integrations/datadog.markdown
+++ b/source/_integrations/datadog.markdown
@@ -23,6 +23,14 @@ The integration also sends events from the logbook into Datadog, allowing you to
+## Setup
+
+You need to have a Datadog agent installed in a network accessible by Home Assistant.
+
+In the [Datadog Agent configuration](https://github.com/DataDog/datadog-agent/blob/main/pkg/config/config_template.yaml#L2203-L2207), you must enable [DogStatsD](https://docs.datadoghq.com/developers/dogstatsd/) non-local traffic to allow StatsD data collection from outside `localhost`.
+
+## Configuration
+
To use the `datadog` integration in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -42,7 +50,7 @@ port:
default: 8125
type: integer
prefix:
- description: Prefix to use.
+ description: Metric prefix to use.
required: false
default: "`hass`"
type: string
diff --git a/source/_integrations/default_config.markdown b/source/_integrations/default_config.markdown
index de570a8ba27d..c579916b7d70 100644
--- a/source/_integrations/default_config.markdown
+++ b/source/_integrations/default_config.markdown
@@ -13,48 +13,27 @@ ha_integration_type: system
This {% term integration %} is a meta-component and configures a default set of integrations for Home Assistant to load. The integrations that will be loaded are:
-- [Automation](/integrations/automation/) (`automation`)
- [Assist pipeline](/integrations/assist_pipeline/) (`assist_pipeline`)
- [Backup](/integrations/backup/) (`backup`)
- [Bluetooth](/integrations/bluetooth/) (`bluetooth`)
- [Configuration](/integrations/config/) (`config`)
- [Conversation](/integrations/conversation/) (`conversation`)
-- [Counter](/integrations/counter/) (`counter`)
- [DHCP discovery](/integrations/dhcp/) (`dhcp`)
- [Energy](/integrations/energy/) (`energy`)
-- [Frontend](/integrations/frontend/) (`frontend`)
-- [Hardware](/integrations/hardware/) (`hardware`)
- [History](/integrations/history/) (`history`)
- [Home Assistant Alerts](/integrations/homeassistant_alerts) (`homeassistant_alerts`)
- [Home Assistant Cloud](/integrations/cloud/) (`cloud`)
- [Image upload](/integrations/image_upload/) (`image_upload`)
-- [Input boolean](/integrations/input_boolean/) (`input_boolean`)
-- [Input button](/integrations/input_button/) (`input_button`)
-- [Input datetime](/integrations/input_datetime/) (`input_datetime`)
-- [Input number](/integrations/input_number/) (`input_number`)
-- [Input select](/integrations/input_select/) (`input_select`)
-- [Input text](/integrations/input_text/) (`input_text`)
- [Logbook](/integrations/logbook/) (`logbook`)
-- [Logger](/integrations/logger/) (`logger`)
-- [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`)
-- [Network](/integrations/network/) (`network`)
-- [Person](/integrations/person/) (`person`)
-- [Schedule](/integrations/schedule/) (`schedule`)
-- [Scene](/integrations/scene/) (`scene`)
-- [Scripts](/integrations/script/) (`script`)
- [Simple Service Discovery Protocol (SSDP)](/integrations/ssdp/) (`ssdp`)
- [Stream](/integrations/stream/) (`stream`)
- [Sun](/integrations/sun/) (`sun`)
-- [System health](/integrations/system_health/) (`system_health`)
-- [Tag](/integrations/tag/) (`tag`)
-- [Timer](/integrations/timer/) (`timer`)
- [USB](/integrations/usb/) (`usb`)
- [Webhooks](/integrations/webhook) (`webhook`)
- [Zero-configuration networking (zeroconf)](/integrations/zeroconf/) (`zeroconf`)
-- [Zone](/integrations/zone/) (`zone`)
## Configuration
diff --git a/source/_integrations/demo.markdown b/source/_integrations/demo.markdown
index bc9a0712c0a0..9255c2901929 100644
--- a/source/_integrations/demo.markdown
+++ b/source/_integrations/demo.markdown
@@ -20,6 +20,7 @@ ha_platforms:
- climate
- cover
- date
+ - datetime
- device_tracker
- event
- fan
@@ -65,7 +66,6 @@ Available demo platforms:
- [Image processing](/integrations/image_processing/) (`image_processing`)
- [Light](/integrations/light/) (`light`)
- [Lock](/integrations/lock/) (`lock`)
-- [Mailbox](/integrations/mailbox/) (`mailbox`)
- [Media player](/integrations/media_player/) (`media_player`)
- [Notification](/integrations/notify/) (`notify`)
- [Number](/integrations/number/) (`number`)
diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown
index 83addea11354..8c7c893d980b 100644
--- a/source/_integrations/denonavr.markdown
+++ b/source/_integrations/denonavr.markdown
@@ -28,6 +28,7 @@ Known supported devices:
- Denon AVR-X1500H
- Denon AVR-X1600H
- Denon AVR-X1700H
+- Denon AVR-X1800H
- Denon AVR-X2000
- Denon AVR-X2100W
- Denon AVR-X2200W
@@ -68,13 +69,16 @@ Known supported devices:
- Denon AVR-S740H
- Denon AVR-S750H
- Denon AVR-S760H
+- Denon AVR-S770H
- Denon AVR-S940H
- Denon AVR-S950H
- Denon AVR-S960H
- Denon DN-500AV
+- Denon DRA-800H
- Marantz AV7702
- Marantz AV7703
- Marantz AV7704
+- Marantz AV8802A
- Marantz CINEMA 50
- Marantz CINEMA 70s
- Marantz M-CR510
@@ -108,6 +112,8 @@ Known supported devices:
If your model is not on the list then give it a test, if everything works correctly then add it to the list by clicking on the **Edit** link at the bottom of this page.
+If you are using VLANs, Home Assistant needs access to the following ports on the AVR: 23, 8080, and 60006 (all TCP).
+
If you have something else using the IP controller for your Denon AVR 3808CI, such as your URC controller, it will not work! There is either a bug or security issue with some models where only one device could be controlling the IP functionality.
diff --git a/source/_integrations/device_automation.markdown b/source/_integrations/device_automation.markdown
index 1036db1e3907..cab524a1b2d5 100644
--- a/source/_integrations/device_automation.markdown
+++ b/source/_integrations/device_automation.markdown
@@ -1,6 +1,6 @@
---
-title: Device Automation
-description: Information about the Device Automation plugin.
+title: Device automation
+description: Information about the device automation plugin.
ha_category:
- Automation
ha_release: 0.7
@@ -11,7 +11,7 @@ ha_domain: device_automation
ha_integration_type: system
---
-Device Automations is a plugin for the automation integration to allow other integrations to provide device specific triggers, conditions and actions.
+**Device automation** is a plugin for the automation integration to allow other integrations to provide device specific triggers, conditions and actions.
There is no device automation specific configuration. Instead, it is configured as part of the normal automations.
diff --git a/source/_integrations/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown
index a198427b6f34..ee7ad9ef7e2a 100644
--- a/source/_integrations/device_tracker.mqtt.markdown
+++ b/source/_integrations/device_tracker.mqtt.markdown
@@ -13,8 +13,6 @@ The `mqtt` device tracker platform allows you to define new device_trackers thro
## Configuration
-
-
To use this device tracker in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -75,9 +73,9 @@ device:
required: false
type: string
connections:
- description: "A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `'connections': ['mac', '02:5b:26:a8:dc:12']`."
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
- type: [list, map]
+ type: list
hw_version:
description: The hardware version of the device.
required: false
@@ -161,7 +159,7 @@ payload_reset:
description: The payload value that will have the device's location automatically derived from Home Assistant's zones.
required: false
type: string
- default: "None"
+ default: '"None"'
qos:
description: The maximum QoS level to be used when receiving and publishing messages.
required: false
diff --git a/source/_integrations/device_trigger.mqtt.markdown b/source/_integrations/device_trigger.mqtt.markdown
index c14cf884a278..752312b24c6b 100644
--- a/source/_integrations/device_trigger.mqtt.markdown
+++ b/source/_integrations/device_trigger.mqtt.markdown
@@ -53,9 +53,9 @@ device:
required: false
type: string
connections:
- description: "A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `'connections': ['mac', '02:5b:26:a8:dc:12']`."
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
- type: [list, map]
+ type: list
identifiers:
description: A list of IDs that uniquely identify the device. For example a serial number.
required: false
@@ -72,6 +72,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
diff --git a/source/_integrations/devolo_home_network.markdown b/source/_integrations/devolo_home_network.markdown
index 2e311a037b85..3c32f23cd682 100755
--- a/source/_integrations/devolo_home_network.markdown
+++ b/source/_integrations/devolo_home_network.markdown
@@ -53,22 +53,22 @@ Currently the following device types within Home Assistant are supported.
### Images
-- QR code of your guest wifi credentials
+- QR code of your guest Wi-Fi credentials
- Updates every 15 seconds if changes are detected
- Is enabled by default
### Presence detection
-- Detect presence of devices connected to the main or the guest wifi
+- Detect presence of devices connected to the main or the guest Wi-Fi
- Updates every 15 seconds
- Automatically adds new devices as disabled entities unless disabled via system option
### Sensors
-- Number of connected wifi clients
+- Number of connected Wi-Fi clients
- Updates every 15 seconds
- Is enabled by default
-- Number of neighbored wifi networks
+- Number of neighbored Wi-Fi networks
- Updates every 5 minutes
- Is disabled by default because it runs quite long
- Number of PLC devices in the same PLC network
@@ -80,7 +80,7 @@ Currently the following device types within Home Assistant are supported.
### Switch
-- Turn on/off guest wifi
+- Turn on/off guest Wi-Fi
- Is enabled by default
- Turn on/off the device LEDs
- Is enabled by default
@@ -106,7 +106,7 @@ The list of supported devolo devices depends on the device firmware and the devi
- dLAN 550+ Wifi
- dLAN 550 WiFi
-Since firmware 7.10 also the following device without Wifi can be used as long as the corresponding entities are supported:
+Since firmware 7.10 also the following device without Wi-Fi can be used as long as the corresponding entities are supported:
- Magic 2 LAN triple
- Magic 2 DinRail
diff --git a/source/_integrations/dialogflow.markdown b/source/_integrations/dialogflow.markdown
index 1558b5e94274..87dd2c606065 100644
--- a/source/_integrations/dialogflow.markdown
+++ b/source/_integrations/dialogflow.markdown
@@ -10,12 +10,14 @@ ha_domain: dialogflow
ha_integration_type: integration
---
-The **Dialogflow** {% term integration %} is designed to be used with the [webhook](https://cloud.google.com/dialogflow/es/docs/fulfillment-webhook) integration of [Dialogflow](https://cloud.google.com/dialogflow/docs/). When a conversation ends with a user, Dialogflow sends an action and parameters to the webhook.
+The **Dialogflow** {% term integration %} is designed to be used with the [webhook](https://cloud.google.com/dialogflow/es/docs/fulfillment-webhook) integration of [Dialogflow](https://cloud.google.com/dialogflow/docs/). After each phrase a user says, Dialogflow sends an action and parameters to the webhook.
-To be able to receive messages from Dialogflow, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic). Dialogflow will return fallback answers if your server does not answer or takes too long (more than 5 seconds).
+To be able to receive messages from Dialogflow, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/integrations/homeassistant/#editing-the-general-settings-in-yaml). Dialogflow will return fallback answers if your server does not answer or takes too long (more than 5 seconds).
Dialogflow could be [integrated](https://cloud.google.com/dialogflow/es/docs/integrations) with many popular messaging, virtual assistant and IoT platforms.
+
After the [Conversational Actions sunset on June 13, 2023](https://developers.google.com/assistant/ca-sunset), Dialogflow can no longer be integreated with Google Assistant
+
Using Dialogflow will be easy to create conversations like:
_User: What is the temperature at home?_
diff --git a/source/_integrations/diaz.markdown b/source/_integrations/diaz.markdown
index bf407beb8235..644eb0ab524c 100644
--- a/source/_integrations/diaz.markdown
+++ b/source/_integrations/diaz.markdown
@@ -1,12 +1,12 @@
---
title: Diaz
-description: Connect and control your Diaz devices using the Motion Blinds integration
+description: Connect and control your Diaz devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: diaz
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/discord.markdown b/source/_integrations/discord.markdown
index a5edbf69e388..5c7d7cdbc408 100644
--- a/source/_integrations/discord.markdown
+++ b/source/_integrations/discord.markdown
@@ -51,7 +51,7 @@ Now use the Discord Authorization page with the **Application ID** of your [appl
Wait for the confirmation which should say "Authorized".
-Once the bot has been added to your server, get the channel ID of the channel you want the bot to operate in. In The Discord application go to **Settings** > **Advanced** > **Enable Developer Mode**.
+Once the bot has been added to your server, get the channel ID of the channel you want the bot to operate in. Open Discord and go to **User Settings** > **Advanced** > **Enable Developer Mode**. User settings can be found next to your username in Discord.
![Screenshot of Discord bot create prompt](/images/screenshots/discord-api.png)
@@ -69,26 +69,26 @@ When adding the Discord integration you will be asked for an API Key. Enter the
The following attributes can be placed inside the `data` key of the service call for extended functionality:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `images` | yes | The file(s) to attach to message.
-| `urls` | yes | The file(s) to download from a remote URL and attach to message.
-| `verify_ssl` | yes | A boolean to determine if SSL certs should be verified when calling the remote URLs in the `url` attribute. Defaults to `True`.
-| `embed` | yes | Array of [Discord embeds](https://discordpy.readthedocs.io/en/latest/api.html#embed). *NOTE*: if using `embed`, `message` is still required.
+| Attribute | Optional | Description |
+| ------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
+| `images` | yes | The file(s) to attach to message. |
+| `urls` | yes | The file(s) to download from a remote URL and attach to message. |
+| `verify_ssl` | yes | A boolean to determine if SSL certs should be verified when calling the remote URLs in the `url` attribute. Defaults to `True`. |
+| `embed` | yes | Array of [Discord embeds](https://discordpy.readthedocs.io/en/latest/api.html#embed). *NOTE*: if using `embed`, `message` is still required. |
To include messages with embedding, use these attributes underneath the `embed` key:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `title` | yes | Title of the embed.
-| `description` | yes | Description of the embed.
-| `color` | yes | Color code of the embed. This value is an *int*.
-| `url` | yes | URL of the embed.
-| `author` | yes | Sets the footer for the embed content.
-| `footer` | yes | Sets the footer for the embed content.
-| `thumbnail` | yes | Sets the thumbnail for the embed content.
-| `image` | yes | Sets the image for the embed content.
-| `fields` | yes | Adds a field to the embed object. `name` and `value` are *required*, `inline` is *true* by default.
+| Attribute | Optional | Description |
+| ------------- | -------- | ---------------------------------------------------------------------------------------------------- |
+| `title` | yes | Title of the embed. |
+| `description` | yes | Description of the embed. |
+| `color` | yes | Color code of the embed. This value is an *int*. |
+| `url` | yes | URL of the embed. |
+| `author` | yes | Sets the footer for the embed content. |
+| `footer` | yes | Sets the footer for the embed content. |
+| `thumbnail` | yes | Sets the thumbnail for the embed content. |
+| `image` | yes | Sets the image for the embed content. |
+| `fields` | yes | Adds a field to the embed object. `name` and `value` are *required*, `inline` is *true* by default. |
### Example service call
@@ -117,7 +117,7 @@ To include messages with embedding, use these attributes underneath the `embed`
- "https://example.com/video.mp4"
```
-Note that `verify_ssl` defaults to `True`, and that any remote hosts will need to be in your [`allowlist_external_urls`](/docs/configuration/basic/#allowlist_external_urls) list. Discord limits attachment size to 8MB, so anything exceeding this will be skipped and noted in the error log.
+Note that `verify_ssl` defaults to `True`, and that any remote hosts will need to be in your [`allowlist_external_urls`](/integrations/homeassistant/#allowlist_external_urls) list. Discord limits attachment size to 8MB, so anything exceeding this will be skipped and noted in the error log.
### Example embed service call
diff --git a/source/_integrations/dlna_dmr.markdown b/source/_integrations/dlna_dmr.markdown
index a915098ab80e..3f2018e566ea 100644
--- a/source/_integrations/dlna_dmr.markdown
+++ b/source/_integrations/dlna_dmr.markdown
@@ -7,7 +7,6 @@ ha_release: 0.76
ha_iot_class: Local Push
ha_config_flow: true
ha_codeowners:
- - '@StevenLooman'
- '@chishm'
ha_domain: dlna_dmr
ha_platforms:
diff --git a/source/_integrations/doorbird.markdown b/source/_integrations/doorbird.markdown
index d8a190a446bb..a530813955a1 100644
--- a/source/_integrations/doorbird.markdown
+++ b/source/_integrations/doorbird.markdown
@@ -31,7 +31,7 @@ There is currently support for the following device types within Home Assistant:
It is recommended to set up a new & dedicated account on your DoorBird App/web portal for use with Home Assistant. The instructions in this document refer specifically to the DoorBird IOS/Android app. Still, most actions can also be performed using the web-based [DoorBird - WebAdmin](https://webadmin.doorbird.com) portal and logging in on your DoorBird admin account.
-To setup a new account for Home Assistant, open the DoorBird App by clicking settings (cog icon) -> Administration-> LOGIN (using your DoorBird App Administration details). Under the "USER" section, choose "Add". This new user account requires specific permissions enabled (depending on what functionality you want). Permissions can be found under "Permissions". The following permissions are recommended (or amend depending on your requirements:
+To setup a new account for Home Assistant, open the DoorBird App by selecting **Settings** (cog icon) > **Administration** > **LOGIN** (using your DoorBird App Administration details). Under the **USER** section, choose **Add**. This new user account requires specific permissions enabled (depending on what functionality you want). Permissions can be found under **Permissions**. The following permissions are recommended (or amend depending on your requirements:
- "Watch Always" (live view)
- "History" (last motion)
@@ -63,7 +63,7 @@ localhost:8123`. Replace `{DEVICE_TOKEN}` with the token specified in your confi
Please note that clearing device events will require configuration steps above to be taken again. It could also affect other third-party applications you may use with your DoorBird device. It will not break the official mobile app in any way, so mobile push notifications will still work.
-If DoorBird was setup using UI prompts, a token can be discovered through DoorBird App by clicking settings (cog icon) -> Administration-> LOGIN (using your App Administration details). Under the "FAVORITES" section, choose "HTTP(S) Calls". This displays all events and the associated HTTP URL. In that URL field, you will be able to see the token that was auto-generated by Home Assistant.
+If DoorBird was setup using UI prompts, a token can be discovered through DoorBird App by selecting **Settings** (cog icon) > **Administration** > **LOGIN** (using your App Administration details). Under the **FAVORITES** section, choose **HTTP(S) Calls**. This displays all events and the associated HTTP URL. In that URL field, you will be able to see the token that was auto-generated by Home Assistant.
### Event data
@@ -87,7 +87,7 @@ Once events have been registered on the DoorBird device, they must be attached t
The schedules can be found by navigating to the following area of the DoorBird app (Android or IOS):
-Settings (cog icon) -> Administration -> LOGIN LOGIN (using your App Administration details) -> (under "EXPERT SETTINGS") Schedule for doorbell
+**Settings** (cog icon) > **Administration** > **LOGIN** (using your App Administration details) > (under **EXPERT SETTINGS**) Schedule for doorbell.
- `Push notification`
- `Trigger Relay ("Relay 1" or "Relay 2")`
diff --git a/source/_integrations/dooya.markdown b/source/_integrations/dooya.markdown
index be4e6b48b5bc..552f79c02616 100644
--- a/source/_integrations/dooya.markdown
+++ b/source/_integrations/dooya.markdown
@@ -1,12 +1,12 @@
---
title: Dooya
-description: Connect and control your Dooya devices using the Motion Blinds integration
+description: Connect and control your Dooya devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: dooya
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/dormakaba_dkey.markdown b/source/_integrations/dormakaba_dkey.markdown
index dd0e760b71c0..251acddf94aa 100644
--- a/source/_integrations/dormakaba_dkey.markdown
+++ b/source/_integrations/dormakaba_dkey.markdown
@@ -19,9 +19,17 @@ ha_integration_type: device
Integrates Dormakaba dKey Bluetooth Low Energy connected locks into Home Assistant.
+The integration only supports connecting to the lock directly via Bluetooth. Connecting via the Dormakaba dKey gateway is not supported.
+
{% include integrations/config_flow.md %}
In addition to a lock entity, each added dKey lock will also have:
- A battery sensor
- A binary_sensor which shows if the door is open or not
- A binary_sensor which shows the position of the lock's dead bolt
+
+
+
+The Dormakaba dKey lock is currently not working with USB dongles or built-in Bluetooth radios, only [ESPHome Bluetooth proxies](/integrations/bluetooth/#remote-adapters-bluetooth-proxies) configured to allow active connections work reliably.
+
+
diff --git a/source/_integrations/downloader.markdown b/source/_integrations/downloader.markdown
index 34f25bbd2911..1155ea8a033f 100644
--- a/source/_integrations/downloader.markdown
+++ b/source/_integrations/downloader.markdown
@@ -6,25 +6,17 @@ ha_category:
ha_release: pre 0.7
ha_quality_scale: internal
ha_domain: downloader
+ha_codeowners:
+ - '@erwindouna'
ha_integration_type: integration
+ha_config_flow: true
---
-The `downloader` integration provides a service to download files. It will raise an error and not continue to set itself up when the download directory does not exist. The directory needs to be writable for the user that is running Home Assistant.
+The **Downloader** {% term integration %} provides a service to download files. It will raise an error and not continue to set itself up when the download directory does not exist. The directory needs to be writable for the user that is running Home Assistant.
-To enable it, add the following lines to your `configuration.yaml` file:
+{% include integrations/config_flow.md %}
-```yaml
-# Example configuration.yaml entry
-downloader:
- download_dir: downloads
-```
-
-{% configuration %}
-download_dir:
- description: "If the path is not absolute, it's assumed to be relative to the Home Assistant configuration directory (eg. `.homeassistant/downloads`)."
- required: true
- type: string
-{% endconfiguration %}
+If the path is not absolute, it’s assumed to be relative to the Home Assistant configuration directory (for example, .homeassistant/downloads).
### Use the service
diff --git a/source/_integrations/drop_connect.markdown b/source/_integrations/drop_connect.markdown
index 1563be558462..d1994cc4b79e 100644
--- a/source/_integrations/drop_connect.markdown
+++ b/source/_integrations/drop_connect.markdown
@@ -38,20 +38,9 @@ There is currently support for the following DROP products within Home Assistant
- **RO Filter**: reverse osmosis drinking water filtration.
- **Salt Sensor**: alerts when the salt level in the softener brine tank is low.
-### Configuration
+### Prerequisites
-To use DROP with Home Assistant, you must have already configured the [MQTT](/integrations/mqtt/) platform. It is
-recommended
-that you create a unique user to connect your DROP Hub to your MQTT broker. If you are
-using the Mosquitto add-on, go to **Settings > Add-ons** in the Home Assistant UI and select the Mosquitto broker.
-Under **Configuration**, enter a new username and password for your DROP Hub in the **Logins** field:
-
-```yaml
-- username: drop
- password: your_unique_password
-```
-
-If you are using a different MQTT broker, please reference its documentation to learn how to add a new user.
+To use DROP with Home Assistant, you must have already configured the [MQTT](/integrations/mqtt/) platform.
To enable the DROP integration, use the DROP Connect app to connect your DROP Hub to your MQTT broker:
@@ -60,7 +49,19 @@ To enable the DROP integration, use the DROP Connect app to connect your DROP Hu
- Enter the MQTT broker address, port number, username, and password.
- Click **Connect** and confirm that the DROP Hub has connected to the MQTT broker.
-Once the DROP Hub is connected to your MQTT broker, the devices on your DROP system will be discovered by Home
+Once the DROP Hub is connected to your MQTT broker, the devices on your DROP system should be discovered by Home
Assistant.
-Go to **Settings > Devices & Services** in the Home Assistant UI to add your DROP devices.
+{% details "Manual configuration steps" %}
+
+- Browse to your Home Assistant instance.
+- Go to **{% my integrations title="Settings > Devices & Services" %}**.
+- Set up the new discovered devices.
+
+{% enddetails %}
+
+
+
+The MQTT broker address and port used for the DROP Hub must be the same as configured for the Home Assistant MQTT integration.
+
+
diff --git a/source/_integrations/dsmr.markdown b/source/_integrations/dsmr.markdown
index c0acc356e453..f115aec63257 100644
--- a/source/_integrations/dsmr.markdown
+++ b/source/_integrations/dsmr.markdown
@@ -92,7 +92,7 @@ $ docker run --device /dev/ttyUSB0:/dev/ttyUSB0 -d --name="home-assistant" -v /h
- [ser2net](https://ser2net.sourceforge.net)
- [Smart Meter bridge](https://github.com/legolasbo/smartmeterBridge)
- [WIZnet WIZ110SR](https://www.wiznet.io/product-item/wiz110sr/)
-- [esp8266 espeasy (Poluket)](https://www.domohab.be/produit/kit-complet-passerelle-compteur/) (create for Sagemcom T211 model in Belgium)
+- [esp8266 SmartMeter (Poluket)](https://www.domohab.be/categorie-produit/passerelle/) (create for DSMR5 / ESMR5 Meter)
DIY solutions (ESP8266 based):
diff --git a/source/_integrations/dsmr_reader.markdown b/source/_integrations/dsmr_reader.markdown
index f355a282af1a..2dc388f016fd 100644
--- a/source/_integrations/dsmr_reader.markdown
+++ b/source/_integrations/dsmr_reader.markdown
@@ -9,10 +9,11 @@ ha_config_flow: true
ha_mqtt: true
ha_release: 0.103
ha_codeowners:
- - '@depl0y'
+ - '@sorted-bits'
- '@glodenox'
ha_domain: dsmr_reader
ha_platforms:
+ - diagnostics
- sensor
ha_integration_type: integration
---
diff --git a/source/_integrations/dte_energy_bridge.markdown b/source/_integrations/dte_energy_bridge.markdown
index 34dd2cf55f80..f8b4ab1e4d77 100644
--- a/source/_integrations/dte_energy_bridge.markdown
+++ b/source/_integrations/dte_energy_bridge.markdown
@@ -1,6 +1,6 @@
---
title: DTE Energy Bridge
-description: Instructions on how to setup DTE Energy Bridge with Home Assistant.
+description: Setup early-model DTE Energy Bridge with Home Assistant.
ha_category:
- Energy
ha_release: 0.21
@@ -11,18 +11,20 @@ ha_platforms:
ha_integration_type: integration
---
-A sensor platform for the [DTE](https://www.newlook.dteenergy.com/) Energy Bridge. To find out which version of the DTE Energy Bridge sensor you have, find the status LED on your box.
+A sensor platform for [DTE](https://www.newlook.dteenergy.com/) using an early model of the Energy Bridge. To find out which version of the DTE Energy Bridge you have, find the status LED on your box.
- If the status LED is on the top, you have a v1.
- If the status LED is on the front, you have a v2.
-The firmware of the DTE v2 bridges that started shipping circa mid-2020 will not work with this integration.
+The firmware of the DTE v2 bridges that started shipping circa mid-2020 will not work with this integration. This includes the model containing integrated Wi-Fi.
You can check if your firmware is still supported by trying accessing `http://{ip_address}:8888/zigbee/se/instantaneousdemand`, and see if
you get a response.
+Later model DTE Energy Bridge hardware uses [MQTT](https://www.home-assistant.io/integrations/mqtt/) to communicate your energy data with Home Assistant.
+
To enable this sensor, add the following lines to your `configuration.yaml` file:
diff --git a/source/_integrations/duquesne_light.markdown b/source/_integrations/duquesne_light.markdown
new file mode 100644
index 000000000000..269246a44490
--- /dev/null
+++ b/source/_integrations/duquesne_light.markdown
@@ -0,0 +1,20 @@
+---
+title: Duquesne Light
+description: Get energy usage from Duquesne Light using the Opower integration
+ha_category:
+ - Energy
+ - Sensor
+ha_release: 2023.8
+ha_domain: duquesne_light
+ha_integration_type: virtual
+ha_supporting_domain: opower
+ha_supporting_integration: Opower
+ha_codeowners:
+ - '@tronikos'
+ha_config_flow: true
+ha_platforms:
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/dwd_weather_warnings.markdown b/source/_integrations/dwd_weather_warnings.markdown
index ba7c19bc3bc8..52a2e5eade44 100644
--- a/source/_integrations/dwd_weather_warnings.markdown
+++ b/source/_integrations/dwd_weather_warnings.markdown
@@ -22,7 +22,9 @@ The **Deutscher Wetterdienst Weather Warnings** {% term integration %} uses the
{% configuration_basic %}
Warncell ID or name:
- description: Identifier of the region. It can be a warncell ID (integer) or a warncell name. It is heavily advised to use warncell ID because a warncell name is sometimes not unique. A list of valid warncell IDs and names can be found [here](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.html). Some of the warncells are outdated but still listed. If the setup fails, search the list for a similar sounding warncell. If the warncell name is not unique, `" (not unique used ID)!"` will be added to the reported `region_name`. Setting this field is required.
+ description: Identifier of the region. It can be a warncell ID (integer) or a warncell name. It is heavily advised to use warncell ID because a warncell name is sometimes not unique. A list of valid warncell IDs and names can be found [here](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.html). Some of the warncells are outdated but still listed. If the setup fails, search the list for a similar sounding warncell. If the warncell name is not unique, `" (not unique used ID)!"` will be added to the reported `region_name`.
+Device tracker entity:
+ description: A `device_tracker` entity that will be used to identify the warncell. The entity *has* to contain the attributes `latitude` and `longitude`. Setting either this field or `Warncell ID or name` is required, but not both.
{% endconfiguration_basic %}
### Attributes
diff --git a/source/_integrations/easyenergy.markdown b/source/_integrations/easyenergy.markdown
index 1ad9c778a5f4..3797a95cffd9 100644
--- a/source/_integrations/easyenergy.markdown
+++ b/source/_integrations/easyenergy.markdown
@@ -76,6 +76,7 @@ Fetches the hourly prices for gas.
| Service data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
+| `config_entry` | no | Config entry to use. | 013713c172577bada2874a32dbe44feb
| `incl_vat` | no | Defines whether the prices include or exclude VAT. Defaults to True | False
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
@@ -105,6 +106,7 @@ Fetches the hourly prices for energy that you use (buy).
| Service data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
+| `config_entry` | no | Config entry to use. | 013713c172577bada2874a32dbe44feb
| `incl_vat` | no | Defines whether the prices include or exclude VAT. Defaults to True | False
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
@@ -134,6 +136,7 @@ Fetches the hourly prices for energy that you return (sell).
| Service data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
+| `config_entry` | no | Config entry to use. | 013713c172577bada2874a32dbe44feb
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| `end` | yes | End time to get prices from. Defaults to today 00:00:00 | 2023-01-01 00:00:00
@@ -171,6 +174,7 @@ template:
- service: easyenergy.get_energy_usage_prices
response_variable: response
data:
+ config_entry: "013713c172577bada2874a32dbe44feb"
incl_vat: true
sensor:
- name: Energy prices
diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown
index 9d5cd2ef4eee..03442cea98cd 100644
--- a/source/_integrations/ecobee.markdown
+++ b/source/_integrations/ecobee.markdown
@@ -8,13 +8,12 @@ ha_category:
- Notifications
- Number
- Sensor
+ - Switch
- Weather
featured: true
ha_release: 0.9
ha_iot_class: Cloud Polling
ha_config_flow: true
-ha_codeowners:
- - '@marcolivierarsenault'
ha_domain: ecobee
ha_platforms:
- binary_sensor
@@ -23,6 +22,7 @@ ha_platforms:
- notify
- number
- sensor
+ - switch
- weather
ha_zeroconf: true
ha_homekit: true
@@ -35,6 +35,10 @@ The **ecobee** {% term integration %} lets you control and view sensor data from
You will need to obtain an API key from ecobee's [developer site](https://www.ecobee.com/developers/) to use this integration. To get the key, your thermostat must be registered on ecobee's website (which you likely would have already done while installing your thermostat). Once you have done that, perform the following steps.
+
+As of March 28th, 2024, ecobee is no longer accepting new developer subscriptions, and there is no ETA for when they will be allowed again. Existing developers are not affected.
+
+
1. Click on the **Become a developer** link on the [developer site](https://www.ecobee.com/home/developer/loginDeveloper.jsp).
2. Log in with your ecobee credentials. (Make sure multifactor authentication is disabled to meet the developer login form's limits. If you've already enabled MFA, the web portal doesn't support disabling it. The iOS and Android apps do under Account > Account Security. You can re-enable MFA after becoming a developer.)
3. Accept the SDK agreement.
@@ -86,15 +90,15 @@ You must [restart Home Assistant](/docs/configuration/#reloading-changes) for th
## Notifications
-The `ecobee` notify platform allows you to send notifications to an ecobee thermostat. The `target` parameter of the service call is required to specify the index of the recipient thermostat. The index values assigned to the thermostats are consecutive integers, starting at 0.
+The `ecobee` notify platform allows you to send notifications to an ecobee thermostat. For each thermostat found, a `notify` entity will be added.
Example service call:
```yaml
-service: notify.ecobee
+service: notify.send_message
data:
message: "Hello, this is your thermostat."
- target: 0
+ entity_id: notify.ecobee
```
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
@@ -138,6 +142,12 @@ The ecobee climate entity has some extra attributes to represent the state of th
The ecobee thermostat supports the addition of an accessory. If you have an air exchanger (ventilator, HRV, or ERV), you can control it via the min time home and min time away numbers.
+### Switch
+
+The `ventilator 20 min` switch is behaving like the switch in the physical ecobee device. When switched on, the ventilator turns on for 20 min. When turned off, it stops the ventilator.
+
+*Note: this does not interact with the `ventilator min time`*
+
### Number
| Name | Description |
@@ -185,12 +195,12 @@ Delete a vacation on the selected ecobee thermostat.
### Service `ecobee.resume_program`
-Resumes the currently active schedule.
+Resumes the standard active schedule of presets. This cancels any manual temperature settings or selected preset. This will not cancel vacation events, use `delete_vacation`.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------ |
-| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Use `entity_id: all` to target all. |
-| `resume_all` | no | true or false |
+| `entity_id` | yes | String or list of strings that point at `entity_id`s of climate devices to control. Omit to target all ecobee thermostats. |
+| `resume_all` | no | `true` will resume the standard schedule. `false` will only cancel the latest active event, which is not used often. |
### Service `ecobee.set_fan_min_on_time`
@@ -198,7 +208,7 @@ Sets the minimum amount of time that the fan will run per hour.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------ |
-| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Use `entity_id: all` to target all. |
+| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Omit to target all ecobee thermostats. |
| `fan_min_on_time` | no | integer (e.g., 5) |
### Service `ecobee.set_dst_mode`
@@ -207,7 +217,7 @@ Enable/disable automatic daylight savings time.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------ |
-| `entity_id` | yes | ecobee thermostat on which to set daylight savings time mode |
+| `entity_id` | yes | ecobee thermostat on which to set daylight savings time mode. Omit to target all ecobee thermostats. |
| `dst_enabled` | no | true or false |
### Service `ecobee.set_mic_mode`
@@ -216,7 +226,7 @@ Enable/disable Alexa mic (only for ecobee 4).
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------- |
-| `entity_id` | yes | ecobee thermostat on which to set the mic mode |
+| `entity_id` | yes | ecobee thermostat on which to set the mic mode. Omit to target all ecobee thermostats. |
| `mic_enabled` | no | true or false |
### Service `ecobee.set_occupancy_modes`
@@ -225,6 +235,6 @@ Enable/disable Smart Home/Away and Follow Me modes.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------- |
-| `entity_id` | yes | ecobee thermostat on which to set occupancy modes |
+| `entity_id` | yes | ecobee thermostat on which to set occupancy modes. Omit to target all ecobee thermostats. |
| `auto_away` | yes | true or false |
| `follow_me` | yes | true or false |
diff --git a/source/_integrations/ecovacs.markdown b/source/_integrations/ecovacs.markdown
index b514bf842d04..a8b7b579ec3a 100644
--- a/source/_integrations/ecovacs.markdown
+++ b/source/_integrations/ecovacs.markdown
@@ -1,141 +1,94 @@
---
title: Ecovacs
-description: Instructions on how to integrate Ecovacs vacuums within Home Assistant.
+description: Instructions on how to integrate Ecovacs vacuums and mowers within Home Assistant.
ha_category:
- Hub
+ - Lawn mower
- Vacuum
ha_iot_class: Cloud Push
ha_release: 0.77
ha_codeowners:
- '@OverloadUT'
- '@mib1185'
+ - '@edenhaus'
+ - '@Augar'
+ha_config_flow: true
ha_domain: ecovacs
ha_platforms:
+ - binary_sensor
+ - button
+ - diagnostics
+ - event
+ - image
+ - lawn_mower
+ - number
+ - select
+ - sensor
+ - switch
- vacuum
ha_integration_type: integration
---
-The `ecovacs` integration is the main integration to integrate all [Ecovacs](https://www.ecovacs.com) (Deebot) vacuums. You will need your Ecovacs account information (username, password) to discover and control vacuums in your account.
+The `ecovacs` {% term integration %} is the main integration to integrate [Ecovacs](https://www.ecovacs.com) (Deebot) vacuums and mowers. You will need your Ecovacs account information (username, password) to discover and control vacuums and mowers in your account.
-There is currently support for the following device types within Home Assistant:
-
-- [Vacuum](#vacuum)
-
-## Configuration
-
-To add your Ecovacs devices into your Home Assistant installation, add the following to your `configuration.yaml` file:
-
-```yaml
-ecovacs:
- username: YOUR_ECOVACS_USERNAME
- password: YOUR_ECOVACS_PASSWORD
- country: YOUR_TWO_LETTER_COUNTRY_CODE
- continent: YOUR_TWO_LETTER_CONTINENT_CODE
-```
-
-{% configuration %}
-username:
- description: Your username to login to your Ecovacs account.
- required: true
- type: string
-password:
- description: Your password to login to your Ecovacs account.
- required: true
- type: string
-country:
- description: Your two-letter country code (us, uk, etc).
- required: true
- type: string
-continent:
- description: Your two-letter continent code (na, eu, etc).
- required: true
- type: string
-{% endconfiguration %}
-
-Note: For some countries, you will need to set `continent` to `ww` (meaning worldwide.) There is unfortunately no way to know the correct settings other than guessing and checking. See the [py-sucks library protocol documentation](https://github.com/mib1185/py-sucks/blob/master/protocol.md) for more information about what has been figured out about the Ecovacs servers.
+{% include integrations/config_flow.md %}
Additional note: There are some issues during the password encoding. Using some special characters (e.g., `-`) in your password does not work.
-### Stability and Reporting Bugs
-
-The library that talks to the Ecovacs servers is in a very early state and still under development. As such, it is likely that not all regions and devices will work at the current time.
-
-Please see the [py-sucks library documentation](https://github.com/mib1185/py-sucks) for some more information about what has been tested, and check out the GitHub issues to see if the issue you're having is known or being worked on.
-
-If you have an issue with the Ecovacs integration, please file a [GitHub Issue](https://github.com/home-assistant/home-assistant/issues) and include your Home Assistant logs in the report. To get full debug output from both the Ecovacs integration and the underlying `sucks` library, place this in your `configuration.yaml` file:
-
-```yaml
-logger:
- logs:
- homeassistant.components.ecovacs: debug
- homeassistant.components.vacuum.ecovacs: debug
- sucks: debug
-```
-
-**Warning**: doing this will cause your authentication token to be visible in your log files. Be sure to remove any tokens and other authentication details from your log before posting them in an issue.
-
+With `advanced_mode` enabled, users can use their self-hosted instance over the cloud servers. Self-hosting comes with some requirements and limitations. See [Self-hosted configuration](#self-hosted-configuration) for additional details.
+
+## Provided entities
+
+The Ecovacs integration provides a vacuum {% term entity %} for each device that is connected to your Ecovacs account.
+
+Using the vacuum entity, you can monitor and control your Ecovacs Deebot vacuum.
+
+Additionally, **depending on your model**, the integration provides the following entities:
+
+- **Binary sensor**:
+ - `Mop attached`: On if the mop is attached. Note: If you do not see the state change to `Mop attached` in Home Assistant, you may need to wake up the robot in order to push the state change. Some models report an entity state change only if the overall status of the vacuum has changed. For example, if the overall state changes from `docked` to `cleaning`.
+- **Button**:
+ - `Reset lifespan`: For each supported component, a button entity to reset the lifespan will be created. All disabled by default.
+ - `Relocate`: Button entity to trigger manual relocation.
+- **Event**:
+ - `Last job`: Provides the stop reason as event_type
+- **Image**:
+ - `Map`: The floorplan/map as an image in SVG format.
+- **Number**:
+ - `Clean count`: Set the number of times to clean the area.
+ - `Volume`: Set the volume.
+- **Select**:
+ - `Water amount`: Specify the water amount used during cleaning with the mop.
+ - `Work mode`: Specify the mode, how the bot should clean.
+- **Sensor**:
+ - `Error`: The error code and a description of the error. `0` means no error. Disabled by default.
+ - `Lifespan`: For each supported component, an entity with the remaining lifespan will be created.
+ - `Network`: The following network related entities will be created. All disabled by default.
+ - `Ip address`
+ - `Wi-Fi RSSI`
+ - `Wi-Fi SSID`
+ - `Cleaning cycle`:
+ - `Area`: The cleaned area
+ - `Time`: The cleaned time
+ - `Total statistics`: Updated after each cleaning cycle:
+ - `Area`: Total cleaned area
+ - `Cleanings`: The number of cleanings
+ - `Time`: The total cleaning time
+- **Switch**:
+ - `Advanced mode`: Enable advanced mode. Disabled by default.
+ - `Border switch`: Enable border switch. Disabled by default.
+ - `Carpet auto fan speed boost`: Enable maximum fan speed if a carpet is detected. Disabled by default.
+ - `Child lock`: Enable child lock. Disabled by default.
+ - `Move up warning`: Enable device move up warning. Disabled by default.
+ - `Cross map border warning`: Enable warning for crossing the map border. Disabled by default.
+ - `Continuous cleaning`: Enable continuous cleaning, which means the bot resumes the cleaning job if he needs to charge in between. Disabled by default.
+ - `Safe protect`: Enable "Safe protect" feature. Disabled by default.
+ - `True detect`: Enable "True detect" feature. Disabled by default.
## Vacuum
The `ecovacs` vacuum platform allows you to monitor and control your Ecovacs Deebot vacuums.
-### Service `vacuum.start`
-
-Start a new cleaning task.
-
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. |
-
-### Service `vacuum.stop`
-
-Stop the current cleaning task and return to the dock.
-
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. |
-
-### Service `vacuum.pause`
-
-Pause a cleaning task.
-
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. |
-
-### Service `vacuum.clean_spot`
-
-Begin a spot cleaning operation.
-
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. |
-
-### Service `vacuum.locate`
-
-Locate the vacuum.
-
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. |
-
-### Service `vacuum.set_fan_speed`
-
-Pause a cleaning task.
-
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. |
-| `fan_speed` | no | Fan speed. Values are `normal` or `high`. |
-
-### Service `vacuum.return_to_base`
-
-Return to charging base/dock immediately.
-
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. |
-
### Integration lifespan
The remaining lifespan of components on your Deebot vacuum will be reported as attributes on the vacuum entity. The value will be a whole number representing the percentage of life remaining.
@@ -186,3 +139,16 @@ Alternatively, you can use the `ecovacs_error` event to watch for errors. This e
```
Finally, if a vacuum becomes unavailable (usually due to being idle and off its charger long enough for it to completely power off,) the vacuum's `status` attribute will change to `offline` until it is turned back on.
+
+## Self-hosted configuration
+
+Depending on your setup of the self-hosted instance, you can connect to the server using the following settings:
+- `Username`: Enter the email address configured in your instance. If authentication is disabled, you can enter any valid email address.
+- `Password`: Enter the password configured in your instance. If authentication is disabled, you can enter any string (series of characters).
+- `REST URL`: http://`SELF_HOSTED_INSTANCE`:8007
+- `MQTT URL`: mqtts://`SELF_HOSTED_INSTANCE`:8883
+- `Verify MQTT SSL certificate`: disabled
+
+Replace `SELF_HOSTED_INSTANCE` with either the IP address or the hostname of your instance.
+
+The above configuration is based on the information from [Bumper's documentation](https://bumper.readthedocs.io).
diff --git a/source/_integrations/electric_kiwi.markdown b/source/_integrations/electric_kiwi.markdown
index 117aeff6f685..f0887d991eb6 100644
--- a/source/_integrations/electric_kiwi.markdown
+++ b/source/_integrations/electric_kiwi.markdown
@@ -15,7 +15,9 @@ ha_platforms:
ha_integration_type: hub
---
-[Electric Kiwi](https://www.electrickiwi.co.nz/) is an independent power and broadband company in New Zealand, offering variable rates for peak, shoulder, and off-peak pricing with a selectable hour of free power. This integration uses the official [Electric Kiwi API](https://developer.electrickiwi.co.nz) to show and select the hour of free power.
+[Electric Kiwi](https://www.electrickiwi.co.nz/) is an independent power and broadband company in New Zealand, offering variable rates for peak, shoulder, and off-peak pricing with a selectable hour of free power.
+
+This integration uses the official [Electric Kiwi API](https://developer.electrickiwi.co.nz) to provide account information, including balances and savings, and to show and select your hour of free power.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/elmax.markdown b/source/_integrations/elmax.markdown
index be38b91e26b2..6b8ca3fb2e81 100644
--- a/source/_integrations/elmax.markdown
+++ b/source/_integrations/elmax.markdown
@@ -15,6 +15,7 @@ ha_platforms:
- cover
- switch
ha_integration_type: integration
+ha_zeroconf: true
---
The Elmax integration enables Home Assistant integration with
diff --git a/source/_integrations/elv.markdown b/source/_integrations/elv.markdown
index d33ee4e53402..62ca1d7dc021 100644
--- a/source/_integrations/elv.markdown
+++ b/source/_integrations/elv.markdown
@@ -25,7 +25,7 @@ elv:
device: SERIAL_PORT
```
-This platform will add all PCA 301 switches which are in range. You can read the total used energy in KWh and the current power in Watt.
+This platform will add all PCA 301 switches which are in range. You can read the total used energy in kWh and the current power in Watt.
{% configuration %}
device:
diff --git a/source/_integrations/elvia.markdown b/source/_integrations/elvia.markdown
new file mode 100644
index 000000000000..8da732a77659
--- /dev/null
+++ b/source/_integrations/elvia.markdown
@@ -0,0 +1,45 @@
+---
+title: Elvia
+description: Documentation for the Elvia integration.
+ha_category:
+ - Energy
+ha_release: 2024.2
+ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@ludeeus'
+ha_domain: elvia
+ha_config_flow: true
+ha_integration_type: integration
+---
+
+The Elvia integration will import your historical grid consumption.
+You can use the Elvia integration, regardless of which provider you are subscribed to, as long as Elvia operates the grid. If you are unsure if this works for you, log in to [Min side](https://www.elvia.no/logg-inn/) and check. If you see a meter there, you can use it.
+
+Unlike most other integrations, this integration provides no entities. The imported data can be used in the [Energy dashboard](/docs/energy/) and with the [statistics-graph card](/dashboards/statistics-graph/).
+
+## Prerequisites
+
+To use this integration, you need to create an API token.
+
+1. Start by logging in to your [Min side](https://www.elvia.no/logg-inn/).
+2. Once logged in, select your main account (Usually the one with your name on it).
+3. Select the **Tilganger** tab.
+4. Under the **Tilgang til data** section, select the **Opprett token for målerverdier i API**.
+5. In the dialog, select the meter(s) ([see note below about multiple meters](#multiple-meters-for-a-single-api-token)) you want to import values for, give it a name (like "Home Assistant integrasjon") and use the **Opprett** button to create your token.
+6. Copy the token shown in the dialog and paste that into the integration configuration.
+
+{% include integrations/config_flow.md %}
+
+## Updates
+
+The integration will fetch new data every hour.
+The first time it runs, the data for the past three years will be imported.
+
+The integration is scheduled to be updated hourly, so there will be some delay when you see the updated data inside Home Assistant compared to [Min side](https://www.elvia.no/logg-inn/) and Elvia's mobile apps.
+
+If you are interested in real-time monitoring, this integration is not for you. In this case, you need to use a real-time metering integration like [Tibber](/integrations/tibber/).
+
+## Multiple meters for a single API token
+
+While you can select multiple meters when you create your token, the integration will only allow 1 meter for each configuration.
+So, if you are using the same token for multiple meters, you must add the integration multiple times and select a different meter each time.
diff --git a/source/_integrations/emulated_roku.markdown b/source/_integrations/emulated_roku.markdown
index 4cc1ca53a370..b7df1de04c48 100644
--- a/source/_integrations/emulated_roku.markdown
+++ b/source/_integrations/emulated_roku.markdown
@@ -124,6 +124,12 @@ The following is an example implementation of an automation:
entity_id: media_player.amplifier
```
+### Video tutorial
+
+This comprehensive video tutorial explains how events work in Home Assistant and how you can set up Emulated Roku to control a media player using a physical remote control.
+
+
+
## Troubleshooting
If you change your advertised IP or ports, you will have to re-add the emulated Roku in your app.
diff --git a/source/_integrations/energenie_power_sockets.markdown b/source/_integrations/energenie_power_sockets.markdown
new file mode 100644
index 000000000000..e01d8592720f
--- /dev/null
+++ b/source/_integrations/energenie_power_sockets.markdown
@@ -0,0 +1,42 @@
+---
+title: Energenie Power-Sockets
+description: Instructions on how to integrate Energenie Power-Strip switches into Home Assistant.
+ha_category:
+ - Switch
+ha_iot_class: Local Polling
+ha_release: '2024.5'
+ha_codeowners:
+ - '@gnumpi'
+ha_domain: energenie_power_sockets
+ha_platforms:
+ - switch
+ha_integration_type: integration
+---
+
+The **Energenie Power-Sockets** {% term integration %} allows you to include [Energenie USB Power-Sockets](https://energenie.com/item.aspx?id=7556&lang=de) into your Home Assistant setup.
+
+{% include integrations/config_flow.md %}
+
+## Troubleshooting
+
+If you are running a {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %} installation: Depending on your system configuration, it may be necessary to grant explicit user access rights to the USB device by creating an udev rule.
+
+{% details "Creating an udev rule" %}
+
+1. Find the *vendor_id* and *product_id* of the USB device by calling `lsusb`:
+
+```bash
+lsusb
+
+#e.g.: Bus 001 Device 005: ID 04b4:fd15 Cypress Semiconductor Corp. Energenie EG-PMS2
+```
+
+2. Create an udev rule by calling:
+
+```bash
+sudo echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="04b4", ATTR{idProduct}=="fd15", MODE="0666"' > /lib/udev/rules.d/60-energenie-usb.rules
+sudo udevadm control --reload-rules
+sudo udevadm trigger
+```
+
+{% enddetails %}
diff --git a/source/_integrations/energyzero.markdown b/source/_integrations/energyzero.markdown
index ee3088d958bf..8183eb23f3d9 100644
--- a/source/_integrations/energyzero.markdown
+++ b/source/_integrations/energyzero.markdown
@@ -22,12 +22,14 @@ The integration makes it possible to retrieve the dynamic energy/gas prices
from EnergyZero in order to gain insight into the price trend of the day and
to adjust your consumption accordingly.
-Partners who purchase their energy through EnergyZero:
+Partners who are a reseller from EnergyZero:
- [ANWB Energie](https://www.anwb.nl/huis/energie/anwb-energie)
-- [Mijndomein Energie](https://www.mijndomein.nl/energie)
- [Energie van Ons](https://www.energie.vanons.org)
- [GroeneStroomLokaal](https://www.groenestroomlokaal.nl)
+- [Mijndomein Energie](https://www.mijndomein.nl/energie)
+- [SamSam](https://www.samsam.nu)
+- [ZonderGas](https://www.zondergas.nu)
{% include integrations/config_flow.md %}
@@ -59,10 +61,11 @@ The energy and gas prices are exposed using [service calls](/docs/scripts/servic
### Service `energyzero.get_gas_prices`
-Fetches the gas prices.
+Fetches the gas prices. The `config_entry` value be found using the Services tab in the Developer Tools, selecting the desired entity and then switching to YAML.
| Service data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
+| `config_entry` | no | Config entry to use. | 1b4a46c6cba0677bbfb5a8c53e8618b0
| `incl_vat` | no | Defines whether the prices include or exclude VAT. | false
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
@@ -93,10 +96,11 @@ The response data is a dictionary with the gas timestamps and prices as string a
### Service `energyzero.get_energy_prices`
-Fetches the energy prices.
+Fetches the energy prices. The `config_entry` value be found using the Services tab in the Developer Tools, selecting the desired entity and then switching to YAML.
| Service data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
+| `config_entry` | no | Config entry to use. Can be found using the Services tab in the Developer Tools and switching to YAML. | 1b4a46c6cba0677bbfb5a8c53e8618b0
| `incl_vat` | no | Defines whether the prices include or exclude VAT. | false
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
@@ -139,6 +143,7 @@ template:
- service: energyzero.get_energy_prices
response_variable: prices
data:
+ config_entry: 1b4a46c6cba0677bbfb5a8c53e8618b0
incl_vat: false
sensor:
- name: Energy prices
diff --git a/source/_integrations/enigma2.markdown b/source/_integrations/enigma2.markdown
index 372fb9f703e4..e917968c9f9d 100644
--- a/source/_integrations/enigma2.markdown
+++ b/source/_integrations/enigma2.markdown
@@ -6,74 +6,16 @@ ha_category:
ha_release: '0.90'
ha_iot_class: Local Polling
ha_codeowners:
- - '@fbradyirl'
+ - '@autinerd'
ha_domain: enigma2
+ha_config_flow: true
ha_platforms:
- media_player
-ha_integration_type: integration
+ha_integration_type: device
---
The `enigma2` platform allows you to control a Linux based set-top box which is running [Enigma2](https://github.com/oe-alliance/oe-alliance-enigma2) with the OpenWebif plugin installed.
[OpenWebif](https://github.com/E2OpenPlugins/e2openplugin-OpenWebif) is an open source web interface for Enigma2 based set-top boxes.
-To add a set-top box to your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-media_player:
- - platform: enigma2
- host: IP_ADDRESS
-```
-
-{% configuration %}
- host:
- description: The IP/hostname of the Enigma2 set-top box on your home network.
- required: true
- type: string
- use_channel_icon:
- description: By default, a screen grab of the current channel is shown. If you prefer the channel icon to be shown instead, set this to true.
- required: false
- type: boolean
- default: false
- deep_standby:
- description: If set to true, when the user selects Turn Off, the box will go into "deep standby" mode, meaning it can be only awoken by the remote control or via Wake On Lan (if box supports that).
- required: false
- type: boolean
- default: false
- mac_address:
- description: If specified, a Wake On Lan packet is sent to this MAC address, when Turn On is selected.
- required: false
- type: string
- default: empty
- source_bouquet:
- description: Provide a specific bouquet reference for the bouquet you would like to see loaded into the media player "Sources" interface.
- required: false
- type: string
- default: empty
- port:
- description: Port which OpenWebif is listening on.
- required: false
- type: integer
- default: 80
- username:
- description: The username of a user with privileges to access the box. This is only required if you have enabled the setting "Enable HTTP Authentication" in OpenWebif settings. _(e.g., on the remote by pressing `Menu`>`Plugins`>`OpenWebif`)_.
- required: false
- type: string
- default: root
- password:
- description: The password for your given account. Again, this is only required if you have enabled the setting "Enable HTTP Authentication" in OpenWebif settings. _(e.g., on the remote by pressing `Menu`>`Plugins`>`OpenWebif`)_.
- required: false
- type: string
- default: dreambox
- ssl:
- description: Use HTTPS instead of HTTP to connect. This is only required if you have enabled the setting "Enable HTTPS" in OpenWebif settings. _(e.g., on the remote by pressing `Menu`>`Plugins`>`OpenWebif`)_. You will need to ensure you have a valid CA certificate in place or SSL verification will fail with this component.
- required: false
- type: boolean
- default: false
- name:
- description: A name for easy identification of the device.
- required: false
- type: string
- default: Enigma2 Media Player
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/enmax.markdown b/source/_integrations/enmax.markdown
index ddf7e10784a4..e0dba77b7a74 100644
--- a/source/_integrations/enmax.markdown
+++ b/source/_integrations/enmax.markdown
@@ -4,7 +4,7 @@ description: Get energy usage from Enmax Energy using the Opower integration
ha_category:
- Energy
- Sensor
-ha_release: '2023.10'
+ha_release: 2023.8
ha_domain: enmax
ha_integration_type: virtual
ha_supporting_domain: opower
diff --git a/source/_integrations/enocean.markdown b/source/_integrations/enocean.markdown
index acf996f19362..975f5b5f334a 100644
--- a/source/_integrations/enocean.markdown
+++ b/source/_integrations/enocean.markdown
@@ -65,7 +65,7 @@ The following [EnOcean Equipment Profiles](https://www.enocean-alliance.org/spec
- F6-02-01 (Light and Blind Control - Application Style 2)
- F6-02-02 (Light and Blind Control - Application Style 1)
-To use your EnOcean device, you first have to set up your [EnOcean hub](#hub) and then add the following to your `configuration.yaml` file:
+To use your EnOcean device, you first have to set up your EnOcean hub and then add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
@@ -127,7 +127,7 @@ You can find the `event_data` `id` by going to {% my developer_events title="Dev
An EnOcean light can take many forms. Currently only one type has been tested: Eltako FUD61 dimmer.
-To use your EnOcean device, you first have to set up your [EnOcean hub](#hub) and then add the following to your `configuration.yaml` file:
+To use your EnOcean device, you first have to set up your EnOcean hub and then add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
@@ -162,7 +162,7 @@ The EnOcean sensor platform currently supports the following device types:
- [temperature sensor](#temperature-sensor)
- [window handle](#window-handle)
-To use your EnOcean device, you first have to set up your [EnOcean hub](#hub) and then add the following to your `configuration.yaml` file:
+To use your EnOcean device, you first have to set up your EnOcean hub and then add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
@@ -326,7 +326,7 @@ The window handle sensor can have the following states:
An EnOcean switch can take many forms. Currently, only a few types have been tested: Permundo PSC234 and Nod On SIN-2-1-01.
-To use your EnOcean device, you first have to set up your [EnOcean hub](#hub) and then add the following to your `configuration.yaml` file:
+To use your EnOcean device, you first have to set up your EnOcean hub and then add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index 5a3556bb38d1..23ac218c5ffe 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -36,7 +36,22 @@ This integration will offer various sensors depending on the configuration of yo
- Historical energy production & consumption
- Power production per-inverter
-_Consumption sensors require your Envoy to be properly configured with consumption CT sensors installed._
+_Consumption sensors require your Envoy to be properly configured with consumption CT sensors installed._
+
+For Envoy S Metered / IQ Gateway Metered with installed and configured current transformers (CT), additional features are available:
+
+- Sensors for net production (grid export) and net consumption (grid import) if the consumption CT is a net-consumption CT.
+- Disabled sensors for:
+
+ - Production and consumption sensors for each phase, if CT are installed on more than 1 phase.
+ - Phase net production and net consumption, if CT are installed on more than 1 phase.
+ - Frequency net consumption CT (aggregate and phase).
+ - Voltage net consumption CT (aggregate and phase).[^1]
+ - Metering status for net consumption and production CT (`normal` | `not-metering` | `check-wiring`) (aggregate and phase).
+ - Meter status flags active for net consumption and production CT (aggregate and phase).[^2]
+
+[^1]: For multi-phase systems, the Envoy sums the voltages of the phases. May be valid for split-phase, but for 3-phase systems use the individual phases rather than the summed value.
+[^2]: If this value is non-zero, consult the diagnostic report of the Envoy and look for `raw_data` - `/ivp/meters` - `statusFlags` for set flags (`production-imbalance` | `negative-production` | `power-on-unused-phase` | `negative-total-consumption`).
For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/IQ Batteries installed, additional features are available:
@@ -46,6 +61,13 @@ For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/
- A switch allowing you to take your system on-grid and off-grid. Note that the Enpower has a slight delay built-in between receiving these commands and actually switching the system on or off grid.
- A switch allowing you to enable or disable charging the Encharge/IQ Batteries from the power grid.
- Support for changing the battery storage mode between full backup, self-consumption, and savings mode and setting the reserve battery level for outages.
+- If a storage CT is installed:
+ - Sensors for battery storage energy charged and discharged and current active power discharge/charge
+ - Disabled sensors for:
+ - Phase battery storage energy charged and discharged and current power discharge/charge
+ - Voltage net consumption CT (aggregate and phase)
+ - Metering status for storage CT (aggregate and phase)
+ - Meter status flags active storage CT (aggregate and phase)
## Envoy authentication requirements
@@ -58,10 +80,104 @@ For models running firmware 5 and older, use `installer` for the username. No pa
The Enphase Enpower has 4 load shedding relays that can be used to control non-essential loads in your home. These have two main modes of operation:
### Standard
+
When the mode entity is set to standard, you can simply set the state of the relay to be powered or not powered for each mode of operation: on grid, off grid, and on generator.
### Battery level
+
When the relay mode is set to battery level, the relays will turn on and off based on the remaining battery level of your Encharge batteries. Two number entities are available to control the cutoff and restore levels for the relays. When the battery level drops below the cutoff level, the relays will turn off. When the battery level rises above the restore level, the relays will turn back on.
## Polling interval
-The default polling interval is 60 seconds. To customize the polling interval, refer to [defining a custom polling interval](/common-tasks/general/#defining-a-custom-polling-interval). Specify the envoy device as a target of the service using the `+ choose device` button. Updating the envoy will also update the related devices like the inverters; there is no need to split them into separate entities or add all inverter devices. When using multiple Envoys, add them as targets or create separate custom polling intervals as needed.
+
+The default polling interval is 60 seconds. To customize the polling interval, refer to [defining a custom polling interval](/common-tasks/general/#defining-a-custom-polling-interval). Specify one single entity from the envoy device as target of the service using the `+ choose entity` button. Updating one entity will update all entities of the Envoy and the related devices like the inverters; there is no need to specify multiple or all entities or add (all) inverter entities. When using multiple Envoys, add one entity for each envoy as targets or create separate custom polling intervals with a single entity as needed.
+
+## Credentials update
+
+This integration supports updating configuration by re-adding the integration and specifying the same or new IP address, username, and password. Use this method if your Enlighten credentials or the device's IP address has changed and needs to be updated.
+
+## Energy dashboard
+
+This integration provides several values suitable for the energy dashboard:
+
+- For `Solar production`, use the `Envoy Lifetime energy production` entity.
+- For `Grid consumption`, use the `Envoy Lifetime net energy consumption` entity.[^3]
+- For `Return to grid`, use the `Envoy Lifetime net energy production` entity.[^3]
+- For `Energy going into the battery`, use the the `Envoy Lifetime battery energy charged` entity.[^5]
+- For `Energy coming out off the battery`, use the the `Envoy Lifetime battery energy discharged` entity.[^5]
+
+[^3]: Only applies when using Envoy S Metered / IQ Gateway Metered with installed and configured CT.
+
+[^5]: Only applies when using Envoy S Metered / IQ Gateway Metered / IQ Combiner with installed and configured storage / battery CT.
+
+## Debug logs and diagnostics
+
+This integration provides debug logs and diagnostics reports as described in the [Home Assistant troubleshooting pages](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
+
+### Debug log
+
+When experiencing issues during the use of the integration, enable the debug log for the Envoy / IQ Gateway. This will add details on the data collection to the Home Assistant log file. Leave the debug log enabled long enough to capture the occurrence of the issue. If the issue is intermittent, this may take a while and it may grow the log file quite a bit.
+
+If you're expecting features to show but they are not shown, reload the integration while debug logging is enabled.
+When this integration is loaded, it will scan the Envoy / IQ Gateway for available features and configure these as needed. Following this initial scan, only data for the found features is collected. Performing a reload with debug enabled results in the debug log containing the initial full scan to assist with analyzing any missing features. Some features are disabled by default, and you need to enable them if you want them to show. Verify this before starting a debug session.
+
+The debug log will show all communication with the Envoy / IQ Gateway. Lines starting with entities are log entries for the integration:
+
+```txt
+2024-03-07 11:20:11.897 DEBUG (MainThread) [homeassistant.components.enphase_envoy
+2024-03-07 11:20:11.898 DEBUG (MainThread) [pyenphase.envoy
+```
+
+Below a typical data request / reply sequence in the log file. These lines will contain the data details received from the Envoy / IQ Gateway.
+
+```txt
+... [pyenphase.envoy] Requesting https://192.168.1.2/ivp/meters with timeout ...
+... [pyenphase.envoy] Request reply from https://192.168.1.2/ivp/meters status 200:...
+```
+
+The end of a collection cycle is marked by:
+
+```txt
+... [homeassistant.components.enphase_envoy.coordinator] Finished fetching Envoy 123456 data in 1.234 seconds (success: True)
+```
+
+### Diagnostics
+
+The diagnostics file is a JSON file and includes a `data` section with the details for this integration. The file can be viewed with any text editor[^4]. The data section has 5 major subsections which reflects how the integration is setup and data is used. Below the 5 subsections, each collapsed.
+
+[^4]: Use of a JSON-aware viewer is not required but makes inspecting the file easier.
+
+```JSON
+ "data": {
+ "config_entry": { ...
+ },
+ "envoy_properties": { ...
+ },
+ "raw_data": { ...
+ },
+ "envoy_model_data": { ...
+ },
+ "envoy_entities_by_device": [ ...
+ ]
+ }
+}
+```
+
+#### Config entry
+
+Shows the integration configuration created when the integration was added.
+
+#### Envoy properties
+
+Shows the conclusions of the initial data scan and what features were identified, including the detected firmware version in the Envoy.
+
+#### Raw data
+
+Shows the data collected from the Envoy during the last data scan when the diagnostic report was created. If in doubt about data shown in the dashboards, consult this section to find the raw data sent by the Envoy. The integration is not modifying this data, it's just providing the data to the entities.
+
+#### Envoy model data
+
+Shows the data of the Envoy extracted from the raw_data into Envoy class data used by the Home Assistant integration. This is a subset of the full raw dataset.
+
+#### Envoy entities by device
+
+Shows all entities created by the integration based on the findings of the initial scan, grouped by device. Entity state based on the last data collection cycle is included. State values here come from the Envoy model data and are the values visible in the dashboards.
diff --git a/source/_integrations/entur_public_transport.markdown b/source/_integrations/entur_public_transport.markdown
index 69877d2353a0..f379efae4416 100644
--- a/source/_integrations/entur_public_transport.markdown
+++ b/source/_integrations/entur_public_transport.markdown
@@ -59,7 +59,7 @@ line_whitelist:
required: false
type: list
omit_non_boarding:
- description: If the sensors should remove resulting departures that doesn't take new passangers, or is at last stop.
+ description: If the sensors should remove resulting departures that doesn't take new passengers, or is at last stop.
required: false
type: boolean
default: true
diff --git a/source/_integrations/environment_canada.markdown b/source/_integrations/environment_canada.markdown
index db6bcc9614e7..5d36c0a378bf 100644
--- a/source/_integrations/environment_canada.markdown
+++ b/source/_integrations/environment_canada.markdown
@@ -28,7 +28,7 @@ The **Environment Canada** {% term integration %} provides meteorological data f
The integration automatically determines the closest weather station based on the latitude and longitude specified. If integration-specific coordinates are not provided, the coordinates configured for Home Assistant are used.
-You can also specify a weather station to use by providing a identification code of the form `AB/s0000123`, based on those listed in [this CSV file](https://dd.weather.gc.ca/citypage_weather/docs/site_list_towns_en.csv).
+You can also specify a weather station to use by providing an identification code of the form `AB/s0000123`, based on those listed in [this CSV file](https://dd.weather.gc.ca/citypage_weather/docs/site_list_towns_en.csv).
## Entities
diff --git a/source/_integrations/envisalink.markdown b/source/_integrations/envisalink.markdown
index 23cead9621da..cc8fbefb7b0a 100644
--- a/source/_integrations/envisalink.markdown
+++ b/source/_integrations/envisalink.markdown
@@ -72,7 +72,7 @@ user_name:
required: true
type: string
password:
- description: Which password to authenticate with when connecting to the device. This must be the password for connceting directly to the device and not the password for your EyezOn account. EVL3 only works with max. 6 characters.
+ description: Which password to authenticate with when connecting to the device. This must be the password for connecting directly to the device and not the password for your EyezOn account. EVL3 only works with max. 6 characters.
required: true
type: string
code:
diff --git a/source/_integrations/epic_games_store.markdown b/source/_integrations/epic_games_store.markdown
new file mode 100644
index 000000000000..9456c6075e20
--- /dev/null
+++ b/source/_integrations/epic_games_store.markdown
@@ -0,0 +1,32 @@
+---
+title: Epic Games Store
+description: Instructions on how to integrate Epic Games Store service into Home Assistant.
+ha_category:
+ - Calendar
+ha_release: 2024.5
+ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@hacf-fr'
+ - '@Quentame'
+ha_domain: epic_games_store
+ha_config_flow: true
+ha_platforms:
+ - calendar
+ha_integration_type: service
+---
+
+The **Epic Games Store** {% term integration %} integrates the [Epic Games Store](https://store.epicgames.com/) service into Home Assistant.
+
+The integration adds calendars to follow [discounts & free games](https://store.epicgames.com/free-games).
+
+{% include integrations/config_flow.md %}
+
+
+## Calendars
+
+The following calendars will be created:
+
+|Entity|Description|
+|------|-----------|
+|`epic_games_store_discount_games`|Current and upcoming discounts on games, one calendar event per game|
+|`epic_games_store_free_games`|Free games for the current and upcoming week, one calendar event per game|
diff --git a/source/_integrations/epion.markdown b/source/_integrations/epion.markdown
new file mode 100644
index 000000000000..c54127deea80
--- /dev/null
+++ b/source/_integrations/epion.markdown
@@ -0,0 +1,37 @@
+---
+title: Epion
+description: Instructions on how to integrate Epion Air CO2 sensors with Home Assistant
+ha_category:
+ - Environment
+ - Sensor
+ha_release: '2024.2'
+ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@lhgravendeel'
+ha_config_flow: true
+ha_domain: epion
+ha_platforms:
+ - sensor
+ha_integration_type: hub
+---
+
+Integrates Epion Air sensors into Home Assistant.
+
+[Epion](https://www.epion.nl/) helps you provide insights into air quality, easy to use for everyone.
+
+Requires a configured Epion Air device and an Epion account with access to this device.
+
+## Prerequisites
+
+Epion API token setup.
+
+1. Login to [Epion](https://www.epion.nl/).
+2. Select [Integrations](https://epion.nl/dashboard/integrations) in the left menu.
+3. To create a new token, if you don't see one already, select **Generate new Token**.
+4. Copy your generated token. The token is a set of alphanumeric characters separated by hyphens. It starts with "a/".
+
+The Epion integration can now be activated using this API token.
+
+All connected devices will show entities for the carbon dioxide (CO2) concentration, temperature, relative humidity, and barometric pressure.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/epson.markdown b/source/_integrations/epson.markdown
index 7237026bd940..e89a645d235f 100644
--- a/source/_integrations/epson.markdown
+++ b/source/_integrations/epson.markdown
@@ -24,7 +24,7 @@ When you want to add a device for the first time, turn it on before following th
- turn on/off
- set input
-- set/get color mode
+- set/get color mode including high/low lamp
- increase/decrease volume
- mute/unmute audio
- send next/previous track
@@ -37,6 +37,7 @@ When you want to add a device for the first time, turn it on before following th
- Epson EH-TW5350
- Epson EH-TW7000
+- Epson EH-TW9400W (shares platform with 7400/8400/9400(w))
To make this module work you need to connect your projector to your LAN.
The best is to use iProjection app by Epson to test if it is working.
diff --git a/source/_integrations/epsonworkforce.markdown b/source/_integrations/epsonworkforce.markdown
deleted file mode 100644
index 1a057cdc183d..000000000000
--- a/source/_integrations/epsonworkforce.markdown
+++ /dev/null
@@ -1,80 +0,0 @@
----
-title: Epson Workforce
-description: Instructions on how to integrate Epson Workforce Printer into Home Assistant.
-ha_category:
- - Sensor
-ha_release: 0.92
-ha_iot_class: Local Polling
-ha_codeowners:
- - '@ThaStealth'
-ha_domain: epsonworkforce
-ha_platforms:
- - sensor
-ha_integration_type: integration
----
-
-The `epson workforce` platform allows you to monitor the ink levels of a Epson Workforce printer from Home
-Assistant.
-
-To add Epson Workforce to your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: epsonworkforce
- host: IP_ADDRESS
- monitored_conditions:
- - black
- - photoblack
- - yellow
- - magenta
- - cyan
- - clean
-```
-
-{% configuration %}
-host:
- description: The host name or address of the Epson workforce printer
- required: true
- type: string
-monitored_conditions:
- description: The cartridge colours to monitor.
- required: true
- type: list
- keys:
- black:
- description: The black ink cartridge
- photoblack:
- description: The photo black ink cartridge (not supported by all printers).
- yellow:
- description: The yellow ink cartridge.
- magenta:
- description: The magenta (=red) ink cartridge.
- cyan:
- description: The cyan (=blue) ink cartridge.
- clean:
- description: The cleaning cartridge.
-{% endconfiguration %}
-
-Supported devices:
-
-- Epson Workforce (and some EcoTank) printers who publish a HTTP page containing the ink cartridge levels
-
-Tested devices:
-
-- Epson WF2630
-- Epson WF2660
-- Epson WF3540
-- Epson WF3620
-- Epson WF3640
-- Epson WF4820
-- Epson EcoTank ET-77x0
-- Epson ET-2650
-- EPSON ET-2750
-- Epson ET-4750
-- Epson EcoTank ET-5150 (51x0)
-- Epson Expression Home XP-2100
-- Epson Expression Home XP-2105
-
-To make this module work you need to connect your printer to your LAN.
-The best is to navigate to the status page of the printer to check if it shows the page with the ink levels on the URL `http:///PRESENTATION/HTML/TOP/PRTINFO.HTML`
diff --git a/source/_integrations/eq3btsmart.markdown b/source/_integrations/eq3btsmart.markdown
new file mode 100644
index 000000000000..7ba58443c1b1
--- /dev/null
+++ b/source/_integrations/eq3btsmart.markdown
@@ -0,0 +1,41 @@
+---
+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: device
+ha_quality_scale: silver
+ha_platforms:
+ - climate
+---
+
+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/_integrations/esphome.markdown b/source/_integrations/esphome.markdown
index 84f5e1a1b263..7b9653194c42 100644
--- a/source/_integrations/esphome.markdown
+++ b/source/_integrations/esphome.markdown
@@ -23,7 +23,10 @@ ha_platforms:
- camera
- climate
- cover
+ - date
+ - datetime
- diagnostics
+ - event
- fan
- light
- lock
@@ -33,7 +36,9 @@ ha_platforms:
- sensor
- switch
- text
+ - time
- update
+ - valve
ha_integration_type: device
ha_dhcp: true
works_with:
diff --git a/source/_integrations/event.markdown b/source/_integrations/event.markdown
index ba6f28cc1752..7522304a5956 100644
--- a/source/_integrations/event.markdown
+++ b/source/_integrations/event.markdown
@@ -13,7 +13,7 @@ ha_integration_type: entity
Events are signals that are emitted when something happens, for example, when a user presses a physical button like a doorbell or when a button on a remote control is pressed.
-These events are stateless. For example, a doorbell does not have a state like being "on" or "off" but instead is momentarily pressed. Some events can have variations in the type of event that is emitted. For example, maybe your remote control is capable of emitting a single press, a double press, or a long press.
+These events do not capture a state in the traditional sense. For example, a doorbell does not have a state such as "on" or "off" but instead is momentarily pressed. Some events can have variations in the type of event that is emitted. For example, maybe your remote control is capable of emitting a single press, a double press, or a long press.
The event entity can capture these events in the physical world and makes them available in Home Assistant as an entity.
@@ -21,9 +21,12 @@ The event entity can capture these events in the physical world and makes them a
## The state of an event entity
-The event entity is stateless, as in, it cannot have a state like the `on` or `off` state that, for example, a normal switch or light entity has.
+The event entity does not capture a state such as `on` or `off`. Instead, an event entity keeps track of the timestamp when the emitted event has last been detected.
-Therefore, every event entity keeps track of the timestamp when the emitted event has last been detected.
+
+
+ Event entity with a timestamp value in state and event type "pressed".
+
Because the state of an event entity in Home Assistant is a timestamp, it means we can use it in our automations. For example:
@@ -80,3 +83,9 @@ The following device classes are supported by event entities:
- **button**: For remote control buttons.
- **doorbell**: Specifically for buttons that are used as a doorbell.
- **motion**: For motion events detected by a motion sensor.
+
+### Video tutorial
+
+This comprehensive video tutorial explains how events work in Home Assistant and how you can set up Emulated Roku to control a media player using a physical remote control.
+
+
diff --git a/source/_integrations/event.mqtt.markdown b/source/_integrations/event.mqtt.markdown
index 34c2b7b83fbc..39253b0aed19 100644
--- a/source/_integrations/event.mqtt.markdown
+++ b/source/_integrations/event.mqtt.markdown
@@ -12,8 +12,6 @@ The `mqtt` event platform allows you to process event info from an MQTT message.
## Configuration
-
-
```yaml
# Example configuration.yaml entry
mqtt:
@@ -93,6 +91,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -108,9 +110,7 @@ device:
device_class:
description: The [type/class](/integrations/event/#device-class) of the event to set the icon in the frontend. The `device_class` can be `null`.
required: false
- default: None
type: device_class
- default: None
enabled_by_default:
description: Flag which defines if the entity should be enabled when first added.
required: false
@@ -125,7 +125,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
event_types:
description: A list of valid `event_type` strings.
required: true
@@ -167,8 +166,7 @@ qos:
type: integer
default: 0
state_topic:
- description: The MQTT topic subscribed to receive JSON event payloads. The JSON payload should contain the `event_type` element. The event type should be one of the configured `event_types`.
- default: None
+ description: The MQTT topic subscribed to receive JSON event payloads. The JSON payload should contain the `event_type` element. The event type should be one of the configured `event_types`. Note that replayed retained messages will be discarded.
required: true
type: string
unique_id:
diff --git a/source/_integrations/ezviz.markdown b/source/_integrations/ezviz.markdown
index 0d7143d64dc7..8fc658bd9155 100644
--- a/source/_integrations/ezviz.markdown
+++ b/source/_integrations/ezviz.markdown
@@ -25,6 +25,9 @@ ha_platforms:
- switch
- update
ha_integration_type: integration
+related:
+ - docs: /dashboards/picture-glance/#creating-a-card-to-control-the-camera
+ title: Controlling the camera from the dashboard
---
The `ezviz` sensor platform uses the ezvizlife.com API to interact with the devices.
@@ -74,61 +77,61 @@ You can also change the camera options should you need to access a high or low r
If your EZVIZ camera supports warning sounds, you can use this service to set the intensity.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
-| `level` | Set the sound level to 0 for Soft, 1 for Intensive or 2 to disable |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| `level` | Set the sound level to 0 for Soft, 1 for Intensive or 2 to disable |
### Service `ezviz.ptz`
If your EZVIZ camera supports PTZ, you will be able to pan or tilt your camera.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
-| `direction` | Direction of the movement. Allowed values: `up`, `down`, `left`, `right` |
-| `speed` | (Optional) Speed to in which to move the camera. Allowed values: int from 1 to 9. Default: 5 |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| `direction` | Direction of the movement. Allowed values: `up`, `down`, `left`, `right` |
+| `speed` | (Optional) Speed to in which to move the camera. Allowed values: int from 1 to 9. Default: 5 |
### Service `ezviz.set_alarm_detection_sensibility`
If your EZVIZ camera supports motion detection, you will be able to set the sensitivity level using this service.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
-| `level` | Sensibility level (1-6) for type 0 (Normal camera) or (1-100) for type 3 (PIR sensor camera). |
-| `type_value` | Type of detection. Options : 0 - Camera or 3 - PIR Sensor Camera. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| `level` | Sensibility level (1-6) for type 0 (Normal camera) or (1-100) for type 3 (PIR sensor camera). |
+| `type_value` | Type of detection. Options : 0 - Camera or 3 - PIR Sensor Camera. |
### Service `ezviz.sound_alarm`
If your EZVIZ camera has a built-in siren, you can use this service to make a noise.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
-| `enable` | Sound the alarm by setting this to 1 or stop the siren by setting this to 0. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| `enable` | Sound the alarm by setting this to 1 or stop the siren by setting this to 0. |
### Service `ezviz.wake_device`
If you have "sleep" mode enabled on your camera, you can use this service to wake it. Especially useful for battery cameras.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
To enable/disable motion detection, use the Home Assistant built in services.
### Service `camera.enable_motion_detection`
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
### Service `camera.disable_motion_detection`
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
### Alarm control panel entity
@@ -166,7 +169,3 @@ The image entity represents the last detected event from a camera and visually r
## Troubleshooting
- `authentication failed`: The authentication requires an EZVIZ account with two-step verification disabled. Google, Facebook, TikTok, or other Oauth-based accounts will not work.
-
-## Related topics
-
-- [Controlling the camera from the dashboard](/dashboards/picture-glance/#creating-a-card-to-control-the-camera)
diff --git a/source/_integrations/facebox.markdown b/source/_integrations/facebox.markdown
deleted file mode 100644
index 4caec2803530..000000000000
--- a/source/_integrations/facebox.markdown
+++ /dev/null
@@ -1,192 +0,0 @@
----
-title: Facebox
-description: Detect and recognize faces with Facebox.
-ha_category:
- - Image processing
-ha_iot_class: Local Push
-ha_release: 0.7
-ha_domain: facebox
-ha_integration_type: integration
----
-
-The **Facebox** image processing {% term integration %} allows you to detect and recognize faces in a camera image using [Facebox](https://machinebox.io/docs/facebox). The state of the entity is the number of faces detected, and recognized faces are listed in the `matched_faces` attribute. An `image_processing.detect_face` event is fired for each recognized face, and the event `data` provides the `confidence` of recognition, the `name` of the person, the `image_id` of the image associated with the match, the `bounding_box` that contains the face in the image, and the `entity_id` that processing was performed on.
-
-## Setup
-
-Facebox runs in a Docker container, and it is recommended that you run this container on a x86 machine (an ARM version is not available) with a minimum of 2 GB RAM. On your machine with Docker, run the Facebox container with:
-
-```bash
-MB_KEY="INSERT-YOUR-KEY-HERE"
-
-sudo docker run --name=facebox --restart=always -p 8080:8080 -e "MB_KEY=$MB_KEY" machinebox/facebox
-```
-
-or using `docker-compose`:
-
-```yaml
-version: '3'
-services:
- facebox:
- image: machinebox/facebox
- container_name: facebox
- restart: unless-stopped
- ports:
- - 8080:8080
- environment:
- - MB_KEY=${MB_KEY}
- - MB_FACEBOX_DISABLE_RECOGNITION=false
-```
-
-You can run Facebox with a username and password by adding `-e "MB_BASICAUTH_USER=my_username" -e "MB_BASICAUTH_PASS=my_password"`, but bear in mind that the integration does not encrypt these credentials, and this approach does not guarantee security on an unsecured network.
-
-After you created an account at [Machinebox](https://machinebox.io/account), you can grab your `MB_KEY` at [your Account page](https://developer.veritone.com/machinebox/overview).
-
-If you only require face detection (counting the number of faces), you can disable face recognition by adding `-e "MB_FACEBOX_DISABLE_RECOGNITION=true"` in the `docker run` command.
-
-If your host machine does not support [AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) and you experience issues running the `machinebox/facebox` image, there is an alternative image without AVX support available at `machinebox/facebox_noavx` (*HINT*: This image is currently not supported by machinebox and should only be used if necessary).
-
-## Configuration
-
-To enable this platform in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-image_processing:
- - platform: facebox
- ip_address: 192.168.0.1
- port: 8080
- source:
- - entity_id: camera.local_file
- name: my_custom_name
-```
-
-{% configuration %}
-ip_address:
- description: The IP address of your machine hosting Facebox.
- required: true
- type: string
-port:
- description: The port which Facebox is exposed on.
- required: true
- type: string
-username:
- description: The Facebox username if you have set one.
- required: false
- type: string
-password:
- description: The Facebox password if you have set one.
- required: false
- type: string
-source:
- description: The list of image sources.
- required: true
- type: map
- keys:
- entity_id:
- description: A camera entity ID to get picture from.
- required: true
- type: string
- name:
- description: This parameter allows you to override the name of your `image_processing` entity.
- required: false
- type: string
-{% endconfiguration %}
-
-## Automations
-
-Use the `image_processing.detect_face` events to trigger automations, and breakout the `trigger.event.data` using a [template](/docs/automation/templating/). The following example automation sends a notification when Ringo Star is recognized:
-
-{% raw %}
-
-```yaml
-- id: '12345'
- alias: "Ringo Starr recognised"
- trigger:
- platform: event
- event_type: image_processing.detect_face
- event_data:
- name: "Ringo_Starr"
- action:
- service: notify.platform
- data:
- message: Ringo_Starr recognised with probability {{ trigger.event.data.confidence }}
- title: Door-cam notification
-```
-
-{% endraw %}
-
-## Service `facebox.teach_face`
-
-The service `facebox.teach_face` can be used to teach Facebox faces.
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Entity ID of Facebox entity. |
-| `name` | no | The name to associate with a face.|
-| `file_path` | no | The path to the image file. |
-
-A valid service data example:
-
-{% raw %}
-
-```yaml
-{
- "entity_id": "image_processing.facebox_local_file",
- "name": "superman",
- "file_path": "/images/superman_1.jpeg"
-}
-```
-
-{% endraw %}
-
-You can use an automation to receive a notification when you train a face:
-
-{% raw %}
-
-```yaml
-- id: '1533703568569'
- alias: "Face taught"
- trigger:
- - event_data:
- service: facebox.teach_face
- event_type: call_service
- platform: event
- condition: []
- action:
- - service: notify.pushbullet
- data_template:
- message: '{{ trigger.event.data.service_data.name }} taught
- with file {{ trigger.event.data.service_data.file_path }}'
- title: Face taught notification
-```
-
-{% endraw %}
-
-Any errors on teaching will be reported in the logs. If you enable [system_log](/integrations/system_log/) events:
-
-```yaml
-system_log:
- fire_event: true
-```
-
-You can create an automation to receive notifications on Facebox errors:
-
-{% raw %}
-
-```yaml
-- id: '1533703568577'
- alias: "Facebox error"
- trigger:
- platform: event
- event_type: system_log_event
- condition:
- condition: template
- value_template: '{{ "facebox" in trigger.event.data.message }}'
- action:
- - service: notify.pushbullet
- data_template:
- message: "{{ trigger.event.data.message }}"
- title: Facebox error
-```
-
-{% endraw %}
diff --git a/source/_integrations/fan.markdown b/source/_integrations/fan.markdown
index 8b5844cf9e81..44a26535ed6b 100644
--- a/source/_integrations/fan.markdown
+++ b/source/_integrations/fan.markdown
@@ -126,7 +126,7 @@ automation:
### Service `fan.turn_on`
-Turn fan device on. This is only supported if the fan device supports being turned off.
+Turn fan device on. This is only supported if the fan device supports being turned off. See a similar example under `fan.turn_off`.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
@@ -151,7 +151,7 @@ automation:
platform: time
at: "07:15:00"
action:
- - service: fan.set_speed
+ - service: fan.turn_off
target:
entity_id: fan.kitchen
data:
diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown
index 9cc7d7a23cbd..e6a84090b2c0 100644
--- a/source/_integrations/fan.mqtt.markdown
+++ b/source/_integrations/fan.mqtt.markdown
@@ -18,8 +18,6 @@ When a `state_topic` is not available, the fan will work in optimistic mode. In
Optimistic mode can be forced even if a `state_topic` is available. Try to enable it if you are experiencing incorrect fan operation.
-
-
To enable MQTT fans in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -86,7 +84,7 @@ device:
connections:
description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
- type: [list, map]
+ type: list
hw_version:
description: The hardware version of the device.
required: false
@@ -107,6 +105,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -133,7 +135,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
@@ -226,12 +227,12 @@ payload_reset_percentage:
description: A special payload that resets the `percentage` state attribute to `unknown` when received at the `percentage_state_topic`.
required: false
type: string
- default: 'None'
+ default: '"None"'
payload_reset_preset_mode:
description: A special payload that resets the `preset_mode` state attribute to `unknown` when received at the `preset_mode_state_topic`.
required: false
type: string
- default: 'None'
+ default: '"None"'
percentage_command_template:
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `percentage_command_topic`.
required: false
@@ -327,7 +328,6 @@ mqtt:
command_topic: "bedroom_fan/on/set"
direction_state_topic: "bedroom_fan/direction/state"
direction_command_topic: "bedroom_fan/direction/set"
- oscillation_command_topic: "bedroom_fan/oscillation/set"
oscillation_state_topic: "bedroom_fan/oscillation/state"
oscillation_command_topic: "bedroom_fan/oscillation/set"
percentage_state_topic: "bedroom_fan/speed/percentage_state"
diff --git a/source/_integrations/fastdotcom.markdown b/source/_integrations/fastdotcom.markdown
index a50bef73de97..dd8d9b5fb59d 100644
--- a/source/_integrations/fastdotcom.markdown
+++ b/source/_integrations/fastdotcom.markdown
@@ -12,8 +12,10 @@ ha_codeowners:
- '@erwindouna'
ha_domain: fastdotcom
ha_platforms:
+ - diagnostics
- sensor
ha_integration_type: integration
+ha_quality_scale: gold
---
The `fastdotcom` integration uses the [Fast.com](https://fast.com/) web service to measure network bandwidth performance.
@@ -21,7 +23,7 @@ The `fastdotcom` integration uses the [Fast.com](https://fast.com/) web service
Currently, the Fast.com integration only supports measuring download bandwidth.
-If you want to measure bandwidth metrics other then download such as ping and upload, utilize the [Speedtest.net](/integrations/speedtestdotnet) integration.
+If you want to measure bandwidth metrics other than download such as ping and upload, utilize the [Speedtest.net](/integrations/speedtestdotnet) integration.
diff --git a/source/_integrations/file.markdown b/source/_integrations/file.markdown
index f5b2833dffc3..88fb0caf33c8 100644
--- a/source/_integrations/file.markdown
+++ b/source/_integrations/file.markdown
@@ -56,7 +56,7 @@ To use notifications, please see the [getting started with automation page](/get
## Sensor
-The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [allowlist_external_dirs](/docs/configuration/basic/).
+The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs).
To enable the `file` sensor, add the following lines to your `configuration.yaml`:
diff --git a/source/_integrations/file_upload.markdown b/source/_integrations/file_upload.markdown
index cab53d08fb59..3f609934d8e5 100644
--- a/source/_integrations/file_upload.markdown
+++ b/source/_integrations/file_upload.markdown
@@ -1,5 +1,5 @@
---
-title: File Upload
+title: File upload
description: File upload integration supports various frontend features within Home Assistant
ha_release: 2022.9
ha_quality_scale: internal
@@ -10,4 +10,6 @@ ha_codeowners:
ha_category: []
---
-The file upload integration allows various features in the frontend to upload files.
+The **File upload** {% term integration %} allows various features in the frontend to upload files.
+
+{% include integrations/building_block_integration.md %}
diff --git a/source/_integrations/filesize.markdown b/source/_integrations/filesize.markdown
index 0b51840c1061..3d34b5044c77 100644
--- a/source/_integrations/filesize.markdown
+++ b/source/_integrations/filesize.markdown
@@ -1,5 +1,5 @@
---
-title: File Size
+title: File size
description: Integration for monitoring the size of a file.
ha_category:
- Sensor
@@ -15,11 +15,13 @@ ha_config_flow: true
ha_integration_type: integration
---
-The `filesize` sensor is for displaying the size in MB of a file.
+The **File size** {% term integration %} is for displaying the size in MB of a file.
-File paths must also be added to [allowlist_external_dirs](/docs/configuration/basic/) in your `configuration.yaml`.
+File paths must also be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs) in your `configuration.yaml`.
+
+File paths should be absolute paths. For example: `/config/home-assistant_v2.db` to monitor the size of the default database.
-When configuring a `window_size` that is not a time and with a value larger than the default of `1`, the database must examine nearly every stored state for that entity during Home Assistant startup. If you have modified the [Recorder `purge_keep_days`](/integrations/recorder/#purge_keep_days) value or have many states stored in the database for the filtered entity, this can cause your Home Assistant instance can to respond poorly during startup.
+When configuring a `window_size` that is not a time and with a value larger than the default of `1`, the database must examine nearly every stored state for that entity during Home Assistant startup. If you have modified the [Recorder `purge_keep_days`](/integrations/recorder/#purge_keep_days) value or have many states stored in the database for the filtered entity, this can cause your Home Assistant instance to respond poorly during startup.
diff --git a/source/_integrations/fireservicerota.markdown b/source/_integrations/fireservicerota.markdown
index fd7566f722aa..d4c62376b762 100644
--- a/source/_integrations/fireservicerota.markdown
+++ b/source/_integrations/fireservicerota.markdown
@@ -83,7 +83,7 @@ This entity reflects the duty you have scheduled, the value can be `on` = on dut
### Incident response switch
With this switch you can respond to an incident, either by manually controlling the switch via the GUI, or by using an automation action.
-It gets reset to `unknown` value with every incident received. Switching it to `on` means you send a response acknowledgement, switching it back `off` sends a response rejected.
+It gets reset to `unknown` value with every incident received. Switching it to `on` means you send a response acknowledgment, switching it back `off` sends a response rejected.
The following attributes are available:
diff --git a/source/_integrations/firmata.markdown b/source/_integrations/firmata.markdown
index 0716af3d7cce..a72cac554313 100644
--- a/source/_integrations/firmata.markdown
+++ b/source/_integrations/firmata.markdown
@@ -26,7 +26,7 @@ The Firmata protocol is a standard protocol for microcontrollers. Most of these
There is currently support for the following device types within Home Assistant:
-- [Binary sensor](#binary_sensor)
+- [Binary sensor](#binary_sensors)
- [Light](#lights)
- [Sensor](#sensors)
- [Switch](#switches)
diff --git a/source/_integrations/flexit_bacnet.markdown b/source/_integrations/flexit_bacnet.markdown
index bff795e24ba0..3a5d42af39a0 100644
--- a/source/_integrations/flexit_bacnet.markdown
+++ b/source/_integrations/flexit_bacnet.markdown
@@ -1,5 +1,5 @@
---
-title: Flexit BACnet
+title: Flexit Nordic (BACnet)
description: Instructions on how to integrate Flexit air handling unit into Home Assistant.
ha_category:
- Climate
@@ -7,8 +7,16 @@ ha_release: 2024.1
ha_iot_class: Local Polling
ha_domain: flexit_bacnet
ha_platforms:
+ - binary_sensor
- climate
-ha_integration_type: integration
+ - number
+ - sensor
+ - switch
+ha_integration_type: device
+ha_codeowners:
+ - '@lellky'
+ - '@piotrbulinski'
+ha_config_flow: true
---
Integrates [Flexit](https://www.flexit.no/en/) Nordic series air handling unit into Home Assistant.
@@ -24,4 +32,60 @@ To configure the integration, you need to obtain the IP address and Device ID fo
5. Go to **More** > **Installer** > **Communication** > **BACnet settings**.
6. Note down the **IP address** and **Device ID**.
+## Platforms
+
+This integration supports the following platforms.
+
+### Climate
+
+The integration adds an entity for climate with controls for preset ventilation modes and fan mode. It also has state for temperatures.
+
+### Sensor
+
+The integration adds entities for sensors with different readings from the device. There is currently support for the following sensors:
+
+ - Outside air temperature
+ - Supply air temperature
+ - Exhaust air temperature
+ - Extract air temperature
+ - Room temperature
+ - Fireplace ventilation remaining duration
+ - Rapid ventilation remaining duration
+ - Supply air fan control signal
+ - Supply air fan
+ - Exhaust air fan control signal
+ - Exhaust air fan
+ - Electric heater power
+ - Air filter operating time
+ - Heat exchanger efficiency
+ - Heat exchanger speed
+
+### Binary sensor
+
+The integration adds an entity for a binary sensor called _Air filter polluted_ which tells if it's time to change the filters in the unit.
+
+### Number
+
+The integration adds entities for setting setpoints for the fan in the respective mode:
+
+ - Away
+ - Home
+ - Fireplace
+ - High
+ - Cooker hood
+
+### Switch
+
+The integration adds an entity for a switch called _Electric heater_ that controls the heating element in the unit.
+
+### A note about shutting down the device
+
+Flexit recommends that the function to turn off the unit is not made accessible in the interface for an ordinary user. It will therefore be removed from the integration in the future.
+
+The consequences of shutting down the unit can be costly and extensive. For example, there can be condensation issues in freezing temperatures, and rotary heat exchangers can freeze.
+
+If you need to shut down the unit, make sure to take all necessary precautions, such as securing the system with frost protection dampers.
+
+Furthermore, Flexit recommends to unplug the unit from the power socket before replacing a filter. To prevent damage, always initiate a controlled shutdown from the control panel (or, in the future, from a service call in Home Assistant) before unplugging the device.
+
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/flexom.markdown b/source/_integrations/flexom.markdown
index 9233095870ee..ce7e03c70890 100644
--- a/source/_integrations/flexom.markdown
+++ b/source/_integrations/flexom.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/folder.markdown b/source/_integrations/folder.markdown
index bd435c5dc3ba..b9a1763969e9 100644
--- a/source/_integrations/folder.markdown
+++ b/source/_integrations/folder.markdown
@@ -12,7 +12,7 @@ ha_platforms:
ha_integration_type: integration
---
-Sensor for monitoring the contents of a folder. Note that folder paths must be added to [allowlist_external_dirs](/docs/configuration/basic/). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria.
+Sensor for monitoring the contents of a folder. Note that folder paths must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria.
The sensor exposes the number of filtered files in the folder, total size in bytes of those files and a comma separated list of the file paths as attributes.
## Configuration
diff --git a/source/_integrations/folder_watcher.markdown b/source/_integrations/folder_watcher.markdown
index e5b9b01aa0fe..cf7ce0a5df5b 100644
--- a/source/_integrations/folder_watcher.markdown
+++ b/source/_integrations/folder_watcher.markdown
@@ -1,16 +1,17 @@
---
-title: Folder Watcher
+title: Folder watcher
description: Integration for monitoring changes within the filesystem.
ha_category:
- System monitor
ha_iot_class: Local Polling
+ha_config_flow: true
ha_release: 0.67
ha_quality_scale: internal
ha_domain: folder_watcher
ha_integration_type: integration
---
-This integration adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files within configured folders. The monitored `event_type` are:
+The **Folder watcher** {% term integration %} adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files within configured folders. The monitored `event_type` are:
- `closed`
- `created`
@@ -18,40 +19,14 @@ This integration adds [Watchdog](https://pythonhosted.org/watchdog/) file system
- `modified`
- `moved`
-Configured folders must be added to [allowlist_external_dirs](/docs/configuration/basic/). Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored.
+Configured folders must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs). Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored.
-## Configuration
-
-To enable the Folder Watcher integration in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-folder_watcher:
- - folder: /config
-```
-
-{% configuration %}
-folder:
- description: The folder path
- required: true
- type: string
-patterns:
- description: Pattern matching to apply
- required: false
- default: "`*`"
- type: string
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
## Patterns
-Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.html) can be used to limit filesystem monitoring to only files which match the configured patterns. The following example shows the configuration required to only monitor filetypes `.yaml` and `.txt`.
-
-```yaml
-folder_watcher:
- - folder: /config
- patterns:
- - '*.yaml'
- - '*.txt'
-```
+Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.html) can be used to limit filesystem monitoring to only files which match the configured patterns.
+As example to monitor specific file, as example YAML and text-files add `*.yaml` and `*.txt`.
## Automations
diff --git a/source/_integrations/foscam.markdown b/source/_integrations/foscam.markdown
index 51eaecbe76f5..54abf407e3b0 100644
--- a/source/_integrations/foscam.markdown
+++ b/source/_integrations/foscam.markdown
@@ -6,7 +6,7 @@ ha_category:
ha_iot_class: Local Polling
ha_release: 0.7.3
ha_codeowners:
- - '@skgsergio'
+ - '@krmarien'
ha_domain: foscam
ha_config_flow: true
ha_platforms:
diff --git a/source/_integrations/freebox.markdown b/source/_integrations/freebox.markdown
index 736a8cd00d8d..12263bcceca1 100644
--- a/source/_integrations/freebox.markdown
+++ b/source/_integrations/freebox.markdown
@@ -2,7 +2,7 @@
title: Freebox
description: Instructions on how to integrate Freebox routers into Home Assistant.
ha_category:
- - Alarm Control Panel
+ - Alarm
- Camera
- Network
- Presence detection
@@ -45,34 +45,9 @@ You can find out your Freebox host and port by opening this address **Devices & Services**. Search for "Freebox", add your host and port, click submit.
-
-If you add the integration for the first time, follow the instructions in the [Initial setup](#initial-setup) section.
-
-### Via the configuration file
-
-```yaml
-freebox:
- host: foobar.fbxos.fr
- port: 1234
-```
-
-{% configuration %}
-host:
- description: The URL of the Freebox.
- required: true
- type: string
-port:
- description: The HTTPS port the Freebox is listening on.
- required: true
- type: string
-{% endconfiguration %}
-
-
- If you change your Freebox router for a new one, go into your Home Assistant configuration `.storage` folder and delete the "freebox" folder, then add the integration again.
+
+The `host` (ex: xxxxxxxx.fbxos.fr) and `port` given by refers to your Freebox public IP address and may not work if your Home Assistant server is located inside your local LAN. For local API access, you can alternatively use `host` = *mafreebox.freebox.fr* and `port` = *443*.
diff --git a/source/_integrations/fritz.markdown b/source/_integrations/fritz.markdown
index c1908c952597..a7d6b86b9860 100644
--- a/source/_integrations/fritz.markdown
+++ b/source/_integrations/fritz.markdown
@@ -139,11 +139,11 @@ automation:
```
-### Automation: Phone notification with Wi-fi credentials when guest Wi-fi is created
+### Automation: Phone notification with Wi-Fi credentials when guest Wi-Fi is created
```yaml
automation:
- - alias: "Guests Wi-fi Turned On -> Send Password To Phone"
+ - alias: "Guests Wi-Fi Turned On -> Send Password To Phone"
trigger:
- platform: state
entity_id: switch.fritzbox_7530_wifi_myssid
diff --git a/source/_integrations/fritzbox_callmonitor.markdown b/source/_integrations/fritzbox_callmonitor.markdown
index 8ec896f9825f..9960e628e99d 100644
--- a/source/_integrations/fritzbox_callmonitor.markdown
+++ b/source/_integrations/fritzbox_callmonitor.markdown
@@ -30,6 +30,8 @@ To use the FRITZ!Box call monitor in your installation, a user with at least `Vo
7. Check the rights box next to `Voice messages, faxes, FRITZ!App Fon and call list`.
8. Click the `Apply` button.
+You also need network access from HA to your FRITZ!Box on port `tcp/1012` for the call monitoring, as well as *one time access* to port `tcp/80` for setting up the integration.
+
## Setup
To activate the call monitor on your FRITZ!Box, dial **#96\*5\*** from any phone connected to it.
diff --git a/source/_integrations/frontend.markdown b/source/_integrations/frontend.markdown
index 932408735322..cdb056af35b4 100644
--- a/source/_integrations/frontend.markdown
+++ b/source/_integrations/frontend.markdown
@@ -42,7 +42,7 @@ frontend:
required: false
type: list
development_repo:
- description: Allows you to point to a directory containing frontend files instead of taking them from a pre-built PyPI package. Useful for Frontend development.
+ description: Allows you to point to a directory containing frontend files instead of taking them from a prebuilt PyPI package. Useful for Frontend development.
required: false
type: string
{% endconfiguration %}
@@ -94,7 +94,7 @@ Note that the variables will be used in the listed order, so if multiple match y
frontend:
themes:
my_theme:
- state-cover-garage_door-open-color: "#ff0000"
+ state-cover-garage-open-color: "#ff0000"
state-media_player-inactive-color: "#795548"
```
diff --git a/source/_integrations/frontier_silicon.markdown b/source/_integrations/frontier_silicon.markdown
index 77e2aeb7fbb6..709c0810454d 100644
--- a/source/_integrations/frontier_silicon.markdown
+++ b/source/_integrations/frontier_silicon.markdown
@@ -15,7 +15,7 @@ ha_ssdp: true
ha_config_flow: true
---
-This integration provides support for Internet Radios based on the [Frontier Silicon chipset]. Some of the manufacturers which offer products based on these chips include: Hama, Medion, Slivercrest, Auna, Technisat, Revo, Pinnel, etc. These devices will be usually controlled by the UNDOK app.
+This integration provides support for Internet Radios based on the [Frontier Silicon chipset]. Some of the manufacturers which offer products based on these chips include: Hama, Medion, Slivercrest, Auna, Technisat, Revo, Pinnel, etc. These devices will be usually controlled by the OKTIV or UNDOK apps.
## Supported models
@@ -28,11 +28,12 @@ Supported devices include, but are not limited to:
- Silvercrest: [SIRD 14 C2 (archived website)]
- Teufel: [Radio 3sixty (2019)]
- Roberts: [Roberts Stream 94i]
-- Some models from: Auna, Technisat, Revo, Pinell, Como Audio
+- TechniSat: [DIGITRADIO 10 IR], and some other models
+- Some models from: Auna, Revo, Pinell, Como Audio
This integration was developed and tested with a [Roberts Stream 94i].
-If your device is supported by the UNDOK app, then it is also supported by this integration.
+If your device is supported by the OKTIV or UNDOK apps, then it is also supported by this integration.
## Prerequisites
@@ -90,3 +91,4 @@ This renders the usage of [UNDOK] almost impossible for these older devices, as
[Radio 3sixty (2019)]: https://teufel.de/radio-3sixty-2019-105437000
[SIRD 14 C2 (archived website)]: https://web.archive.org/web/20191011141311/https://www.silvercrest-multiroom.de/produkte/stereo-internet-radio/
[Roberts Stream 94i]: https://www.robertsradio.com/en-gb/stream-94i
+[DIGITRADIO 10 IR]: https://www.technisat.com/en_XX/DIGITRADIO-10-IR/352-10774-22920/
diff --git a/source/_integrations/fujitsu_anywair.markdown b/source/_integrations/fujitsu_anywair.markdown
index 8157c8cd3ea1..f34ade98e416 100644
--- a/source/_integrations/fujitsu_anywair.markdown
+++ b/source/_integrations/fujitsu_anywair.markdown
@@ -1,21 +1,34 @@
---
title: Fujitsu anywAIR
-description: Instructions on how to integrate Fujitsu anywAIR controller into Home Assistant.
+description: Connect and control your Fujitsu anywAIR devices using the Advantage Air integration
ha_category:
+ - Binary sensor
- Climate
- Cover
- Light
+ - Select
- Sensor
+ - Switch
- Update
ha_release: 0.117
-ha_iot_class: Local Polling
-ha_config_flow: true
ha_domain: fujitsu_anywair
ha_supporting_domain: advantage_air
ha_supporting_integration: Advantage Air
+ha_integration_type: virtual
ha_codeowners:
- '@Bre77'
-ha_integration_type: virtual
+ha_config_flow: true
+ha_platforms:
+ - binary_sensor
+ - climate
+ - cover
+ - diagnostics
+ - light
+ - select
+ - sensor
+ - switch
+ - update
+ha_iot_class: Local Polling
---
{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/fyta.markdown b/source/_integrations/fyta.markdown
new file mode 100644
index 000000000000..74eaa15c24ae
--- /dev/null
+++ b/source/_integrations/fyta.markdown
@@ -0,0 +1,41 @@
+---
+title: FYTA
+description: Instructions on how to integrate FYTA sensors within Home Assistant.
+ha_category:
+ - Sensor
+ha_release: 2024.4
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@dontinelli'
+ha_domain: fyta
+ha_platforms:
+ - sensor
+ha_integration_type: hub
+---
+
+The **FYTA** {% term integration %} uses the open API of [FYTA](https://www.fyta.de) to obtain the data from your plant sensors and integrate these into Home Assistant.
+
+For the authentication on the FYTA server, you need your login-credentials (email and password).
+
+The integration provides a device for all plants with a [FYTA Beam](https://fyta.de/collections/all/products/single-beam) sensor. In order to be able to access your plant data over the API, you need a [FYTA hub](https://fyta.de/collections/all/products/single-hub) that uploads the data from the Beam sensor to the FYTA server. Alternatively, the mobile app can serve as gateaway to upload the data from the Beam to the server. No direct connection to the FYTA Beam is supported.
+
+{% include integrations/config_flow.md %}
+
+## Sensors
+
+The following sensors are currently available per plant:
+
+| name | Unit | Description |
+|-----------------------|--------|:-------------------------------------------|
+| scientific_name | | Scientific name of the plant |
+| plant_status | | FYTA-Status (number 1 to 5) |
+| temperature_status | | FYTA-Status (number 1 to 5) |
+| light_status | | FYTA-Status (number 1 to 5) |
+| moisture_status | | FYTA-Status (number 1 to 5) |
+| salinity_status | | FYTA-Status (number 1 to 5) |
+| temperature | °C | Temperature measured by sensor |
+| light | μmol/h | Light measured by sensor (hourly photosynthetically active radiation PAR)|
+| moisture | % | Moisture measured by sensor |
+| salinity | mS/cm | Salinity measured by sensor (measured as conductivity)|
+| battery_level | % | Battery level of the sensor |
diff --git a/source/_integrations/gaviota.markdown b/source/_integrations/gaviota.markdown
index 5d90b425fab4..489895bc4ba9 100644
--- a/source/_integrations/gaviota.markdown
+++ b/source/_integrations/gaviota.markdown
@@ -1,12 +1,12 @@
---
title: Gaviota
-description: Connect and control your Gaviota devices using the Motion Blinds integration
+description: Connect and control your Gaviota devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: gaviota
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/generic_hygrostat.markdown b/source/_integrations/generic_hygrostat.markdown
index 6746fbd064a1..3eab325e82eb 100644
--- a/source/_integrations/generic_hygrostat.markdown
+++ b/source/_integrations/generic_hygrostat.markdown
@@ -46,16 +46,16 @@ min_humidity:
description: Set minimum set point available.
required: false
default: 0
- type: integer
+ type: float
max_humidity:
description: Set maximum set point available.
required: false
default: 100
- type: integer
+ type: float
target_humidity:
description: Set initial target humidity. This value will be used as a fallback when the previous setpoint is not available.
required: false
- type: integer
+ type: float
device_class:
description: Whether the switch specified in the *humidifier* option to be treated as a humidifier or a dehumidifier device. Must be either "humidifier" or "dehumidifier"
required: false
diff --git a/source/_integrations/generic_thermostat.markdown b/source/_integrations/generic_thermostat.markdown
index 0fa443246d28..2ad00f82897e 100644
--- a/source/_integrations/generic_thermostat.markdown
+++ b/source/_integrations/generic_thermostat.markdown
@@ -89,6 +89,10 @@ comfort_temp:
description: "Set the temperature used by `preset_mode: comfort`."
required: false
type: float
+eco_temp:
+ description: "Set the temperature used by `preset_mode: eco`."
+ required: false
+ type: float
home_temp:
description: "Set the temperature used by `preset_mode: home`."
required: false
diff --git a/source/_integrations/glances.markdown b/source/_integrations/glances.markdown
index 2b8d753e1f13..bff66d10ff4c 100644
--- a/source/_integrations/glances.markdown
+++ b/source/_integrations/glances.markdown
@@ -18,27 +18,17 @@ The `glances` integration allows you to monitor the system information provided
## Setup
-These sensors needs a running instance of `glances` on the host. The minimal supported version of `glances` is 2.3.
-To start a Glances RESTful API server on its default port 61208 then test you can use the following command:
-
-```bash
-$ sudo glances -w
-Glances web server started on http://0.0.0.0:61208/
-```
-
-Check if you are able to access the API located at `http://IP_ADRRESS:61208/api/3`. Don't use `-s` as this will start the XML-RPC server on port 61209. Home Assistant only supports the REST API of GLANCES.
+
-The details about your memory usage is provided as a JSON response. If so, you are good to proceed.
+ Support for Glances api version 2 is deprecated. It is recommended to upgrade your Glances server to version 3. Once upgraded, reload the integration to connect again.
-```bash
-$ curl -X GET http://IP_ADDRESS:61208/api/3/mem/free
-{"free": 203943936}
-```
+
-If this doesn't work, try changing the `3` to `2`, if you don't have the latest version of Glances installed.
+These sensors needs a running instance of `glances` on the host. The minimal supported version of `glances` is 2.3.
For details about auto-starting `glances`, please refer to [Start Glances through Systemd](https://github.com/nicolargo/glances/wiki/Start-Glances-through-Systemd).
+
{% include integrations/config_flow.md %}
## Integration entities
@@ -49,6 +39,9 @@ Glances integration will add the following sensors if available in the platform:
- disk_use_percent: The used disk space in percent.
- disk_use: The used disk space.
- disk_free: The free disk space.
+- For each detected physical disk, the following sensors will be created:
+ - diskio_read: Average rate of data read from the device in megabytes per second.
+ - diskio_write: Average rate of data written to the device in megabytes per second.
- memory_use_percent: The used memory in percent.
- memory_use: The used memory.
- memory_free: The free memory.
@@ -68,5 +61,14 @@ 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.
+- For each detected network interface, the following sensors will be created:
+ - network_rx: Average rate of data received since last update in Megabits per second.
+ - network_tx: Average rate of data sent since last update in Megabits per second.
+- For each detected GPU (video card) the following sensors will be created:
+ - memory_use: The amount of available VRAM used in percent.
+ - processor_use: The load on the GPU processor in percent.
+ - temperature: The temperature that the GPU reports, in degrees Celsius.
+ - fan_speed: The speed of the GPU fan, in percent.
+- 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.
+Not all platforms are able to provide all metrics. For instance the GPU sensors require installing the py3nvml Python package, and the cpu temp sensor requires installing and configuring `lmsensors` in Ubuntu, and may not be available at all in other platforms.
diff --git a/source/_integrations/goodwe.markdown b/source/_integrations/goodwe.markdown
index b7946059cd8c..9220e4fe4b44 100644
--- a/source/_integrations/goodwe.markdown
+++ b/source/_integrations/goodwe.markdown
@@ -13,6 +13,7 @@ ha_codeowners:
ha_domain: goodwe
ha_platforms:
- button
+ - diagnostics
- number
- select
- sensor
diff --git a/source/_integrations/google.markdown b/source/_integrations/google.markdown
index 841f1d69e89c..ec8c55ae637c 100644
--- a/source/_integrations/google.markdown
+++ b/source/_integrations/google.markdown
@@ -52,7 +52,7 @@ For example, your calendar named *Personal* is created as entity `calendar.perso
## Calendar event automations
-Individual Calendar *Events* are what powering automations such as:
+Individual Calendar *Events* are what is powering automations such as:
- Turn on a light at the *start* of the event named *Front Yard Light*
- Send a notification *5 minutes before the start of any event*
diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown
index 2c6b714233b6..51eb1fee5f5e 100644
--- a/source/_integrations/google_assistant.markdown
+++ b/source/_integrations/google_assistant.markdown
@@ -66,26 +66,27 @@ To use Google Assistant, your Home Assistant configuration has to be [externally
3. Select the **Develop** tab at the top of the page, then, in the upper right hand corner, select the **Test** button to generate the draft version Test App. If you don't see this option, go to the **Test** tab instead, select the **Settings** button in the top right below the header, and ensure **On device testing** is enabled (if it isn't, enable it).
-4. Go to [Google Cloud Platform](https://console.cloud.google.com/).
- 1. Go to **Select a project**.
- 2. In the window that popped up, select your newly created project from step 1.
- 3. Go to the menu and select **APIs and Services** and next **Credentials**.
- 4. In the **Credentials** view, select **Create credentials** and next **Service account**.
+4. Enable device sync ([see below for more information](#enable-device-sync)).
+ 1. Go to [Google Cloud Platform](https://console.cloud.google.com/).
+ 2. Go to **Select a project**.
+ 3. In the window that popped up, select your newly created project from step 1.
+ 4. Go to the menu and select **APIs and Services** and next **Credentials**.
+ 5. In the **Credentials** view, select **Create credentials** and next **Service account**.
1. **Service account name**: Give your account a self-selected name.
2. Select **Create and Continue**.
3. Under **Select a role**, select **Service Accounts** > **Service Account Token Creator**.
4. Select **Continue** and then **Done**.
- 5. Under **Service Accounts**, there should now be an account called [name from 4.1]@[projectname].iam.gserviceaccount.com.
- 6. Select the pencil button of that service account.
- 7. Go to **Keys** and **Add key**.
- 8. Create a private key, make sure it is in JSON format.
- 9. This will start a download of a JSON file.
+ 6. Under **Service Accounts**, there should now be an account called [name from 4.1]@[projectname].iam.gserviceaccount.com.
+ 7. Select the pencil button of that service account.
+ 8. Go to **Keys** and **Add key**.
+ 9. Create a private key in JSON format.
+ 10. This will start a download of a JSON file.
1. Rename the file to `SERVICE_ACCOUNT.JSON`.
2. Add this file to your config-folder. This will be the same folder as your `configuration.yaml`.
- 10. Go back to [Google Cloud Platform](https://console.cloud.google.com/) and select **Close**.
- 11. Then select **Save**.
- 12. Go to the **Search products and resources** and search for **Homegraph API** and select it.
- 13. Enable the HomeGraph API.
+ 11. Go back to [Google Cloud Platform](https://console.cloud.google.com/) and select **Close**.
+ 12. Then select **Save**.
+ 13. Go to the **Search products and resources** and search for **Homegraph API** and select it.
+ 14. Enable the HomeGraph API.
5. Add the `google_assistant` integration configuration to your `configuration.yaml` file and restart Home Assistant following the [configuration guide](#yaml-configuration) below.
6. Add services in the Google Home App (note that app versions may be slightly different).
@@ -117,23 +118,9 @@ If you want to allow other household users to control the devices:
If you want to support active reporting of state to Google's server (configuration option `report_state`) and synchronize Home Assistant devices with the Google Home app (`google_assistant.request_sync` service), you will need to create a service account. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have set up this component, you will need to call this service (or command) each time you add a new device in Home Assistant that you wish to control via the Google Assistant integration. This allows you to update devices without unlinking and relinking an account (see [below](#troubleshooting)).
-1. Service Account
- 1. In the Google Cloud Platform Console, go to the [Create Service account key](https://console.cloud.google.com/iam-admin/serviceaccounts/create) page.
- 2. At the top left of the page next to "Google Cloud Platform" logo, select your project created in the Actions on Google console. Confirm this by reviewing the project ID and it ensure it matches.
- 3. From the Service account list, select **Create service account**.
- 4. In the **Service account name** field, enter a name.
- 5. In the **Service account ID** field, enter an ID.
- 6. Under **Select a role**, select **Service Accounts** > **Service Account Token Creator**.
- 7. Select **Continue** and then **Done**. You are returned to the service account list, and your new account is shown.
- 8. Select the three dots menu under **Actions** next to your new account, and select **Manage keys**. You are taken to a **Keys** page.
- 9. Select **Add key** then **Create new key**. Leave the **key type** as **JSON** and select **Create**. A JSON file that contains your key downloads to your computer.
- 10. Use the information in this file or the file directly to add to the `service_account` key in the configuration.
- 11. Select **Close**.
-2. HomeGraph API
- 1. Go to the [Google API Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview).
- 2. At the top left of the page next to "Google Cloud Platform" logo, select your project created in the Actions on Google console. Confirm this by reviewing the project ID and it ensure it matches.
- 3. Select **Enable HomeGraph API**.
-3. Try "OK Google, sync my devices" - the Google Home app should import your exposed Home Assistant devices and prompt you to assign them to rooms.
+The service account is created by following Step 4 (Enable device sync) in the previous section [Google Cloud Platform configuration](#google-cloud-platform-configuration).
+
+Try it with "OK Google, sync my devices" - the Google Home app should import your exposed Home Assistant devices and prompt you to assign them to rooms.
### Enable local fulfillment
@@ -159,14 +146,18 @@ For secure remote access, use a reverse proxy such as the {% my supervisor_addon
1. Open the project you created in the [Actions on Google console](https://console.actions.google.com/).
2. Select **Develop** on the top of the page, then select **Actions** located in the hamburger menu on the top left.
-3. Upload `app.js` from [here](https://github.com/NabuCasa/home-assistant-google-assistant-local-sdk/releases/latest) for both Node and Chrome by selecting the **Upload JavaScript files** button.
-4. Add device scan configuration:
+3. Upload Javascript files
+ 1. Download `app.js` from [here](https://github.com/NabuCasa/home-assistant-google-assistant-local-sdk/releases/latest)
+ 2. Select the **Upload JavaScript files** button.
+ 3. Select **Upload your JavaScript targeting Node** and upload the `app.js` from step 3.1.
+ 4. Select **Upload your JavaScript targeting Chrome (browser)** and upload the `app.js` from step 3.1.
+4. Check the box **Support local query** under **Add capabilities**.
+5. Add device scan configuration:
1. Select **+ New scan config** if no configuration exists.
2. Select **MDNS**.
3. Set **MDNS service name** to `_home-assistant._tcp.local`
4. Select **Add field**, then under **Select a field**, choose **Name**.
5. Enter a new **Value** field set to `.*\._home-assistant\._tcp\.local`
-5. Check the box **Support local query** under **Add capabilities**.
6. Save your changes.
7. Either wait for 30 minutes, or restart all your Google Assistant devices.
8. Restart Home Assistant Core.
@@ -271,8 +262,8 @@ Currently, the following domains are available to be used with Google Assistant,
- alarm_control_panel (arm/disarm)
- button (scene)
- camera (streaming, requires compatible camera)
-- climate (temperature setting, hvac_mode)
-- cover (on/off/set position)
+- climate (on/off, temperature setting, hvac_mode)
+- cover (on/off/set position/stop/start=toggle cover)
- event (only entities with device class `doorbell` are supported)
- fan (on/off/speed percentage/preset mode)
- group (on/off)
@@ -289,7 +280,7 @@ Currently, the following domains are available to be used with Google Assistant,
- sensor (temperature setting for temperature sensors and humidity setting for humidity sensors)
- switch (on/off)
- vacuum (dock/start/stop/pause)
-- valve (open/close/set position/stop)
+- valve (open/close/set position/stop/start=toggle valve)
- water_heater (on-off/temperature setting/operation mode)
@@ -373,13 +364,13 @@ This error may occur if the service key is invalid. Try deleting and creating a
#### NGINX
-When using NGINX, ensure that your `proxy_pass` line *does not* have a trailing `/`, as this will result in errors. Your line should look like:
+When using NGINX, ensure that your `proxy_pass` line _does not_ have a trailing `/`, as this will result in errors. Your line should look like:
proxy_pass http://localhost:8123;
### Unlink and relink
-If you're having trouble with *Account linking failed* after you unlinked your service, try clearing the browser history and cache.
+If you're having trouble with _Account linking failed_ after you unlinked your service, try clearing the browser history and cache.
### Failed linking - Could not update the setting. Please check your connection
diff --git a/source/_integrations/google_assistant_sdk.markdown b/source/_integrations/google_assistant_sdk.markdown
index 14f716ef07f0..750bba81ba8e 100644
--- a/source/_integrations/google_assistant_sdk.markdown
+++ b/source/_integrations/google_assistant_sdk.markdown
@@ -2,6 +2,7 @@
title: Google Assistant SDK
description: Instructions on how to use Google Assistant SDK in Home Assistant.
ha_category:
+ - Notifications
- Voice
ha_iot_class: Cloud Polling
ha_release: 2023.1
@@ -69,24 +70,76 @@ The integration setup will next give you instructions to enter the [Application
{% enddetails %}
+## Enable personal results (for advanced users)
+
+This guide shows you how to enable personal commands such as "remind me tomorrow at 9 pm to take out the trash".
+
+This guide is for advanced users only. It requires creating an OAuth client ID of the Desktop app, running a Python program on your desktop or laptop, copying the resulting credentials to your Home Assistant config files, and likely running an Android emulator.
+
+ ### Prerequisites
+
+- Successfully installed the Google Assistant integration.
+
+{% details "Create credentials" %}
+
+1. Navigate to [Google Developers Console > Credentials](https://console.cloud.google.com/apis/credentials).
+2. Select the project you created earlier from the dropdown menu in the upper left corner.
+3. Select **Create credentials** (at the top of the screen), then select **OAuth client ID**.
+4. Set the Application type to **Desktop app** and give this credential set a name (like "Home Assistant Desktop Credentials").
+5. Select **Create**.
+6. In the OAuth client-created screen, select **Download JSON**.
+7. Rename the downloaded file to `client_secret.json`.
+8. On your Windows, Linux, or Mac machine, download Python if you don't have it already.
+9. Open the terminal (on Windows, select **Start** and then type `cmd`).
+10. In the terminal, run the following commands (preferably in a Python virtual environment):
+11. `python -m pip install --upgrade google-auth-oauthlib[tool]`
+ - Under Windows: `google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --scope https://www.googleapis.com/auth/gcm --save --client-secrets %userprofile%\Downloads\client_secret.json`
+ - Under Linux: `google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --scope https://www.googleapis.com/auth/gcm --save --client-secrets ~/Downloads/client_secret.json`
+ - **Result**: A browser window will open, asking you to select the account to continue to the cloud project you created earlier.
+12. Once you select the correct account, select both checkboxes:
+ - **Use your Google Assistant: broad access to your Google account**
+ - **Send information to your Android device**
+13. Select **Continue**.
+ - **Result**: If everything was successful, you will get a **The authentication flow has completed. You may close this window** message in your browser.
+ - In your terminal you will see the path where the credentials were saved. For example: `credentials saved: C:\Users\user\AppData\Roaming\google-oauthlib-tool\credentials.json`
+14. Open the `credentials.json` in a text editor. Keep it open since you will need to copy several values from it.
+15. In the file editor of your Home Assistant, typically http://homeassistant.local:8123/core_configurator, open `/homeassistant/.storage/application_credentials`.
+ - Locate the entry for `google_assistant_sdk` and modify `client_id` and `client_secret` to match the ones from `credentials.json`.
+ - Save the file.
+16. Open `/homeassistant/.storage/core.config_entries`.
+ - Locate the entry for `google_assistant_sdk` and modify `refresh_token` to match the one from `credentials.json`.
+ - Save the file.
+17. Restart Home Assistant.
+
+{% enddetails %}
+
+{% details "Enable personal results" %}
+
+1. Go to **{% my developer_services title="Developer Tools > Services" %}** and issue a query that requires personal results, for example call `google_assistant_sdk.send_text_command` with `command: "what is my name"`
+2. On your phone, you should receive a notification **Allow personal answers** **Allow Google Assistant to answer your questions about your calendar, trips, and more**.
+3. DO NOT tap on **ALLOW** (it won't work until you enter a device name). Instead, tap on the notification text.
+4. If the app doesn't open, you need to retry on a device running Android 12. If you don't have such a device, you can use an Android emulator.
+5. Tap on **Device Name**, enter any device name (like Home Assistant), and tap on **OK**.
+6. Only after having a non-empty device name, enable the checkbox next to **Personal results**.
+
+{% enddetails %}
+
## Troubleshooting
If you have an error with your credentials you can delete them in the [Application Credentials](/integrations/application_credentials/) user interface.
If commands don't work try removing superfluous words such as "the". E.g. "play rain sounds on bedroom speaker" instead of "play rain sounds on the bedroom speaker".
-If broadcasting doesn't work, make sure: the speakers aren't in do not disturb mode, the Home Assistant server is in the same network as the speakers, and IPv6 is disabled in the router.
+If broadcasting doesn't work, make sure: the speakers aren't in do not disturb mode, the Home Assistant server is in the same network as the speakers.
The easiest way to check if the integration is working is to check [My Google Activity](https://myactivity.google.com/myactivity) for the issued commands and their responses.
## Limitations/known issues
- Multiple Google accounts are not supported.
-- Personal results are not supported yet since that requires creating an OAuth client ID of the Desktop app.
- If you see the issued commands in [My Google Activity](https://myactivity.google.com/myactivity), the integration is working fine. If the commands don't have the expected outcome, don't open an issue in the Home Assistant Core project or the [underlying library](https://github.com/tronikos/gassist_text). You should instead report the issue directly to Google [here](https://github.com/googlesamples/assistant-sdk-python/issues). Examples of known Google Assistant API issues:
- Media playback commands (other than play news, play podcast, play white noise, or play rain sounds) don't work.
- Routines don't work.
- - Broadcast doesn't work with IPv6.
- Broadcast to specific rooms often doesn't work for non-English languages.
- Commands that need to verify your identity through voice match do not work.
diff --git a/source/_integrations/google_generative_ai_conversation.markdown b/source/_integrations/google_generative_ai_conversation.markdown
index 65cd64d6d5f8..71a3a217c3ca 100644
--- a/source/_integrations/google_generative_ai_conversation.markdown
+++ b/source/_integrations/google_generative_ai_conversation.markdown
@@ -12,7 +12,7 @@ ha_domain: google_generative_ai_conversation
ha_integration_type: service
---
-The Google Generative AI integration adds a conversation agent powered by [Google Generative AI](https://developers.generativeai.google/) in Home Assistant.
+The Google Generative AI integration adds a conversation agent powered by [Google Generative AI](https://ai.google.dev/) in Home Assistant.
This conversation agent is unable to control your house. The Google Generative AI conversation agent can be used in automations, but not as a [sentence trigger](/docs/automation/trigger/#sentence-trigger). It can only query information that has been provided by Home Assistant. To be able to answer questions about your house, Home Assistant will need to provide Google Generative AI with the details of your house, which include areas, devices and their states.
@@ -24,8 +24,6 @@ This integration requires an API key to use, [which you can generate here](https
The Google Generative AI API key is used to authenticate requests to the Google Generative AI API. To generate an API key take the following steps:
-- Join the PaLM API and MakerSuite [waitlist](https://makersuite.google.com/waitlist).
-- Wait several days for an email with subject "It’s your turn to use the PaLM API and MakerSuite".
- Visit the [API Keys page](https://makersuite.google.com/app/apikey) to retrieve the API key you'll use to configure the integration.
{% include integrations/option_flow.md %}
@@ -45,4 +43,52 @@ Top P:
Top K:
description: Number of top-scored tokens to consider during generation.
+Maximum Tokens to Return in Response:
+ description: The maximum number of words or "tokens" that the AI model should generate.
+
{% endconfiguration_basic %}
+
+## Services
+
+### Service `google_generative_ai_conversation.generate_content`
+
+Allows you to ask Gemini Pro or Gemini Pro Vision to generate content from a prompt consisting of text and optionally images.
+This service populates [response data](/docs/scripts/service-calls#use-templates-to-handle-response-data) with the generated content.
+
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ---------------------------------------------- | ------------------- |
+| `prompt` | no | The prompt for generating the content. | Describe this image |
+| `image_filename` | yes | File names for images to include in the prompt. | /tmp/image.jpg |
+
+{% raw %}
+```yaml
+service: google_generative_ai_conversation.generate_content
+data:
+ prompt: >-
+ Very briefly describe what you see in this image from my doorbell camera.
+ Your message needs to be short to fit in a phone notification. Don't
+ describe stationary objects or buildings.
+ image_filename: /tmp/doorbell_snapshot.jpg
+response_variable: generated_content
+```
+{% endraw %}
+
+The response data field `text` will contain the generated content.
+
+Another example with multiple images:
+
+{% raw %}
+```yaml
+service: google_generative_ai_conversation.generate_content
+data:
+ prompt: >-
+ Briefly describe what happened in the following sequence of images
+ from my driveway camera.
+ image_filename:
+ - /tmp/driveway_snapshot1.jpg
+ - /tmp/driveway_snapshot2.jpg
+ - /tmp/driveway_snapshot3.jpg
+ - /tmp/driveway_snapshot4.jpg
+response_variable: generated_content
+```
+{% endraw %}
diff --git a/source/_integrations/google_mail.markdown b/source/_integrations/google_mail.markdown
index b4dbf38860bd..2d42bfd34db8 100644
--- a/source/_integrations/google_mail.markdown
+++ b/source/_integrations/google_mail.markdown
@@ -89,6 +89,6 @@ data:
### Video tutorial
-This video tutorial explains how to set up Gmail in Home Assistant and how you can create a dashboard and automations to send e-mail and toggle your out-of-office notice.
+This video tutorial explains how to set up Gmail in Home Assistant and how you can create a dashboard and automations to send email and toggle your out-of-office notice.
diff --git a/source/_integrations/google_maps.markdown b/source/_integrations/google_maps.markdown
index f2e63f1bc4e0..5de714d2fcd2 100644
--- a/source/_integrations/google_maps.markdown
+++ b/source/_integrations/google_maps.markdown
@@ -55,7 +55,7 @@ device_tracker:
Once enabled and you have rebooted devices discovered through this integration will be listed in the `known_devices.yaml` file within your configuration directory.
-They will be created with indentifiers like `google_maps_`. To be able to properly track entities you must set the `track` attribute to `true`.
+They will be created with identifiers like `google_maps_`. To be able to properly track entities you must set the `track` attribute to `true`.
{% configuration %}
username:
diff --git a/source/_integrations/google_tasks.markdown b/source/_integrations/google_tasks.markdown
index 1ae24fd95f23..02ccff1f7616 100644
--- a/source/_integrations/google_tasks.markdown
+++ b/source/_integrations/google_tasks.markdown
@@ -12,11 +12,28 @@ ha_codeowners:
ha_integration_type: integration
ha_platforms:
- todo
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - url: https://support.google.com/tasks/answer/7675772
+ title: Google Tasks
+ - url: https://console.cloud.google.com/apis/library/tasks.googleapis.com
+ title: Google Developers Console
---
The **Google Tasks** integration allows you to connect your [Google Tasks](https://support.google.com/tasks/answer/7675772) to Home Assistant. The integration adds a [to-do list entity](/integrations/todo) for
each task list, allowing you to create, update, or delete items on the list from the **To-do list** dashboard.
+
+
+The Google Tasks public API does not support viewing or setting the due time of tasks, only the due date.
+
+
+
## Prerequisites
You need to configure developer credentials to allow Home Assistant to access your Google Account.
diff --git a/source/_integrations/google_translate.markdown b/source/_integrations/google_translate.markdown
index dc8d30b8eae6..58f27d628fc7 100644
--- a/source/_integrations/google_translate.markdown
+++ b/source/_integrations/google_translate.markdown
@@ -40,7 +40,24 @@ You can also use supported BCP 47 tags like the below or the 2-2 digit format fo
| es-es | es | es |
| es-us | es | com |
-## Service say
+
+## Service speak
+
+The `tts.speak` service is the modern way to use Google translate TTS action. Add the `speak` action, select the entity for your Google translate TTS (it's named for the language you created it with), 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
+service: tts.speak
+target:
+ entity_id: tts.google_en_com
+data:
+ media_player_entity_id: media_player.giant_tv
+ message: Hello, can you hear me now?
+```
+
+## Service say (legacy)
diff --git a/source/_integrations/govee_ble.markdown b/source/_integrations/govee_ble.markdown
index 20d726108eb3..4f8dc1657311 100644
--- a/source/_integrations/govee_ble.markdown
+++ b/source/_integrations/govee_ble.markdown
@@ -30,15 +30,21 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot
- H5072 Hygrometer Thermometer
- H5074 Hygrometer Thermometer
- [H5075 Bluetooth Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-bluetooth-hygrometer-thermometer-h5075)
-- H5100 Hygrometer Thermometer
+- [H5100 Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-h5100-mini-hygrometer-thermometer-sensors)
- H5101 Hygrometer Thermometer
- H5102 Hygrometer Thermometer
+- H5103 Hygrometer Thermometer
+- [H5104 Hygrometer Thermometer](https://us.govee.com/products/goveelife-bluetooth-hygrometer-thermometer-h5104-white)
+- H5105 Hygrometer Thermometer
+- H5106 Hygrometer Thermometer and Air Quality Monitor
+- H5108 Hygrometer Thermometer
- [H5177/5178 Bluetooth Thermo-Hygrometer](https://us.govee.com/collections/thermo-hydrometer/products/bluetooth-thermo-hygrometer)
-- H5179 Hygrometer Thermometer
+- H5174 Hygrometer Thermometer
+- [H5179 Hygrometer Thermometer](https://us.govee.com/products/wi-fi-temperature-humidity-sensor)
- 5055 Meat Thermometer
- 5181 Meat Thermometer
- 5182 Meat Thermometer
- 5183 Meat Thermometer
- 5184 Meat Thermometer
- 5185 Meat Thermometer
-- 5198 Meat Thermometer
+- [5198 Meat Thermometer](https://us.govee.com/products/govee-wi-fi-grilling-meat-thermometer-with-4-probes)
diff --git a/source/_integrations/govee_light_local.markdown b/source/_integrations/govee_light_local.markdown
new file mode 100644
index 000000000000..dd4be322687a
--- /dev/null
+++ b/source/_integrations/govee_light_local.markdown
@@ -0,0 +1,86 @@
+---
+title: Govee lights local
+description: Instructions on how to integrate Govee lights with Govee local API
+ha_category:
+ - light
+ha_release: 2024.2
+ha_iot_class: Local Push
+ha_codeowners:
+ - '@Galorhallen'
+ha_domain: govee_light_local
+ha_config_flow: true
+ha_platforms:
+ - light
+ha_integration_type: integration
+---
+
+Integrates [Govee](https://www.govee.com/) lights into Home Assistant using Local API control.
+
+To enable local control on your Govee device, refer to the instructions available [here](https://app-h5.govee.com/user-manual/wlan-guide).
+
+{% include integrations/config_flow.md %}
+
+## Supported devices
+
+H6046,
+H6047,
+H6051,
+H6052,
+H6056,
+H6059,
+H6061,
+H6062,
+H6065,
+H6066,
+H6067,
+H6072,
+H6073,
+H6076,
+H6078,
+H6087,
+H6088,
+H608A,
+H610A,
+H610B,
+H6117,
+H6159,
+H615E,
+H6163,
+H6168,
+H6172,
+H6173,
+H618A,
+H618C,
+H618E,
+H618F,
+H619A,
+H619B,
+H619C,
+H619D,
+H619E,
+H619Z,
+H61A0,
+H61A1,
+H61A2,
+H61A3,
+H61A5,
+H61A8,
+H61B2,
+H61E1,
+H7012,
+H7013,
+H7021,
+H7028,
+H7041,
+H7042,
+H7050,
+H7051,
+H7055,
+H705A,
+H705B,
+H7060,
+H7061,
+H7062,
+H7065,
+H706A,
+H70C1
diff --git a/source/_integrations/gpsd.markdown b/source/_integrations/gpsd.markdown
index d2bed43001c4..9c76443f401f 100644
--- a/source/_integrations/gpsd.markdown
+++ b/source/_integrations/gpsd.markdown
@@ -4,9 +4,11 @@ description: Instructions on how to integrate GPSD into Home Assistant.
ha_category:
- Utility
ha_release: 0.26
+ha_config_flow: true
ha_iot_class: Local Polling
ha_codeowners:
- '@fabaff'
+ - '@jrieger'
ha_domain: gpsd
ha_platforms:
- sensor
@@ -42,30 +44,4 @@ Escape character is '^]'.
{"class":"VERSION","release":"3.15","rev":"3.15-2.fc23","proto_major":3,"proto_minor":11}
```
-## Configuration
-
-To setup a GPSD sensor in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: gpsd
-```
-
-{% configuration %}
-host:
- description: The host where GPSD is running.
- required: false
- type: string
- default: localhost
-port:
- description: The port which GPSD is using.
- required: false
- type: integer
- default: 2947
-name:
- description: Friendly name to use for the frontend.
- required: false
- type: string
- default: GPS
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/group.markdown b/source/_integrations/group.markdown
index 2970a679fc1f..0f3042047fe6 100644
--- a/source/_integrations/group.markdown
+++ b/source/_integrations/group.markdown
@@ -253,7 +253,7 @@ name:
required: false
type: string
unique_id:
- description: An ID that uniquely identifies this group. If two groups have the same unique ID, Home Assistant will raise an error. Giving an group a unique ID allow the group name, icon and area to be customized via the UI.
+ description: An ID that uniquely identifies this group. If two groups have the same unique ID, Home Assistant will raise an error. Giving the group a unique ID allows the group name, icon and area to be customized via the UI.
required: false
type: string
all:
@@ -378,23 +378,34 @@ icon:
Old style groups can calculate group state with entities from the following domains:
+- `alert`
- `alarm_control_panel`
+- `automation`
- `binary_sensor`
+- `calendar`
- `climate`
- `cover`
- `device_tracker`
- `fan`
- `humidifier`
+- `input_boolean`
- `light`
- `lock`
- `media_player`
- `person`
- `plant`
- `remote`
+- `script`
- `switch`
- `vacuum`
- `water_heater`
+
+
+Platform domains other than these are not supported to be used with old style groups, nor will other domains be supported in the future.
+
+
+
When member entities all have a single `on` and `off` state, the group state will be calculated as follows:
| Domain | on | off |
diff --git a/source/_integrations/growatt_server.markdown b/source/_integrations/growatt_server.markdown
index 3063255ff781..192db9e3ed72 100644
--- a/source/_integrations/growatt_server.markdown
+++ b/source/_integrations/growatt_server.markdown
@@ -13,8 +13,15 @@ ha_config_flow: true
ha_integration_type: integration
---
-This is a sensor to collect information from your Growatt inverters using [Growatt server](https://server.growatt.com/) by default. It is possible to specify an alternative endpoint server at configuration time e.g., [SMTEN](https://server.smten.com/).
+This sensor is designed to gather data from Growatt inverters, offering users a choice of various alternative endpoint servers during setup. Available options include:
-This will log into your Growatt account and grab the first "Plant", after which it collects the inverters on this plant and creates sensors for these inverters as well as total sensors.
+- For users in China, the Chinese server at https://openapi-cn.growatt.com/.
+- For users in North America, the North American server at https://openapi-us.growatt.com/.
+- For users in other regions, a general server at https://openapi.growatt.com/.
+- Additionally, the SMTEN server at http://server.smten.com/ serves as another alternative.
+
+Users keen to explore all current supported servers and configuration possibilities can do so by integrating this feature in Home Assistant. This integration ensures global users can select the optimal server for their Growatt inverters, boosting both the efficiency and dependability of data collection.
+
+Once integrated, the sensor logs into the user's Growatt account and accesses the first "Plant." It then retrieves the inverters associated with this plant and generates sensors for these inverters, as well as overall plant sensors.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/guardian.markdown b/source/_integrations/guardian.markdown
index 4350549a98fe..d51ccaaa140a 100644
--- a/source/_integrations/guardian.markdown
+++ b/source/_integrations/guardian.markdown
@@ -8,6 +8,7 @@ ha_category:
- Button
- Sensor
- Switch
+ - Valve
ha_config_flow: true
ha_codeowners:
- '@bachya'
@@ -19,6 +20,7 @@ ha_platforms:
- diagnostics
- sensor
- switch
+ - valve
ha_dhcp: true
ha_integration_type: device
---
@@ -31,7 +33,8 @@ There is currently support for the following device types within Home Assistant:
- **Binary sensor**: reports the status of the onboard leak detector and access point
- **Button**: add various configuration controls
- **Sensor**: reports on the device's detected temperature and uptime
-- **Switch**: allows the user to open and close the valve
+- **Switch**: allows the user to enable and disable the onboard access point
+- **Valve**: allows the user to open and close the valve
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown
index 855d7590e68d..9c21fd9a44ec 100644
--- a/source/_integrations/habitica.markdown
+++ b/source/_integrations/habitica.markdown
@@ -12,6 +12,7 @@ ha_platforms:
ha_codeowners:
- '@ASMfreaK'
- '@leikoilja'
+ - '@tr4nt0r'
ha_config_flow: true
ha_integration_type: integration
---
@@ -46,27 +47,6 @@ At runtime you will be able to use API for each respective user by their Habitic
You can override this by passing `name` key, this value will be used instead of the username.
If you are hosting your own instance of Habitica, you can specify a URL to it in `url` key.
-{% configuration %}
-api_user:
- description: "Habitica's API user ID. This value can be grabbed from [account setting](https://habitica.com/user/settings/api)"
- required: true
- type: string
-api_key:
- description: "Habitica's API password (token). This value can be grabbed from [account setting](https://habitica.com/user/settings/api) by pressing 'Show API token'"
- required: true
- type: string
-name:
- description: "Override for Habitica's username. Will be used for service calls"
- required: false
- type: string
- default: Deduced at startup
-url:
- description: "URL to your Habitica instance, if you are hosting your own"
- required: false
- type: string
- default: https://habitica.com
-{% endconfiguration %}
-
### API Service Parameters
The API is exposed to Home Assistant as a service called `habitica.api_call`. To call it you should specify this keys in service data:
diff --git a/source/_integrations/hardware.markdown b/source/_integrations/hardware.markdown
index 199f7d9221a5..415c0029e1a4 100644
--- a/source/_integrations/hardware.markdown
+++ b/source/_integrations/hardware.markdown
@@ -13,9 +13,4 @@ ha_integration_type: system
The Hardware integration provides an API which offers information about certain board types, USB dongles, and resource usage.
-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
-hardware:
-```
+This integration is enabled by default.
diff --git a/source/_integrations/havana_shade.markdown b/source/_integrations/havana_shade.markdown
index efa7b8b10374..868f53707cb6 100644
--- a/source/_integrations/havana_shade.markdown
+++ b/source/_integrations/havana_shade.markdown
@@ -1,12 +1,12 @@
---
title: Havana Shade
-description: Connect and control your Havana Shade devices using the Motion Blinds integration
+description: Connect and control your Havana Shade devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: havana_shade
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/heatmiser.markdown b/source/_integrations/heatmiser.markdown
index 4b655d86db96..3052e54f036b 100644
--- a/source/_integrations/heatmiser.markdown
+++ b/source/_integrations/heatmiser.markdown
@@ -13,7 +13,7 @@ ha_platforms:
ha_integration_type: integration
---
-The `heatmiser` climate platform let you control [Heatmiser DT/DT-E/PRT/PRT-E](https://www.heatmisershop.co.uk/room-thermostats/) thermostats from Heatmiser. The module itself is currently setup to work over a RS232 -> RS485 converter, therefore it connects over IP.
+The `heatmiser` climate platform lets you control [Heatmiser DT/DT-E/PRT/PRT-E](https://www.heatmisershop.co.uk/room-thermostats/) thermostats from Heatmiser. The module itself is currently set up to work over a RS232 -> RS485 converter, therefore it connects over IP.
Further work would be required to get this setup to connect over Wi-Fi, but the HeatmiserV3 Python module being used is a full implementation of the V3 protocol.
diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown
index cb12ee09b6a6..8fba4803b746 100644
--- a/source/_integrations/heos.markdown
+++ b/source/_integrations/heos.markdown
@@ -144,6 +144,7 @@ For removing a HEOS player from a group you can use the `media_player.unjoin` se
## Notes
- Receivers with multiple zones are represented as a single media player. They will be turned on when playback is started, but cannot be turned off by the integration at this time.
+- [Denon AVR](/integrations/denonar/) and HEOS media players can be combined into a [Universal Media Player](/integrations/universal/#denon-avr--heos)
## Troubleshooing
diff --git a/source/_integrations/hexaom.markdown b/source/_integrations/hexaom.markdown
index 861d0d6059f8..57512f7ea0a8 100644
--- a/source/_integrations/hexaom.markdown
+++ b/source/_integrations/hexaom.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/hi_kumo.markdown b/source/_integrations/hi_kumo.markdown
index 9b2cfffa3735..73763b7ad81d 100644
--- a/source/_integrations/hi_kumo.markdown
+++ b/source/_integrations/hi_kumo.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/history.markdown b/source/_integrations/history.markdown
index 7b9a5f10cb4d..87603d666a4f 100644
--- a/source/_integrations/history.markdown
+++ b/source/_integrations/history.markdown
@@ -9,9 +9,14 @@ ha_codeowners:
- '@home-assistant/core'
ha_domain: history
ha_integration_type: system
+related:
+ - docs: /integrations/recorder/
+ title: Recorder integration
+ - url: https://data.home-assistant.io
+ title: Home Assistant Data Science Portal
---
-The `history` integration will track everything that is going on within Home
+The **History** integration tracks everything that is going on within Home
Assistant and allows the user to browse through it. It depends on the [`recorder`](/integrations/recorder/)
integration for storing the data and uses the same database setting.
If any entities are excluded from being recorded,
@@ -24,6 +29,27 @@ This integration is by default enabled, unless you've disabled or removed the [`
history:
```
+## Exporting data from the History panel
+
+You can access the **History** panel from the side bar. To export the data, follow these steps:
+
+1. Select the areas, devices, or entities of interest.
+2. Set the time frame.
+3. In the top right corner, select the **Download data** button.
+ **Result**: Your data is exported in CSV format.
+
+
+
+## About the data sources
+
+By default, the recorder stores the sensor data for 10 days. Older data is purged automatically. The data for the last 10 days is taken from the recorder.
+
+If you select a time frame that exceeds 10 days, the data is taken from the long term statistics table. The long term statistics data is sampled and averaged once per hour, to save storage. Therefore, the values might look different from what you see from the recorder data, which shows the measured values at the sample rate defined for that sensor.
+
+
+
+ If you want to see the data in full resolution for a longer period of time, you could change the retention period for that sensor in the recorder. If you do this, you may need to increase the storage capacity of your device.
+
## API
The history information is also available through the
diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown
index 83d836cbfa04..5cabd7d3e59e 100644
--- a/source/_integrations/history_stats.markdown
+++ b/source/_integrations/history_stats.markdown
@@ -1,5 +1,5 @@
---
-title: History Stats
+title: History stats
description: Instructions about how to integrate historical statistics into Home Assistant.
ha_category:
- Sensor
@@ -13,7 +13,7 @@ ha_platforms:
ha_integration_type: integration
---
-The `history_stats` sensor platform provides quick statistics about another integration or platforms, using data from the [`history`](/integrations/history/) integration.
+The **History stats** {% term integration %} provides quick statistics about another integration or platforms, using data from the [`history`](/integrations/history/) integration.
It can track how long the integration has been in a specific state, in a custom time period.
@@ -37,7 +37,7 @@ sensor:
entity_id: light.my_lamp
state: "on"
type: time
- start: "{{ now().replace(hour=0, minute=0, second=0) }}"
+ start: "{{ today_at() }}"
end: "{{ now() }}"
```
@@ -147,7 +147,7 @@ Here are some examples of periods you could work with, and what to write in your
{% raw %}
```yaml
- start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
+ start: "{{ today_at() }}"
end: "{{ now() }}"
```
@@ -158,7 +158,7 @@ Here are some examples of periods you could work with, and what to write in your
{% raw %}
```yaml
- end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
+ end: "{{ today_at() }}"
duration:
hours: 24
```
@@ -170,7 +170,7 @@ Here are some examples of periods you could work with, and what to write in your
{% raw %}
```yaml
- start: "{{ now().replace(hour=6, minute=0, second=0, microsecond=0) }}"
+ start: "{{ today_at('06:00') }}"
duration:
hours: 5
```
@@ -179,12 +179,12 @@ Here are some examples of periods you could work with, and what to write in your
**Current week**: starts last Monday at 00:00, ends right now.
-Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekday (86400 is the number of seconds in one day, the weekday is 0 on Monday, 6 on Sunday).
+Here, last Monday is today at 00:00, minus the current weekday (the weekday is 0 on Monday, 6 on Sunday).
{% raw %}
```yaml
- start: "{{ as_timestamp( now().replace(hour=0, minute=0, second=0, microsecond=0) ) - now().weekday() * 86400 }}"
+ start: "{{ today_at() - timedelta(days=now().weekday()) }}"
end: "{{ now() }}"
```
@@ -195,7 +195,7 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
{% raw %}
```yaml
- start: "{{ now().replace(day=1, hour=0, minute=0, second=0, microsecond=0 ) }}"
+ start: "{{ today_at().replace(day=1) }}"
end: "{{ now() }}"
```
@@ -206,8 +206,8 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
{% raw %}
```yaml
- start: "{{ now().replace(day=1, month=now().month-1, hour=0, minute=0, second=0, microsecond=0) }}"
- end: "{{ now().replace(day=1, hour=0, minute=0, second=0, microsecond=0) }}"
+ start: "{{ (today_at().replace(day=1) - timedelta(days=1)).replace(day=1) }}"
+ end: "{{ today_at().replace(day=1) }}"
```
{% endraw %}
@@ -217,7 +217,7 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
{% raw %}
```yaml
- end: "{{ (now().replace(minute=0, second=0, microsecond=0) + timedelta(hours=8)).replace(hour=16) }}"
+ end: "{{ (now() + timedelta(hours=8)).replace(hour=16, minute=0, second=0, microsecond=0) }}"
duration:
hours: 24
```
@@ -229,7 +229,7 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
{% raw %}
```yaml
- end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
+ end: "{{ today_at() }}"
duration:
days: 30
```
diff --git a/source/_integrations/hko.markdown b/source/_integrations/hko.markdown
new file mode 100644
index 000000000000..8b441407271e
--- /dev/null
+++ b/source/_integrations/hko.markdown
@@ -0,0 +1,25 @@
+---
+title: Hong Kong Observatory
+description: Instructions on how to integrate the Hong Kong Observatory (HKO) Open Data API into Home Assistant.
+ha_category:
+ - Weather
+ha_release: 2024.2
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@MisterCommand'
+ha_domain: hko
+ha_platforms:
+ - weather
+ha_integration_type: integration
+---
+
+The HKO integration retrieves weather data from the [Hong Kong Observatory](https://www.hko.gov.hk/tc/index.html) [Open Data API](https://www.hko.gov.hk/en/abouthko/opendata_intro.htm) for meteorological data in HKSAR.
+
+There is currently support for the following platforms within Home Assistant:
+
+- [Weather](#weather-platform)
+
+It displays the weather of your selected location and the 5-day weather forecast for Hong Kong.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/holiday.markdown b/source/_integrations/holiday.markdown
index 2ff746ec1608..5744366345c7 100644
--- a/source/_integrations/holiday.markdown
+++ b/source/_integrations/holiday.markdown
@@ -11,6 +11,7 @@ ha_platforms:
- calendar
ha_codeowners:
- '@jrieger'
+ - '@gjohansson-ST'
ha_integration_type: integration
---
diff --git a/source/_integrations/home_plus_control.markdown b/source/_integrations/home_plus_control.markdown
index e71e1b18a00c..e8d1d1c263c8 100644
--- a/source/_integrations/home_plus_control.markdown
+++ b/source/_integrations/home_plus_control.markdown
@@ -1,100 +1,40 @@
---
title: Legrand Home+ Control
-description: Instructions on how to integrate Legrand Home+ Control into Home Assistant.
+description: Connect and control your Legrand Home+ Control devices using the Netatmo integration
ha_category:
+ - Binary sensor
+ - Camera
+ - Climate
+ - Cover
+ - Environment
+ - Fan
+ - Hub
+ - Light
+ - Media source
+ - Sensor
- Switch
-ha_release: 2021.4
-ha_iot_class: Cloud Polling
+ - Weather
+ha_release: '0.20'
+ha_domain: home_plus_control
+ha_integration_type: virtual
+ha_supporting_domain: netatmo
+ha_supporting_integration: Netatmo
ha_codeowners:
- - '@chemaaa'
+ - '@cgtobi'
ha_config_flow: true
-ha_domain: home_plus_control
ha_platforms:
+ - binary_sensor
+ - camera
+ - climate
+ - cover
+ - diagnostics
+ - fan
+ - light
+ - select
+ - sensor
- switch
-ha_integration_type: integration
+ha_iot_class: Cloud Polling
+ha_homekit: true
---
-
-
-The Legrand Home+ Control cloud is shutting down in December. Use [the Netatmo integration](/integrations/netatmo/) to integrate your Legrand Home+ Control devices.
-
-
-
-The Home+ Control integration platform allows you to control a range of Legrand in-wall switches and power outlets that have smart home functionality thanks to their "with Netatmo" capabilities.
-
-This integration works against the Home+ Control API, which is one of the many APIs offered through the [*Works with Legrand*](https://developer.legrand.com/) program. The API is capable of managing "Legrand/Btcino with Netatmo" devices, such as light switches, power outlets and rolling shutters.
-
-The devices that this API can manage are offered in different designs across different countries. The details of these can be found [here](https://developer.legrand.com/solutions/wiring-devices-with-netatmo/).
-
-This Home+ Control integration for Home Assistant currently has support for the following devices:
-
-- Light switches
-- Power outlets
-
-In both cases, the devices are modeled as on/off switches within Home Assistant.
-
-This integration has been tested to work with the following range of Legrand products
-
-- Valena Next™ with Netatmo
-
-This integration has also been tested to work with the following range of BTicino products
-
-- Living Now (Light switches)
-
-## Authentication
-
-Before you are able to configure the Legrand Home + Control integration into Home Assistant, you must register with the *Works with Legrand* platform.
-
-These Legrand APIs rely on Oauth2 authentication, so you must follow these steps to obtain the necessary authentication parameters:
-
-1. Register an account at .
-2. Create a subscription to the *Starter Kit* (currently the only subscription available) and this will generate your `SUBSCRIPTION_KEY`.
-3. Register an application, where you will have to define a name, a redirect URL and the scopes of your application. When selecting the scopes, be sure to include all of the `.read` scopes, as well as the `light.write` and `plug.write` scopes to be able to control these modules from the integration.
-
-Once the registered application is confirmed, you should receive an email containing the `CLIENT_IDENTIFIER` and the `CLIENT_SECRET` which you will be using to set up the authentication flows. The application confirmation email is usually received within a few hours of having issued the request.
-
-Finally, to set up Oauth2 authentication in Home Assistant you should add the following information to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-home_plus_control:
- client_id: CLIENT_IDENTIFIER
- client_secret: CLIENT_SECRET
- subscription_key: SUBSCRIPTION_KEY
-```
-
-{% configuration %}
-client_id:
- description: Client identifier for your registered application on the *Works with Legrand* platform. Received via email.
- required: true
- type: string
-client_secret:
- description: Client secret for your registered application on the *Works with Legrand* platform. Received via email.
- required: true
- type: string
-subscription_key:
- description: Subscription identifier for your registered account on the *Works with Legrand* platform. Provided upon registration.
- required: true
- type: string
-{% endconfiguration %}
-
-Restart Home Assistant after changing the YAML configuration. At this point, you are now ready to add the Home+ Control integration to your Home Assistant instance as described in the [Configuration](#configuration) section.
-
-{% include integrations/config_flow.md %}
-
-## API nomenclature
-
-Within the context of the Home+ Control API you may come across the following terms:
-
-- *Plant*: This is the term used to represent a *home* that holds the Legrand devices. In practice, a *plant* is represented by the *Legrand Home+ Control* gateway that acts as the central hub of the rest of the devices in the home network (uses Zigbee).
-- *Module*: This is the term used to represent a generic device within the *plant*, i.e., a light, a plug, a remote, etc.
-- *Light*: This is the term used to represent a light switch (or a micro-module). It is not modeled as your usual light entity because there are no brightness, color, etc. controls. It is modeled as an on/off switch.
-- *Plug*: This is the term used to represent a power outlet.
-
-Other devices that are mentioned in the API, but that are not currently supported by this integration are: *remotes* (wireless switches), *heaters* and *automations*.
-
-## API limitations
-
-As described in the [authentication](#authentication) section, this integration requires you to set up a subscription in the *Works with Legrand* platform.
-
-Currently, end-users only have access to the *Starter Kit* subscription which has a major limitation in the number of allowed API requests that are allowed - only 500 API calls per day (counter is reset at 00:00 every day). If this daily quota is ever exceeded, the API will report `403 Forbidden` HTTP responses.
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/homeassistant.markdown b/source/_integrations/homeassistant.markdown
index 503b57909434..cd6ca218562d 100644
--- a/source/_integrations/homeassistant.markdown
+++ b/source/_integrations/homeassistant.markdown
@@ -11,9 +11,240 @@ ha_domain: homeassistant
ha_platforms:
- scene
ha_integration_type: system
+related:
+ - docs: /docs/configuration/basic/
+ title: Basic information
+ - docs: /docs/configuration/
+ - docs: /docs/configuration/customizing-devices/
---
-The Home Assistant integration provides generic implementations like the generic `homeassistant.turn_on`.
+The **Home Assistant Core** {% term integration %} provides generic implementations like the generic `homeassistant.turn_on`.
+
+## Editing the general settings in YAML
+
+The Home Assistant Core integration is also responsible for the general settings. These settings are defined during onboarding, but you can change them later under {% my general title="**Settings** > **System** > **General**" %}. For the detailed steps, refer to [Basic settings](/docs/configuration/basic/).
+
+If you prefer editing in YAML, you can define your general settings in the [`configuration.yaml` file](/docs/configuration/).
+Note that for some of the settings, these can't be edited from the UI if they were defined in YAML. They will be grayed out or inaccessible.
+
+
+
+ Screenshot showing coordinates cannot be edited because they are defined in configuration.yaml file.
+
+
+To get started with the general settings in YAML, follow these steps:
+
+1. Copy the following information to your [`configuration.yaml` file](/docs/configuration/).
+
+ ```yaml
+ homeassistant:
+ name: Home
+ latitude: 32.87336
+ longitude: 117.22743
+ elevation: 430
+ unit_system: metric
+ currency: USD
+ country: US
+ time_zone: "America/Los_Angeles"
+ external_url: "https://www.example.com"
+ internal_url: "http://homeassistant.local:8123"
+ allowlist_external_dirs:
+ - "/usr/var/dumping-ground"
+ - "/tmp"
+ allowlist_external_urls:
+ - "http://images.com/image1.png"
+ media_dirs:
+ media: "/media"
+ recordings: "/mnt/recordings"
+ debug: false
+ ```
+
+2. Edit each entry to fit your home.
+
+{% configuration %}
+name:
+ description: Name of the location where Home Assistant is running.
+ required: false
+ type: string
+latitude:
+ description: Latitude of your location required to calculate the time the sun rises and sets.
+ required: false
+ type: float
+longitude:
+ description: Longitude of your location required to calculate the time the sun rises and sets.
+ required: false
+ type: float
+elevation:
+ description: Altitude above sea level in meters. Impacts sunrise data.
+ required: false
+ type: integer
+unit_system:
+ description: "`metric` for Metric, `us_customary` for US Customary. This also sets temperature_unit, Celsius for Metric and Fahrenheit for US Customary"
+ required: false
+ type: string
+temperature_unit:
+ description: "Override temperature unit set by unit_system. `C` for Celsius, `F` for Fahrenheit."
+ required: false
+ type: string
+time_zone:
+ description: "Pick your time zone from the column **TZ** of [Wikipedia's list of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)"
+ required: false
+ type: string
+currency:
+ description: "Pick your currency code from the column **Code** of [Wikipedia's list of ISO 4217 active codes](https://en.wikipedia.org/wiki/ISO_4217#Active_codes)"
+ required: false
+ type: string
+ default: "EUR"
+external_url:
+ description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
+ required: false
+ type: string
+internal_url:
+ description: "The URL that Home Assistant is available on from your local network. For example: `http://homeassistant.local:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
+ required: false
+ type: string
+customize:
+ description: "[Customize](#editing-the-entity-settings-in-yaml) entities."
+ required: false
+ type: string
+customize_domain:
+ description: "[Customize](#editing-the-entity-settings-in-yaml) all entities in a domain."
+ required: false
+ type: string
+customize_glob:
+ description: "[Customize](#editing-the-entity-settings-in-yaml) entities matching a pattern."
+ required: false
+ type: string
+allowlist_external_dirs:
+ description: List of folders that can be used as sources for sending files.
+ required: false
+ type: list
+allowlist_external_urls:
+ description: List of external URLs that can be fetched. URLs can match specific resources (e.g., `http://10.10.10.12/images/image1.jpg`) or a relative path that allows access to resources within it (e.g., `http://10.10.10.12/images` would allow access to anything under that path)
+ required: false
+ type: list
+media_dirs:
+ description: A mapping of local media sources and their paths on disk.
+ required: false
+ type: map
+language:
+ description: "Default language used by Home Assistant. This may, for example, influence the language used by voice assistants. The language should be specified as an RFC 5646 language tag, and must be a language which Home Assistant is translated to."
+ required: false
+ type: string
+ default: "en"
+country:
+ description: "Country in which Home Assistant is running. This may, for example, influence radio settings to comply with local regulations. The country should be specified as an ISO 3166.1 alpha-2 code. Pick your country from the column **Code** of [Wikipedia's list of ISO 31661 alpha-2 officially assigned code codes](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements)"
+ required: false
+ type: string
+debug:
+ description: Enable Home Assistant's built-in debug, which can help locate misbehaving integrations by enabling run-time checks for implementation errors. It can block many unsafe thread operations from crashing the system. Enabling debug has a slight performance impact on the system and is not recommended for long-term use.
+ required: false
+ type: boolean
+ default: false
+{% endconfiguration %}
+
+## Editing the entity settings in YAML
+
+The Home Assistant Core integration is also responsible for the entity settings.
+By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities.
+
+Most of these settings can be changed from the UI. For the detailed steps, refer to [Customizing entites](/docs/configuration/customizing-devices/).
+
+If you prefer editing in YAML, you can define your general settings in the [`configuration.yaml` file](/docs/configuration/).
+
+### Possible values
+
+{% configuration customize %}
+friendly_name:
+ description: Name of the entity as displayed in the UI.
+ required: false
+ type: string
+entity_picture:
+ description: URL to use as picture for entity.
+ required: false
+ type: string
+icon:
+ description: "Any icon from [Material Design Icons](https://pictogrammers.com/library/mdi/). Prefix name with `mdi:`, ie `mdi:home`. Note: Newer icons may not yet be available in the current Home Assistant release."
+ required: false
+ type: string
+assumed_state:
+ description: For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon.
+ required: false
+ type: boolean
+ default: true
+device_class:
+ description: Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). It does not set the `unit_of_measurement`.
+ required: false
+ type: device_class
+ default: None
+unit_of_measurement:
+ description: Defines the units of measurement, if any. This will also influence the graphical presentation in the history visualization as continuous value. Sensors with missing `unit_of_measurement` are showing as discrete values.
+ required: false
+ type: string
+ default: None
+initial_state:
+ description: Sets the initial state for automations, `on` or `off`.
+ required: false
+ type: boolean
+ default: None
+{% endconfiguration %}
+
+### Device class
+
+Device class is currently supported by the following platforms:
+
+- [Binary sensor](/integrations/binary_sensor/)
+- [Button](/integrations/button/)
+- [Cover](/integrations/cover/)
+- [Humidifier](/integrations/humidifier/)
+- [Media player](/integrations/media_player/)
+- [Number](/integrations/number/)
+- [Sensor](/integrations/sensor/)
+- [Switch](/integrations/switch/)
+
+### Manual customization
+
+
+
+If you implement `customize`, `customize_domain`, or `customize_glob` you must make sure it is done inside of `homeassistant:` or it will fail.
+
+
+
+```yaml
+homeassistant:
+ name: Home
+ unit_system: metric
+ # etc
+
+ customize:
+ # Add an entry for each entity that you want to overwrite.
+ thermostat.family_room:
+ entity_picture: https://example.com/images/nest.jpg
+ friendly_name: Nest
+ switch.wemo_switch_1:
+ friendly_name: Toaster
+ entity_picture: /local/toaster.jpg
+ switch.wemo_switch_2:
+ friendly_name: Kitchen kettle
+ icon: mdi:kettle
+ switch.rfxtrx_switch:
+ assumed_state: false
+ media_player.my_media_player:
+ source_list:
+ - Channel/input from my available sources
+ # Customize all entities in a domain
+ customize_domain:
+ light:
+ icon: mdi:home
+ automation:
+ initial_state: "on"
+ # Customize entities matching a pattern
+ customize_glob:
+ "light.kitchen_*":
+ icon: mdi:description
+ "scene.month_*_colors":
+ icon: mdi:other
+```
## Services
@@ -43,12 +274,12 @@ will take effect the next time an importing template is rendered.
Reloads an integration config entry.
-| Service data attribute | Description |
-|---------------------------|-------------------------------------------------------------|
-| `entity_id` | List of entity ids used to reference a config entry. |
-| `area_id` | List of area ids used to reference a config entry. |
-| `device_id` | List of device ids used to reference a config entry. |
-| `entry_id` | A single config entry id used to reference a config entry. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------- |
+| `entity_id` | List of entity ids used to reference a config entry. |
+| `area_id` | List of area ids used to reference a config entry. |
+| `device_id` | List of device ids used to reference a config entry. |
+| `entry_id` | A single config entry id used to reference a config entry. |
### Service `homeassistant.reload_core_config`
@@ -68,11 +299,11 @@ Stops the Home Assistant instance. Home Assistant must be restarted from the Hos
Update the location of the Home Assistant default zone (usually "Home").
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `latitude` | no | Latitude of your location. |
-| `longitude` | no | Longitude of your location. |
-| `elevation` | yes | Elevation of your location. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------- |
+| `latitude` | no | Latitude of your location. |
+| `longitude` | no | Longitude of your location. |
+| `elevation` | yes | Elevation of your location. |
#### Example
@@ -92,9 +323,9 @@ Generic service to toggle devices on/off. Same usage as the
service compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be toggled in a single service call.
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | The entity_id of the device to toggle on/off. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------------------------- |
+| `entity_id` | yes | The entity_id of the device to toggle on/off. |
#### Example
@@ -114,9 +345,9 @@ Generic service to toggle devices on. Same usage as the
service compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be turned on in a single service call.
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | The entity_id of the device to turn on. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------------------- |
+| `entity_id` | yes | The entity_id of the device to turn on. |
#### Example
@@ -136,9 +367,9 @@ Generic service to toggle devices off. Same usage as the
service compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be turned off in a single service call.
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | The entity_id of the device to turn off. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------- |
+| `entity_id` | yes | The entity_id of the device to turn off. |
#### Example
@@ -155,9 +386,9 @@ action:
Force one or more entities to update its data rather than wait for the next scheduled update.
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | no | One or multiple entity_ids to update. It can be a list. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------- |
+| `entity_id` | no | One or multiple entity_ids to update. It can be a list. |
#### Example
diff --git a/source/_integrations/homeassistant_sky_connect.markdown b/source/_integrations/homeassistant_sky_connect.markdown
index 5c9f45a03ecc..e4059a757256 100644
--- a/source/_integrations/homeassistant_sky_connect.markdown
+++ b/source/_integrations/homeassistant_sky_connect.markdown
@@ -7,7 +7,7 @@ ha_category:
ha_codeowners:
- '@home-assistant/core'
ha_domain: homeassistant_sky_connect
-ha_integration_type: hardware
+ha_integration_type: device
ha_config_flow: true
---
diff --git a/source/_integrations/homekit_controller.markdown b/source/_integrations/homekit_controller.markdown
index 911968d75b52..d38ac0791527 100644
--- a/source/_integrations/homekit_controller.markdown
+++ b/source/_integrations/homekit_controller.markdown
@@ -52,7 +52,7 @@ There are different methods to add a HomeKit device to Home Assistant:
- [via Ethernet or Wi-Fi](#adding-a-homekit-device-via-ethernet-or-wi-fi)
- [via Bluetooth](#adding-a-homekit-device-through-bluetooth)
-- via Thread
+- [via Thread](#adding-a-homekit-device-through-thread)
- [by using Home Assistant’s preferred Thread network](#adding-a-homekit-device-to-a-thread-network-via-home-assistant)
- [by using Apple Thread border router](#adding-a-homekit-device-via-apple-thread-border-router)
@@ -64,7 +64,7 @@ The HomeKit Device integration automatically detects HomeKit [compatible devices
- If you do not have the [`default_config`](/integrations/default_config/) integration, add [`zeroconf`](/integrations/zeroconf/) to your `configuration.yaml` file.
- Find your HomeKit pairing code. The code is on the device itself, or on the packaging. If your device has a screen, it may be shown on screen.
- - There is no way to recover this if you do not have it. In this case, you will need to contact the manufacturer to see what options you have.
+ - There is no way to recover this if you do not have it. In this case, you will need to contact the manufacturer to see what options you have.
- Make sure your device is powered up.
- Make sure the device is on your network, but not paired with another HomeKit controller. Depending on the device, you need to follow a different set of steps:
- If your device is not already in your network: Join the device to your network:
@@ -98,9 +98,9 @@ You can add a HomeKit [compatible device](#supported-devices) to Home Assistant
- There is no way to recover this if you do not have it. In this case, you will need to contact the manufacturer to see what options you have.
- If your Home Assistant instance does not natively support Bluetooth, use an ESPHome Bluetooth proxy.
- A proxy can also be helpful if your Home Assistant device is too far away from the device you are trying to pair.
-- If your HomeKit device has been used with Thread before, or is still paired with iOS, reset the device.
+- If your HomeKit device has been used with {% term Thread %} before, or is still paired with iOS, reset the device.
- HomeKit devices can only be paired to a single controller at once.
- - If it has been in a Thread network before, the device might remember the Thread credentials of a different network. A reset makes sure the device is not connected to any Thread network.
+ - If it has been in a {% term Thread %} network before, the device might remember the {% term Thread %} credentials of a different network. A reset makes sure the device is not connected to any {% term Thread %} network.
### To add a HomeKit device through Bluetooth
@@ -114,59 +114,66 @@ You can add a HomeKit [compatible device](#supported-devices) to Home Assistant
- Bluetooth devices may take significantly longer to pair than IP devices.
- Add the device to a room and **Finish**.
-## Adding a HomeKit device to a Thread network via Home Assistant
+## Adding a HomeKit device through Thread
-There are two methods to add a HomeKit [compatible device](#supported-devices) to a Thread network:
+This section shows the ways you can join a HomeKit device to a {% term Thread %} network:
-- via Home Assistant's preferred Thread network
-- via [Apple Thread border router](#adding-a-homekit-device-to-home-assistant-via-apple-thread-border-router)
+1. via Home Assistant
+2. via Apple Thread border router
-This section describes how to add it via Home Assistant's preferred Thread network.
+### Adding a HomeKit device to a Thread network via Home Assistant
-### Prerequisites
+There are two methods to add a HomeKit [compatible device](#supported-devices) to a {% term Thread %} network:
+
+- via Home Assistant's preferred {% term Thread %} network
+- via [Apple Thread border router](#adding-a-homekit-device-via-apple-thread-border-router)
-- A HomeKit device which supports Thread. This is indicated by the Thread label on the packaging.
+This section describes how to add it via Home Assistant's preferred {% term Thread %} network.
+
+#### Prerequisites
+
+- A HomeKit device which supports {% term Thread %}. This is indicated by the Thread label on the packaging.
- Make sure the HomeKit device has been [joined using Bluetooth](#adding-a-homekit-device-through-bluetooth).
- **Thread network**: In order to use HomeKit over Thread, you need a working border router.
- Make sure your Home Assistant device is on the same network (LAN) as the border router.
- - Make sure the Thread network you'd like to use is known by Home Assistant and marked as **Preferred network** in the Thread configuration.
- - If you have a Home Assistant Yellow or SkyConnect, you can enable multiprotocol to set up an Open Thread border router and with that a Thread network.
+ - Make sure the {% term Thread %} network you'd like to use is known by Home Assistant and marked as **Preferred network** in the {% term Thread %} configuration.
+ - If you have a Home Assistant Yellow or SkyConnect, you can enable multiprotocol to set up an Open Thread border router and with that a {% term Thread %} network.
- Documentation on [enabling multiprotocol on Yellow](https://yellow.home-assistant.io/guides/enable-multiprotocol/)
- Documentation on [enabling multiprotocol on SkyConnect](https://skyconnect.home-assistant.io/procedures/enable-multiprotocol/)
-### To add a HomeKit device to a Thread network via Home Assistant
+#### To add a HomeKit device to a Thread network via Home Assistant
1. To open the device configuration page, on the **HomeKit** integration, select the **device**.
2. Under **Diagnostic**, you can see the **Thread Status** as **Disabled**.
![Device configuration page](/images/integrations/homekit_controller/homekit_controller_add_02.png)
-3. To enable Thread, under **Configuration**, select **Press**. This will provision the preferred Thread credentials.
+3. To enable {% term Thread %}, under **Configuration**, select **Press**. This will provision the preferred Thread credentials.
- The status has now changed:
- Depending on the device type, the mesh size and health, the Thread status can be **Child**, **Router**, or **Leader**.
![Thread status](/images/integrations/homekit_controller/homekit_controller_add_02.png)
- - That's it. Your HomeKit device now communicates via Thread.
+ - That's it. Your HomeKit device now communicates via {% term Thread %}.
-## Adding a HomeKit device via Apple Thread border router
+### Adding a HomeKit device via Apple Thread border router
-There are two methods to add a HomeKit [compatible device](#supported-devices) to a Thread network:
+There are two methods to add a HomeKit [compatible device](#supported-devices) to a {% term Thread %} network:
- via [Home Assistant's preferred Thread network](#adding-a-homekit-device-to-a-thread-network-via-home-assistant)
- via Apple Thread border router
This section describes how to add a HomeKit [compatible device](#supported-devices) using an Apple Thread border router device such as a HomePod mini.
-### Prerequisites
+#### Prerequisites
- An Apple device that can act as a Thread border router, such as a HomePod mini.
-- A HomeKit device which supports Thread. This is indicated by the Thread label on the packaging.
+- A HomeKit device which supports {% term Thread %}. This is indicated by the Thread label on the packaging.
- Make sure your Home Assistant instance is on the same network (LAN) as the border router.
- Make sure the HomeKit device has been paired in the Apple Home app (using the iOS Home app).
-### To add a HomeKit device via Apple Thread border router
+#### To add a HomeKit device via Apple Thread border router
1. Remove the HomeKit device from the Apple Home app. Don't reset the device.
- - This leaves the Thread network details on the HomeKit device.
+ - This leaves the {% term Thread %} network details on the HomeKit device.
- The device will be automatically discovered by the HomeKit controller integration in Home Assistant.
- - It will appear as a discovered device over Thread.
+ - It will appear as a discovered device over {% term Thread %}.
2. Under **{% my integrations title="Settings > Devices & Services" %}**, on the HomeKit integration, select **Configure**.
![HomeKit integration](/images/integrations/homekit_controller/homekit_controller_add_01.png)
@@ -179,7 +186,7 @@ This section describes how to add a HomeKit [compatible device](#supported-devic
5. Under **Diagnostic**, check the status:
- Depending on the device type, the mesh size and health, the Thread status can be **Child**, **Router**, or **Leader**.
![Thread status](/images/integrations/homekit_controller/homekit_controller_add_02.png)
- - That's it. Your HomeKit device now communicates via Thread.
+ - That's it. Your HomeKit device now communicates via {% term Thread %}.
## Supported devices
diff --git a/source/_integrations/homematic.markdown b/source/_integrations/homematic.markdown
index bcc2948f65c7..10d27e1bb93e 100644
--- a/source/_integrations/homematic.markdown
+++ b/source/_integrations/homematic.markdown
@@ -15,7 +15,6 @@ ha_iot_class: Local Push
ha_release: 0.23
ha_codeowners:
- '@pvizeli'
- - '@danielperna84'
ha_domain: homematic
ha_platforms:
- binary_sensor
diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown
index 5da3de12d451..2fdba5f94ee9 100644
--- a/source/_integrations/homematicip_cloud.markdown
+++ b/source/_integrations/homematicip_cloud.markdown
@@ -29,6 +29,8 @@ ha_platforms:
- switch
- weather
ha_integration_type: integration
+ha_codeowners:
+ - '@hahn-th'
---
The [HomematicIP](https://www.homematic-ip.com/) integration platform is used as an interface to the cloud server. Since there is no official documentation about this API, everything was done via reverse engineering. Use at your own risk.
diff --git a/source/_integrations/homewizard.markdown b/source/_integrations/homewizard.markdown
index b9408b937774..9bda71324123 100644
--- a/source/_integrations/homewizard.markdown
+++ b/source/_integrations/homewizard.markdown
@@ -18,6 +18,8 @@ ha_platforms:
ha_zeroconf: true
ha_integration_type: integration
ha_quality_scale: platinum
+works_with:
+ - local
---
Integration for the [HomeWizard Energy](https://www.homewizard.com) platform. It can collect data locally from the HomeWizard Energy products and create them as sensors in Home Assistant.
@@ -27,7 +29,7 @@ Integration for the [HomeWizard Energy](https://www.homewizard.com) platform. It
- [Wi-Fi P1 Meter](https://www.homewizard.com/p1-meter): Sensors for power import/export, energy consumption (single or three phases). information about your smart meter and gas. (Model: `HWE-P1`)
- [Wi-Fi Energy Socket](https://www.homewizard.com/energy-socket): Sensors for power import/export and energy consumption and switches for controlling the outlet (model: `HWE-SKT`)
- [Wi-Fi Watermeter](https://www.homewizard.com/watermeter): Sensors for active and total water usage (model: `HWE-WTR`)
-- [Wi-Fi kWh Meter](https://www.homewizard.com/kwh-meter): Sensors for power import/export and energy consumption. (Models: `SDM230-wifi`, `SDM630-wifi`)
+- [Wi-Fi kWh Meter](https://www.homewizard.com/kwh-meter): Sensors for power import/export and energy consumption. (Models: `HWE-KWH1`, `HWE-KWH3`, `SDM230-wifi`, and `SDM630-wifi`)
@@ -50,24 +52,31 @@ You have to enable the local API to allow Home Assistant to communicate with you
Sensors for the P1 meter, Energy socket, and kWh meter:
-- **Total energy import/export (kWh)**: Total energy imported or exported since installation. Each tariff has its own sensor (e.g., T1, T2) and a sensor for the combined value.
-- **Active power (W)**: Active power that is measured on each phase.
+- **Energy import/export (kWh)**: Total energy imported or exported since installation. Each tariff has its own sensor (e.g., T1, T2) and a sensor for the combined value.
+- **Power (W)**: Active power that is measured on each phase.
Sensors for P1 meter, only available when smart meter exposes these values:
- **Gas usage (m³)**: Total gas used since the installation of the gas meter. A gas meter sends its measurement once every 5 minutes or per hour, depending on the version of the smart meter.
-- **Active tariff**: Current tariff that is used. Can be used to keep consumption as low as possible during peak hours.
-- **Active voltage (V)**: Active voltage that is measured on each phase.
-- **Active current (A)**: Active current that is measured on each phase.
-- **Active frequency (Hz)**: Net frequency.
+- **Tariff**: Current tariff that is used. Can be used to keep consumption as low as possible during peak hours.
+- **Voltage (V)**: Active voltage that is measured on each phase.
+- **Current (A)**: Active current that is measured on each phase.
+- **Frequency (Hz)**: Net frequency.
- **Voltage sags and swells**: Number of times a voltage sag or well has been detected.
- **Power failures**: Two sensors that indicate the number of power failures that have been detected by the smart meter. One for all power failures and another for 'long' power failures.
-- **Peak demand**: Belgium users are started to get charged for the peak usage per month (see [capaciteitstarief](https://www.fluvius.be/thema/factuur-en-tarieven/capaciteitstarief)). Two sensors are available: One that shows the current quarterly average and another that shows the peak measured this month. Both these sensors are provided directly from the smart meter and can be used to keep the peak as low as possible.
+- **Peak demand**: Belgium users are starting to get charged for the peak usage per month (see [capaciteitstarief](https://www.fluvius.be/thema/factuur-en-tarieven/capaciteitstarief)). Two sensors are available: One that shows the current quarterly average and another that shows the peak measured this month. Both these sensors are provided directly from the smart meter and can be used to keep the peak as low as possible.
+
+Sensors for Energy Socket and kWh meter:
+- **Voltage (V)**: Active voltage that is measured on each phase.
+- **Current (A)**: Active current that is measured on each phase.
+- **Frequency (Hz)**: Net frequency.
+- **Reactive power (VAR)**: Active reactive power measurement on each phase.
+- **Apparent power (VA)**: Active apparent power measurement on each phase.
Sensors for Water meter:
-- **Active usage (L/min)**: Flow of water that is measured at that time.
-- **Total usage (m³)**: Total water usage since the installation of the HomeWizard Water meter.
+- **Water usage (L/min)**: Flow of water that is measured at that time.
+- **Total Water usage (m³)**: Total water usage since the installation of the HomeWizard Water meter.
## Energy Socket
@@ -81,10 +90,10 @@ You can also control the green status light brightness with **Status light brigh
## Identify
The identify button can be pressed to let the status light blink for a few seconds.
-This feature is currently only available for the P1 meter and the Energy Socket.
+_This feature not available for the kWh Meter._
## Cloud communication
-The HomeWizard Energy devices are designed to work with the HomeWizard Energy app and require communication with the HomeWizard cloud to make them function with the app. The "Cloud connection" configuration toggle can be used to turn off all communication with the HomeWizard cloud, making the device fully local. The device cannot communicate with the app, and the device won't receive any future firmware updates. This feature is currently not available for the Water meter.
+The HomeWizard Energy devices are designed to work with the HomeWizard Energy app and require communication with the HomeWizard cloud to make them function with the app. The "Cloud connection" configuration toggle can be used to turn off all communication with the HomeWizard cloud, making the device fully local. The device cannot communicate with the app, and the device won't receive any future firmware updates.
Cloud communication is restored when the switch is turned on again. Cloud communications are also restored after a factory reset, or when the device is put in pairing mode.
diff --git a/source/_integrations/homeworks.markdown b/source/_integrations/homeworks.markdown
index 5ca1291f0027..37412df31690 100644
--- a/source/_integrations/homeworks.markdown
+++ b/source/_integrations/homeworks.markdown
@@ -2,14 +2,19 @@
title: Lutron Homeworks
description: How to use Lutron Homeworks Series 4 & 8 with Home Assistant.
ha_category:
+ - Binary sensor
+ - Button
- Hub
- Light
ha_release: 0.85
ha_iot_class: Local Push
ha_domain: homeworks
ha_platforms:
+ - binary_sensor
+ - button
- light
ha_integration_type: integration
+ha_config_flow: true
---
[Lutron](https://www.lutron.com/) is an American lighting control company. The Lutron Homeworks Series 4 & 8 systems are relatively old (~2003), and use RS-232 connections to communicate with home automation systems. The `homeworks` integration in Home Assistant is responsible for communicating with the main controller for these systems. Communication is through an ethernet to serial converter (NPort, for example).
@@ -18,67 +23,33 @@ Only a subset of the Homeworks system is supported - lights and keypads.
Lutron has created many systems over the years, each with their own unique interfacing protocol. There are three Homeworks systems - QS, Series 4 & 8, and original. This platform is only for Series 4 & 8. There is another integration [lutron](/integrations/lutron/) which handles Lutron RadioRA 2 systems.
-Homeworks keypad buttons are momentary switches. The button is pressed and released, meaning that there is no "state". Buttons generate `homeworks_button_press` and `homeworks_button_release` events. These events contain the "id", "name", and "button" of the button that was pressed. "id" is derived from "name", and "button" is the number of the button on the keypad (starting at 1).
+Homeworks keypad buttons are momentary switches. The button is pressed and released, meaning that there is no "state". Buttons generate `homeworks_button_press` and `homeworks_button_release` events. These events contain the "id", "name", and "button" of the button that was pressed. "id" is derived from "name", and "button" is the number of the button on the keypad (starting at 1). It's also possible to add binary sensor entities which indicate if a keypad LED is lit and button entities which can be used to trigger the actions bound to a keypad button.
-## Configuration
+{% include integrations/config_flow.md %}
-The protocol for automatically extracting device information from the controller isn't documented, so the `homeworks` integration must be configured manually. To use Lutron Homeworks devices in your installation, add the following to your `configuration.yaml` file:
+The protocol for automatically extracting device information from the controller isn't documented. Lights and keypads need to be added manually. This is done by configuring the integration after it has been added.
-``` yaml
-# Example configuration.yaml entry
-homeworks:
- host: IP_ADDRESS
- port: 4001
- dimmers:
- - addr: "[02:08:01:01]"
- name: "Foyer Sconces"
- - addr: "[02:08:01:02]"
- name: "Foyer Downlights"
- rate: 2
+## Services
- keypads:
- - addr: "[02:08:02:01]"
- name: "Foyer Keypad"
-```
+### Service `send_command`
+
+Send a custom command to the Lutron Homeworks controller.
+
+| Service data attribute | Optional | Example | Description |
+| ---------------------- | -------- | ----------------------- | --------------------------------------------------- |
+| `controller_id` | No | `homeworks` | The controller to which the command should be sent to. |
+| `command` | No | `KBP, [02:08:02:01], 1` | The command you want to send. This can either be a single command or a list of commands. In addition to the [commands supported by the controller](https://assets.lutron.com/a/documents/hwi%20rs232%20protocol.pdf), the special command `DELAY ` is supported, where ms is the number of milliseconds to sleep. |
-{% configuration %}
-host:
- description: The IP address of the ethernet to serial adapter. It is assumed that the adapter has been preconfigured.
- required: true
- type: string
-port:
- description: The port of the ethernet to serial adapter.
- required: true
- type: integer
-dimmers:
- description: List of dimmers.
- required: false
- type: list
- keys:
- addr:
- description: The unique address of the dimmer on the controller. The quotes, brackets, and number formatting must be of the form `"[##:##:##:##]"`.
- required: true
- type: string
- name:
- description: The name of the sensor will be the title of the button +`"_"` + the name of the keypad/
- required: true
- type: string
- rate:
- description: The amount of time (in seconds) for the light to transition to a new brightness level.
- required: false
- type: float
- default: 1
-keypads:
- description: List of keypads.
- required: false
- type: list
- keys:
- addr:
- description: The unique address of the keypad on the controller. The quotes, brackets, and number formatting must be of the form `"[##:##:##:##]"`.
- required: true
- type: string
- name:
- description: The name of the keypad.
- required: true
- type: string
-{% endconfiguration %}
+#### Sending a list of commands
+
+The example shows how to send `KBP`, wait 0.5 seconds, then send `KBR` to simulate a keypad button keypress with a duration of a half second.
+
+```yaml
+service: homeworks.send_command
+data:
+ controller_id: "homeworks"
+ command:
+ - "KBP, [02:08:02:01], 1"
+ - "DELAY 500"
+ - "KBR, [02:08:02:01], 1"
+```
diff --git a/source/_integrations/honeywell.markdown b/source/_integrations/honeywell.markdown
index c92b6d576af2..4a2e68a30357 100644
--- a/source/_integrations/honeywell.markdown
+++ b/source/_integrations/honeywell.markdown
@@ -15,6 +15,7 @@ ha_platforms:
- climate
- diagnostics
- sensor
+ - switch
ha_integration_type: integration
---
@@ -25,6 +26,7 @@ If your system is compatible with this integration, then you will be able access
- [Supported hardware](#supported-hardware)
- [Climate](#climate)
- [Sensor](#sensor)
+- [Switch](#switch)
{% include integrations/config_flow.md %}
@@ -61,3 +63,12 @@ This integration will add Home Assistant sensors for the following:
|Outdoor humidity | Average humidity of all Honeywell Wireless Outdoor Sensors|
|Indoor temperature | Current temperature as measured at the specific thermostat|
|Indoor humidity | Current humidity as measured at the specific thermostat|
+
+## Switch
+
+The switch entity integrates the emergency heat option for each device. If the thermostat supports emergency heat, the switch entity will be created.
+
+This integration will add a switch for the following:
+|Switch|Value|
+--- | ---
+|Emergency Heat | Activates second stage heat source as primary heat|
diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown
index c7055c289abd..201fcbedc1f2 100644
--- a/source/_integrations/html5.markdown
+++ b/source/_integrations/html5.markdown
@@ -42,7 +42,7 @@ vapid_prv_key:
required: true
type: string
vapid_email:
- description: The e-mail account of your Google account associated with your Firebase project, [see configuring the platform](#configuring-the-platform).
+ description: The email account of your Google account associated with your Firebase project, [see configuring the platform](#configuring-the-platform).
required: true
type: string
{% endconfiguration %}
diff --git a/source/_integrations/http.markdown b/source/_integrations/http.markdown
index dcaff9ba8996..954d31945529 100644
--- a/source/_integrations/http.markdown
+++ b/source/_integrations/http.markdown
@@ -86,6 +86,11 @@ ssl_profile:
required: false
type: string
default: modern
+strict_connection:
+ description: Specifies the strict connection mode. Please read the section ["Strict connection mode"](#strict-connection-mode) before changing this value. Can be one of `disabled`, `guard_page` or `drop_connection`.
+ required: false
+ type: string
+ default: disabled
{% endconfiguration %}
The sample below shows a configuration entry with possible values:
@@ -131,7 +136,7 @@ The `http` platforms are not real platforms within the meaning of the terminolog
To use those kind of [sensors](#sensor) or [binary sensors](#binary-sensor) in your installation no configuration in Home Assistant is needed. All configuration is done on the devices themselves. This means that you must be able to edit the target URL or endpoint and the payload. The entity will be created after the first message has arrived.
-Create a [Long-Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) in the Home Assistant UI at the bottom of your profile if you want to use HTTP sensors.
+If you want to use HTTP sensors, create a [Long-Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) in the Home Assistant UI in the **Security** section of your {% my profile title="**User profile**" %} page.
All [requests](https://developers.home-assistant.io/docs/api/rest#post-apistatesentity_id) need to be sent to the endpoint of the device and must be **POST**.
diff --git a/source/_integrations/huawei_lte.markdown b/source/_integrations/huawei_lte.markdown
index b9db96ba68b6..bfc0e5e289fe 100644
--- a/source/_integrations/huawei_lte.markdown
+++ b/source/_integrations/huawei_lte.markdown
@@ -105,6 +105,7 @@ Resume suspended integration.
Devices we know to be working with this integration based on the [documentation of used libraries](https://github.com/Salamek/huawei-lte-api/#huawei-lte-api) and reports by users:
- Huawei B310s-22
+- Huawei B315s-936
- Huawei B525s-23a
- Huawei E5186s-22a
- Huawei B618
diff --git a/source/_integrations/hue.markdown b/source/_integrations/hue.markdown
index a613469f8458..f115aab7b048 100644
--- a/source/_integrations/hue.markdown
+++ b/source/_integrations/hue.markdown
@@ -45,7 +45,7 @@ If you'd like to use those `grouped lights`, you can enable them from Settings -
## Scenes
-In the Hue concept you can create (dynamic) scenes for the lights within rooms and zones. You can create, edit and delete Hue scenes from the (official) Hue app on iOS and Android. Each Zone/Room can have it's own scenes assigned and there is a large library of precreated scenes for specific moods. These Hue scenes are automatically imported in Home Assistant and they're available as `scene entities`. Creating or editing Hue scenes in Home Assistant is not supported.
+In the Hue concept you can create (dynamic) scenes for the lights within rooms and zones. You can create, edit and delete Hue scenes from the (official) Hue app on iOS and Android. Each Zone/Room can have its own scenes assigned and there is a large library of preset scenes for specific moods. These Hue scenes are automatically imported in Home Assistant and they're available as `scene entities`. Creating or editing Hue scenes in Home Assistant is not supported.
It is advised to use Hue scenes for controlling multiple lights at once for a smooth experience. If you individually control multiple lights and/or use Home Assistant scenes, each light command will be sent to each light one by one which doesn't give a very good user experience, while using a Hue scene sends commands to all lights at once in an optimized way, resulting in a smooth experience.
@@ -59,7 +59,7 @@ To have more control over Hue scenes we've implemented a secondary, more advance
| `transition` | no | Transition duration (in seconds) it takes to bring devices to the state defined in the scene. |
| `dynamic` | no | Enable (true) or Disable (false) dynamic mode for the scene. |
| `speed` | no | Set the speed (of the dynamic palette) for this scene. |
-| `brightness` | no | Set the brightnes for this scene. |
+| `brightness` | no | Set the brightness for this scene. |
You can use this service for example if you'd like to start/stop Dynamic Mode.
diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown
index 77ceb813694e..4f5a4e5a8a76 100644
--- a/source/_integrations/humidifier.mqtt.markdown
+++ b/source/_integrations/humidifier.mqtt.markdown
@@ -18,8 +18,6 @@ When a `state_topic` is not available, the humidifier will work in optimistic mo
Optimistic mode can be forced even if a `state_topic` is available. Try to enable it if you are experiencing incorrect humidifier operation.
-
-
To enable MQTT humidifiers in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -105,7 +103,7 @@ device:
connections:
description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
- type: [list, map]
+ type: list
hw_version:
description: The hardware version of the device.
required: false
@@ -126,6 +124,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -157,7 +159,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
@@ -173,12 +174,12 @@ json_attributes_topic:
max_humidity:
description: The minimum target humidity percentage that can be set.
required: false
- type: integer
+ type: float
default: 100
min_humidity:
description: The maximum target humidity percentage that can be set.
required: false
- type: integer
+ type: float
default: 0
name:
description: The name of the humidifier. Can be set to `null` if only the device name is relevant.
@@ -218,12 +219,12 @@ payload_reset_humidity:
description: A special payload that resets the `target_humidity` state attribute to an `unknown` state when received at the `target_humidity_state_topic`. When received at `current_humidity_topic` it will reset the current humidity state.
required: false
type: string
- default: 'None'
+ default: '"None"'
payload_reset_mode:
description: A special payload that resets the `mode` state attribute to an `unknown` state when received at the `mode_state_topic`.
required: false
type: string
- default: 'None'
+ default: '"None"'
target_humidity_command_template:
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `target_humidity_command_topic`.
required: false
diff --git a/source/_integrations/hunterdouglas_powerview.markdown b/source/_integrations/hunterdouglas_powerview.markdown
index 2c9291ef121d..e39b7964af82 100644
--- a/source/_integrations/hunterdouglas_powerview.markdown
+++ b/source/_integrations/hunterdouglas_powerview.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to setup Hunter Douglas PowerView scenes within
ha_category:
- Button
- Cover
+ - Number
- Scene
- Select
- Sensor
@@ -20,6 +21,7 @@ ha_platforms:
- button
- cover
- diagnostics
+ - number
- scene
- select
- sensor
@@ -34,36 +36,54 @@ There is currently support for the following device types within Home Assistant:
- Button
- Cover
+- Number
- Scene
- Select
- Sensor
+{% include integrations/config_flow.md %}
+
+## Hub capabilities
+
+### Generation 1 + 2
+
+Generation 1 and 2 hubs work better with Home Assistant when all calls are made directly via the Powerview application or Home Assistant itself.
+
+Generation 1 and 2 Pebble remotes use proprietary Bluetooth Low Energy (PLE) and do not report shade position changes back to the hub.
+
+This will result in the shade positioning displayed within Home Assistant being incorrect.
+
-The Powerview Hub does not automatically wake shades or report position changes made via pebble remotes.
+Calling the update entity service (`homeassistant.update_entity`) on a shade entity will trigger the hub to awaken a shade and report its current position.
-Calling the update entity service (`homeassistant.update_entity`) on a shade entity will trigger the hub to awaken a shade and report its current position. [An example automation is available](#force-update-shade-position) below for mains powered shades. While the automation will work for battery-powered shades, it will quickly drain their batteries for these devices.
+[An example automation is available](#force-update-shade-position) below for mains powered shades. While the automation will work for battery-powered shades, it will quickly drain the batteries for these devices.
-{% include integrations/config_flow.md %}
+### Generation 3
-## Shades
+Generation 3 introduced RF Radio Pebble Remotes.
-### Known working devices
+Generation 3 shades report position changes back to the hub automatically. They should appear correctly in Home Assistant without requiring any additional automations or considerations for positioning.
+
+## Shades
-If your shade is not listed please raise a feature request on the community forum.
+Your shades may still make work even if not listed. If you encounter issues, please raise a feature request on the community forum.
| Name (Type) | Capabilities |
| :---------------------------------------- | :------------------------------ |
| AC Roller (49) | Bottom Up |
+| Banded Shades (52) | Bottom Up |
| Bottom Up (5) | Bottom Up |
| Curtain, Left Stack (69) | Vertical |
| Curtain, Right Stack (70) | Vertical |
| Curtain, Split Stack (71) | Vertical |
| Facette (43) | Bottom Up TiltOnClosed 90° |
+| Designer Roller (1) | Bottom Up |
| Duette (6) | Bottom Up |
| Duette, Top Down Bottom Up (8) | Top Down Bottom Up |
+| Duette and Applause SkyLift (10) | Bottom Up |
| Duette Architella, Top Down Bottom Up (9) | Top Down Bottom Up |
| Duette DuoLite, Top Down Bottom Up (9) | Top Down Bottom Up |
| Duolite Lift (79) | Dual Shade Overlapped |
@@ -71,6 +91,7 @@ If your shade is not listed please raise a feature request on the community foru
| Palm Beach Shutters (66) | Tilt Only 180° |
| Pirouette (18) | Bottom Up TiltOnClosed 90° |
| Pleated, Top Down Bottom Up (47) | Top Down Bottom Up |
+| Provenance Woven Wood (19) | Bottom Up |
| Roman (4) | Bottom Up |
| Silhouette (23) | Bottom Up TiltOnClosed 90° |
| Silhouette Duolite (38) | Dual Shade Overlapped Tilt 90° |
@@ -84,6 +105,9 @@ If your shade is not listed please raise a feature request on the community foru
| Vertical Slats, Left Stack (54) | Vertical TiltAnywhere 180° |
| Vertical Slats, Right Stack (55) | Vertical TiltAnywhere 180° |
| Vertical Slats, Split Stack (56) | Vertical TiltAnywhere 180° |
+| Vignette (31) | Bottom Up |
+| Vignette (32) | Bottom Up |
+| Vignette (84) | Bottom Up |
| Vignette Duolite (65) | Dual Shade Overlapped |
## Capabilities Information
@@ -157,6 +181,9 @@ Three different entities that will be created for each blind: Front, Rear and Co
### Calibrate
+
+Gen 1 and Gen 2 Only.
+
Initiate a calibration of the shade position. Calibration is a common requirement with Duette-type shades with a string drop that lowers and raises the blind and less so with roller types.
### Identify
@@ -165,14 +192,29 @@ Identify will 'jog' the shade position as a diagnostic tool to ensure the shade
### Favorite
+
+Gen 1 and Gen 2 Only.
+
Move the shade to the favorite position as programmed physically on the device. This will perform the same move as the heart on the pebble remote.
## Selection Entities
### Power Source
+
+Gen 1 and Gen 2 Only.
+
Set the type for connected power source. Available options are Hardwired Power Supply, Battery Wand and Rechargeable Battery
+## Number entities
+
+### Velocity
+
+
+Gen 3 Only.
+
+Velocity controls the speed of the shade. The default speed from Hunter Douglas is 0; setting this higher will increase the speed of the shade.
+
## Example Automations
### Calling a Powerview Scene
diff --git a/source/_integrations/hurrican_shutters_wholesale.markdown b/source/_integrations/hurrican_shutters_wholesale.markdown
index 03b283762fba..68d1123622c2 100644
--- a/source/_integrations/hurrican_shutters_wholesale.markdown
+++ b/source/_integrations/hurrican_shutters_wholesale.markdown
@@ -1,12 +1,12 @@
---
title: Hurrican Shutters Wholesale
-description: Connect and control your Hurrican Shutters Wholesale devices using the Motion Blinds integration
+description: Connect and control your Hurrican Shutters Wholesale devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: hurrican_shutters_wholesale
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown
new file mode 100644
index 000000000000..8e51bd69b23a
--- /dev/null
+++ b/source/_integrations/husqvarna_automower.markdown
@@ -0,0 +1,142 @@
+---
+title: Husqvarna Automower
+description: Instructions on how to integrate Husqvarna Automower lawn mowers into Home Assistant.
+ha_category:
+ - Binary sensor
+ - Device tracker
+ - Lawn Mower
+ - Number
+ - Select
+ - Sensor
+ - Switch
+ha_release: 2024.3
+ha_iot_class: Cloud Push
+ha_config_flow: true
+ha_codeowners:
+ - '@Thomas55555'
+ha_platforms:
+ - binary_sensor
+ - device_tracker
+ - diagnostics
+ - lawn_mower
+ - number
+ - select
+ - sensor
+ - switch
+ha_integration_type: integration
+ha_domain: husqvarna_automower
+---
+
+The Husqvarna Automower integration provides connectivity with Husqvarna Automowers lawn mowers through Husqvarna's cloud API. Only mowers with *Automower® Connect* or with the *Automower® Connect Module* are supported.
+
+In order to use this integration you must properly configure OAuth2 credentials using your Husqvarna account. Refer to [this guide](https://developer.husqvarnagroup.cloud/docs/get-started) for general overview of the process.
+Your Husqvarna account username/password used for the *Automower® Connect* phone app is required. Most users probably created a Husqvarna account during initial mower setup.
+
+1. Go to the [Husqvarna Developer Portal](https://developer.husqvarnagroup.cloud) and sign in with your Husqvarna account. Authorize *Developer Portal* to access Husqvarna account when prompted.
+
+2. After signing in you will be automatically redirected to "My applications". (Otherwise go to: [Applications](https://developer.husqvarnagroup.cloud/applications))
+
+3. Create a new application:
+ - Name is required but can be anything, for example "My Home Assistant"
+
+ - Description is optional
+
+ - Redirect URL: `https://my.home-assistant.io/redirect/oauth`
+ Make sure no extra spaces were appended at end of URL from copy and paste.
+
+ ![Create new Application](/images/integrations/husqvarna_automower/create_new_application.png)
+
+ - Click **CREATE**. *Application Key* and *Application Secret* will be generated and shown. Protect these like a username and password.
+
+4. Click on **CONNECT NEW API** and connect the **Authentication API**.
+ ![Authentication API*](/images/integrations/husqvarna_automower/connect_authentication_api.png)
+
+5. Click on **CONNECT NEW API** again and connect the **Automower Connect API**.
+ ![Automower Connect API](/images/integrations/husqvarna_automower/connect_automower_api.png)
+
+6. Leave this tab open in browser and continue with Home Assistant configuration.
+ ![Application Overview](/images/integrations/husqvarna_automower/application_overview.png)
+
+### Home Assistant
+
+The My Home Assistant redirect feature needs to be setup to redirect to your Home Assistant installation. See [My FAQ](https://my.home-assistant.io/faq) for additional information.
+
+1. Add the integration to your Home Assistant installation and test the redirect feature by following below link:
+ [![my_button](https://my.home-assistant.io/badges/config_flow_start.svg)](https://my.home-assistant.io/redirect/config_flow_start/?domain=husqvarna_automower)
+
+2. Acknowledge prompts to open link, install Husqvarna Automower integration.
+
+3. Acknowledge prompt to setup application credentials.
+
+4. Enter the following from the Husqvarna developer tab:
+
+ - A name of the application
+ - Copy and paste the *Application key* into the *OAuth Client ID* field
+ - Copy and paste the *Application secret* into the *OAuth Client Secret* field
+
+5. Click **Create**
+
+6. Browser will be redirected to Husqvarna Developer site. Sign in and Authorize the integration to connect with your Husqvarna account
+
+7. After authorizing the integration the browser will show the My Home Assistant redirect link to link this account. Click on **Link Account**.
+
+8. Confirm successful connection of mower and assign to an area.
+
+{% include integrations/config_flow.md %}
+
+## Entities
+
+Once you have enabled the Husqvarna Automower integration, you should see the following entities:
+
+### Binary sensor
+
+The integration will create the following binary sensors:
+
+- Battery charging
+ *The mower is currently charging. It reports this state if it autonomously returned to the dock due to low battery and if it leaves the dock for mowing after being fully charged.*
+- Leaving dock
+ *The mower is currently leaving the charging station and heading out to a starting point.*
+- Returning to dock
+ *The mower is on its way home to the charging station.*
+
+### Device tracker (if available)
+
+The integration will create a device tracker entity to show the position of the mower.
+
+### Lawn mower
+
+The integration will create a lawn mower entity to control the mower. This entity can:
+
+- Resume the schedule
+- Pause mowing
+- Park until next schedule
+
+### Number (if available)
+
+The integration will create a number entity for changing the cutting height of the mower. This entity is disabled by default. You have to enable it manually because it can't be detected with the API if the mower has the capability to change the cutting height remotely. Before enabling this function, consult the handbook of the mower. It's possible that you can use this entity only as sensor but cannot actively change the cutting height.
+
+### Select (if available)
+
+The integration will create a select entity for selecting the headlight mode of the mower.
+
+### Sensor
+
+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
+- Number of collisions
+- Total charging time
+- Total cutting time
+- Total drive distance
+- Total running time
+- Total searching time
+
+### Switch
+
+The integration will create a switch to enable or disable the schedule of the mower. If the switch is on, the mower will mow according to the schedule. If the switch is off the mower will return to the dock and park until further notice.
diff --git a/source/_integrations/huum.markdown b/source/_integrations/huum.markdown
new file mode 100644
index 000000000000..4f05569a0df2
--- /dev/null
+++ b/source/_integrations/huum.markdown
@@ -0,0 +1,32 @@
+---
+title: Huum
+description: Instructions on how to integrate a Huum saunas into Home Assistant.
+ha_category:
+ - Climate
+ha_release: 2024.2
+ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@frwickst'
+ha_domain: huum
+ha_config_flow: true
+ha_platforms:
+ - climate
+ha_integration_type: integration
+---
+
+Integrates [Huum](https://huum.eu/) saunas into Home Assistant.
+
+You’ll need your username (which is usually your email) and password to configure the integration.
+
+The integration takes the same security measures regarding an open sauna door as the Huum app.
+If the sauna door is open, the sauna will not turn on.
+
+
+
+When the sauna is off, you must turn on the sauna after setting the temperature.
+This is as a security measure so that one does not turn on the
+sauna by mistake.
+
+
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/hyperion.markdown b/source/_integrations/hyperion.markdown
index 7b984db68619..69523f81b61a 100644
--- a/source/_integrations/hyperion.markdown
+++ b/source/_integrations/hyperion.markdown
@@ -14,6 +14,7 @@ ha_ssdp: true
ha_platforms:
- camera
- light
+ - sensor
- switch
ha_integration_type: integration
---
@@ -71,6 +72,10 @@ Please note that only the currently live Hyperion priority can be streamed, and
streamable sources will actually stream content (e.g., USB Capture Devices will work, but
static colors will not).
+## Sensors
+
+A sensor (Visible Priority) provides the effect currently displayed by the Hyperion server for the selected instance. Attributes of this sensor provide more details on the nature of the effect. For a detailed description, refer to the [Hyperion API](https://docs.hyperion-project.org/en/json/ServerInfo.html#priorities).
+
## Advanced entities
The Hyperion integration comes with a series of disabled-by-default entities for
diff --git a/source/_integrations/ibeacon.markdown b/source/_integrations/ibeacon.markdown
index dc3f54b77e06..82d53391a0dd 100644
--- a/source/_integrations/ibeacon.markdown
+++ b/source/_integrations/ibeacon.markdown
@@ -41,6 +41,12 @@ Consider setting up your iBeacons with a schema similar to the following:
iBeacon devices that do not have stable Major and Minor values are not supported. The system automatically removes iBeacon devices with unstable Major and Minor values once ten (10) or more Major and Minor values have been seen with the same UUID from an iBeacon device with a fixed MAC address.
+The system will not automatically create iBeacon devices for beacons that do not broadcast their name to avoid inundating your system with transient devices.
+
+To explicitly allow a list of UUIDs to be added even with an empty device name, add them via the integration options.
+
+{% include integrations/option_flow.md %}
+
## Considering an iBeacon Away
Due to various factors such as individual system settings and iBeacon firmware, iBeacons will not be marked as "Away" immediately. This could take several minutes.
diff --git a/source/_integrations/icloud.markdown b/source/_integrations/icloud.markdown
index 5dfe2d2cd89a..c21090c0f3b9 100644
--- a/source/_integrations/icloud.markdown
+++ b/source/_integrations/icloud.markdown
@@ -68,7 +68,7 @@ This service will play the Lost iPhone sound on your iDevice. It will still ring
| Service data attribute | Optional | Description |
|---------------------------|----------|---------------------------------------------------------|
-| `account` | no | E-mail address of the iCloud account |
+| `account` | no | Email address of the iCloud account |
| `device_name` | no | Human Friendly device name like Bob's iPhone |
### Service `icloud.display_message`
diff --git a/source/_integrations/idasen_desk.markdown b/source/_integrations/idasen_desk.markdown
index 7f3a44c8aa97..2e948d66857e 100644
--- a/source/_integrations/idasen_desk.markdown
+++ b/source/_integrations/idasen_desk.markdown
@@ -16,7 +16,6 @@ ha_platforms:
ha_integration_type: integration
ha_codeowners:
- '@abmantis'
-ha_quality_scale: silver
---
The IKEA IDÅSEN integration allows you to connect your IKEA Idåsen motorized desk to Home Assistant, making it possible to control the desk height and also monitor height changes from the physical controller.
diff --git a/source/_integrations/ifttt.markdown b/source/_integrations/ifttt.markdown
index 41cceed9735f..d73d606003d8 100644
--- a/source/_integrations/ifttt.markdown
+++ b/source/_integrations/ifttt.markdown
@@ -12,11 +12,11 @@ ha_platforms:
ha_integration_type: integration
---
-[IFTTT](https://ifttt.com) is a web service that allows users to create chains of simple conditional statements, so-called "Applets". With the IFTTT integration, you can trigger applets through the **"Webhooks"** service (which was previously the **"Maker"** channel).
+[IFTTT](https://ifttt.com) is a web service that allows users to create chains of simple conditional statements, so-called "Applets". With the IFTTT integration, you can trigger applets through the **"Webhooks"** service (which was previously the **"Maker"** channel). This requires the [Pro plan](https://ifttt.com/plans) or higher.
## Prerequisites
-To be able to receive events from IFTTT, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic), or use your Nabu Casa account's webhook URL from the IFTTT integration.
+To be able to receive events from IFTTT, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/integrations/homeassistant/#allowlist_external_urls), or use your Nabu Casa account's webhook URL from the IFTTT integration.
{% include integrations/config_flow.md %}
@@ -111,11 +111,11 @@ When your screen looks like this, click the 'call service' button.
By default, the trigger is sent to all the API keys from `configuration.yaml`. If you
want to send the trigger to a specific key use the `target` field:
-Field | Value
------ | -----
-domain | `ifttt`
-service | `trigger`
-Service Data | `{"event": "EventName", "value1": "Hello World", "target": "YOUR_KEY_NAME1"}`
+| Field | Value |
+| ------------ | ----------------------------------------------------------------------------- |
+| domain | `ifttt` |
+| service | `trigger` |
+| Service Data | `{"event": "EventName", "value1": "Hello World", "target": "YOUR_KEY_NAME1"}` |
The `target` field can contain a single key name or a list of key names.
diff --git a/source/_integrations/image.mqtt.markdown b/source/_integrations/image.mqtt.markdown
index 6d6b19c75bc8..a63c856045c4 100644
--- a/source/_integrations/image.mqtt.markdown
+++ b/source/_integrations/image.mqtt.markdown
@@ -18,8 +18,6 @@ An alternative setup is to use the `url_topic` option to receive an image URL fo
## Configuration
-
-
To enable this image in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -81,7 +79,7 @@ device:
required: false
type: string
connections:
- description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
type: list
hw_version:
@@ -104,6 +102,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -130,7 +132,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
@@ -139,7 +140,6 @@ image_encoding:
description: The encoding of the image payloads received. Set to `"b64"` to enable base64 decoding of image payload. If not set, the image payload must be raw binary data.
required: false
type: string
- default: None
image_topic:
description: The MQTT topic to subscribe to receive the image payload of the image to be downloaded. Ensure the `content_type` type option is set to the corresponding content type. This option cannot be used together with the `url_topic` option. But at least one of these option is required.
required: exclusive
diff --git a/source/_integrations/image_upload.markdown b/source/_integrations/image_upload.markdown
index f45e0a852629..7bb4d2124672 100644
--- a/source/_integrations/image_upload.markdown
+++ b/source/_integrations/image_upload.markdown
@@ -1,5 +1,5 @@
---
-title: Image Upload
+title: Image upload
description: The image upload integration handle image assets in Home Assistant.
ha_category:
- Other
@@ -11,7 +11,7 @@ ha_quality_scale: internal
ha_integration_type: system
---
-The Image Upload integration allows Home Assistant to handle image assets in
+The **Image upload** {% term integration %} allows Home Assistant to handle image assets in
Home Assistant, for example, the profile photos of your systems account.
## Configuration
diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown
index 9d63daba3efa..e861c97be57d 100644
--- a/source/_integrations/imap.markdown
+++ b/source/_integrations/imap.markdown
@@ -7,6 +7,7 @@ ha_release: 0.25
ha_iot_class: Cloud Push
ha_domain: imap
ha_platforms:
+ - diagnostics
- sensor
ha_integration_type: integration
ha_codeowners:
@@ -67,6 +68,12 @@ Yahoo also requires the character set `US-ASCII`.
+
+### Selecting message data to include in the IMAP event (advanced mode)
+
+By default, the IMAP event won't include `text` or `headers` message data. If you want them to be included (`text` or `headers`, or both), you have to manually select them in the option flow.
+Another way to process the `text` data, is to use the `imap.fetch` service. In this case, `text` won't be limited by size.
+
### Selecting an alternate SSL cipher list or disabling SSL verification (advanced mode)
If the default IMAP server settings do not work, you might try to set an alternate SSL cipher list.
@@ -119,7 +126,7 @@ search:
folder:
description: The IMAP folder configuration
text:
- description: The email body `text` of the message. By default, only the first 2048 bytes of the body text will be available, the rest will be clipped off. You can increase the maximum text size of the body, but this is not advised and will never guarantee that the whole message text is available. A better practice is using a custom event data template (advanced settings) that can be used to parse the whole message, not limited by size. The rendered result will then be added as attribute `custom` to the event data to be used for automations.
+ description: The email body `text` of the message. By default, only the first 2048 bytes of the body text will be available, the rest will be clipped off. You can increase the maximum text size of the body, but this is not advised and will never guarantee that the whole message text is available. A better practice is using a custom event data template (advanced settings) that can be used to parse the whole message, not limited by size. The rendered result will then be added as attribute `custom` to the event data to be used for automations. `text` will be included if it is explicitly selected in the option flow.
sender:
description: The `sender` of the message
subject:
@@ -127,11 +134,13 @@ subject:
date:
description: A `datetime` object of the `date` sent
headers:
- description: The `headers` of the message in the for of a dictionary. The values are iterable as headers can occur more than once.
+ description: The `headers` of the message in the for of a dictionary. The values are iterable as headers can occur more than once. `headers` will be included if it is explicitly selected in the option flow.
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 %}
@@ -157,6 +166,8 @@ template:
- name: imap_content
state: "{{ trigger.event.data['subject'] }}"
attributes:
+ Entry: "{{ trigger.event.data['entry_id'] }}"
+ UID: "{{ trigger.event.data['uid'] }}"
Message: "{{ trigger.event.data['text'] }}"
Server: "{{ trigger.event.data['server'] }}"
Username: "{{ trigger.event.data['username'] }}"
@@ -174,6 +185,59 @@ template:
{% endraw %}
+### Services for post-processing
+
+The IMAP integration has some services for post-pressing email messages. The services are intended to be used in automations as actions after an "imap_content" event. The services take the IMAP `entry_id` and the `uid` of the message's event data. You can use a template for the `entry_id` and the `uid`. When the service is set up as a trigger action, you can easily select the correct entry from the UI. You will find the `entry_id` in YAML mode. It is highly recommended you filter the events by the `entry_id`.
+
+Available services are:
+
+- `seen`: Mark the message as seen.
+- `move`: Move the message to a `target_folder` and optionally mark the message `seen`.
+- `delete`: Delete the message.
+- `fetch`: Fetch the content of a message. Returns a dictionary containing `"text"`, `"subject"`, `"sender"` and `"uid""`. This allows to fetch and process the complete message text, not limited by size.
+
+
+
+When these services are used in an automation, make sure the right triggers and filtering are set up. When messages are deleted, they cannot be recovered. When multiple IMAP entries are set up, make sure the messages are filtered by the `entry_id` as well to ensure the correct messages are processed. Do not use these services unless you know what you are doing.
+
+
+
+## Example - post-processing
+
+The example below filters the event trigger by `entry_id`, fetches the message and stores it in `message_text`. It then marks the message in the event as seen and finally, it adds a notification with the subject of the message. The `seen` service `entry_id` can be a template or literal string. In UI mode you can select the desired entry from a list as well.
+
+{% raw %}
+
+```yaml
+alias: imap fetch and seen example
+description: Fetch and mark an incoming message as seen
+trigger:
+ - platform: event
+ event_type: imap_content
+ event_data:
+ entry_id: 91fadb3617c5a3ea692aeb62d92aa869
+condition:
+ - condition: template
+ value_template: "{{ trigger.event.data['sender'] == 'info@example.com' }}"
+action:
+ - service: imap.fetch
+ data:
+ entry: 91fadb3617c5a3ea692aeb62d92aa869
+ uid: "{{ trigger.event.data['uid'] }}"
+ response_variable: message_text
+ - service: imap.seen
+ data:
+ entry: 91fadb3617c5a3ea692aeb62d92aa869
+ uid: "{{ trigger.event.data['uid'] }}"
+ - service: persistent_notification.create
+ metadata: {}
+ data:
+ message: "{{ message_text['subject'] }}"
+mode: single
+```
+
+{% endraw %}
+
## Example - keyword spotting
The following example shows the usage of the IMAP email content sensor to scan the subject of an email for text, in this case, an email from the APC SmartConnect service, which tells whether the UPS is running on battery or not.
diff --git a/source/_integrations/imgw_pib.markdown b/source/_integrations/imgw_pib.markdown
new file mode 100644
index 000000000000..7ee21ec92342
--- /dev/null
+++ b/source/_integrations/imgw_pib.markdown
@@ -0,0 +1,36 @@
+---
+title: IMGW-PIB
+description: Instructions on how to integrate IMGW-PIB (Polish Institute of Meteorology and Water Management - National Research Institute) hydrological service within Home Assistant.
+ha_category:
+ - Environment
+ha_release: 2024.6
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@bieniu'
+ha_domain: imgw_pib
+ha_platforms:
+ - binary_sensor
+ - sensor
+ha_integration_type: service
+---
+
+IMGW-PIB integration uses hydrological data from [Institute of Meteorology and Water Management - National Research Institute](https://hydro.imgw.pl) to present information about rivers and water reservoirs in Poland.
+
+## Binary sensors
+
+Binary sensor entities added to Home Assistant:
+
+- Flood alarm
+- Flood warning
+
+## Sensors
+
+Sensor entities added to Home Assistant:
+
+- Water level
+- Water temperature (if a given hydrological station supports it)
+
+## Setup
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/indianamichiganpower.markdown b/source/_integrations/indianamichiganpower.markdown
index ed7cd4b5071d..bacb278d251a 100644
--- a/source/_integrations/indianamichiganpower.markdown
+++ b/source/_integrations/indianamichiganpower.markdown
@@ -4,7 +4,7 @@ description: Get energy usage from Indiana Michigan Power using the Opower integ
ha_category:
- Energy
- Sensor
-ha_release: 2024.1
+ha_release: 2023.8
ha_domain: indianamichiganpower
ha_integration_type: virtual
ha_supporting_domain: opower
diff --git a/source/_integrations/influxdb.markdown b/source/_integrations/influxdb.markdown
index f16c8e25cfc7..8a09c9fab1dc 100644
--- a/source/_integrations/influxdb.markdown
+++ b/source/_integrations/influxdb.markdown
@@ -37,7 +37,7 @@ The default InfluxDB configuration doesn't enforce authentication. If you have i
influxdb:
```
-You will still need to create a database named `home_assistant` via InfluxDB's command-line interface. For instructions on how to create a database check the [InfluxDB documentation](https://docs.influxdata.com/influxdb/latest/introduction/getting_started/#creating-a-database) relevant to the version you have installed.
+You will still need (not for version 2) to create a database named `home_assistant` via InfluxDB's command-line interface. For instructions on how to create a database check the [InfluxDB documentation](https://docs.influxdata.com/influxdb/latest/introduction/getting_started/#creating-a-database) relevant to the version you have installed.
{% configuration %}
api_version:
diff --git a/source/_integrations/input_boolean.markdown b/source/_integrations/input_boolean.markdown
index afd4e7064a50..3ea219ddc1af 100644
--- a/source/_integrations/input_boolean.markdown
+++ b/source/_integrations/input_boolean.markdown
@@ -1,6 +1,6 @@
---
-title: Input Boolean
-description: Instructions on how to use the Input Boolean helper with Home Assistant.
+title: Input boolean
+description: Instructions on how to use the input boolean helper with Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_boolean
ha_integration_type: helper
---
-The Input Boolean helper integration allows you to define boolean values that
+The **Input boolean** helper integration allows you to define boolean values that
can be controlled via the user interface and can be used within conditions of
an {% term automation %}. This can for example be used to disable or enable certain
automations by using them in their {% term conditions %}.
@@ -67,12 +67,12 @@ This integration provides the following {% term services %} to modify the state
`input_boolean` and a service to reload the configuration without restarting
Home Assistant itself.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `turn_on` | `entity_id(s)` `area_id(s)` | Set the value of specific `input_boolean` entities to `on`
-| `turn_off` | `entity_id(s)` `area_id(s)` | Set the value of specific `input_boolean` entities to `off`
-| `toggle` | `entity_id(s)` `area_id(s)` | Toggle the value of specific `input_boolean` entities
-| `reload` | | Reload `input_boolean` configuration |
+| Service | Data | Description |
+| ---------- | ------------------------------ | ----------------------------------------------------------- |
+| `turn_on` | `entity_id(s)` `area_id(s)` | Set the value of specific `input_boolean` entities to `on` |
+| `turn_off` | `entity_id(s)` `area_id(s)` | Set the value of specific `input_boolean` entities to `off` |
+| `toggle` | `entity_id(s)` `area_id(s)` | Toggle the value of specific `input_boolean` entities |
+| `reload` | | Reload `input_boolean` configuration |
### Restore state
diff --git a/source/_integrations/input_button.markdown b/source/_integrations/input_button.markdown
index 2e130827e4a0..36ccde149016 100644
--- a/source/_integrations/input_button.markdown
+++ b/source/_integrations/input_button.markdown
@@ -1,6 +1,6 @@
---
-title: Input Button
-description: Instructions on how to use the Input Button helper with Home Assistant.
+title: Input button
+description: Instructions on how to use the input button helper with Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_button
ha_integration_type: helper
---
-The Input Button helper integration allows you to define buttons that
+The **Input button** helper integration allows you to define buttons that
can be pressed via the user interface, and can be used to trigger things,
like an automation.
diff --git a/source/_integrations/input_number.markdown b/source/_integrations/input_number.markdown
index 2b34c9d0a24f..cc9252568f53 100644
--- a/source/_integrations/input_number.markdown
+++ b/source/_integrations/input_number.markdown
@@ -1,6 +1,6 @@
---
-title: Input Number
-description: Instructions on how to integrate the Input Number integration into Home Assistant.
+title: Input number
+description: Instructions on how to integrate the input number integration into Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_number
ha_integration_type: helper
---
-The `input_number` integration allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. The frontend can display a slider, or a numeric input box. Changes to the slider or numeric input box generate state events. These state events can be utilized as `automation` triggers as well.
+The **Input number** {% term integration %} allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. The frontend can display a slider, or a numeric input box. Changes to the slider or numeric input box generate state events. These state events can be utilized as `automation` triggers as well.
The preferred way to configure an input number is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain="input_number" title="Number" %}** option.
@@ -87,12 +87,12 @@ input_number:
This integration provides the following services to modify the state of the `input_number` and a service to reload the
configuration without restarting Home Assistant itself.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `decrement` | `entity_id(s)` `area_id(s)` | Decrement the value of specific `input_number` entities by `step`
-| `increment` | `entity_id(s)` `area_id(s)` | Increment the value of specific `input_number` entities by `step`
-| `reload` | | Reload `input_number` configuration |
-| `set_value` | `value` `entity_id(s)` `area_id(s)` | Set the value of specific `input_number` entities
+| Service | Data | Description |
+| ----------- | ----------------------------------------- | ----------------------------------------------------------------- |
+| `decrement` | `entity_id(s)` `area_id(s)` | Decrement the value of specific `input_number` entities by `step` |
+| `increment` | `entity_id(s)` `area_id(s)` | Increment the value of specific `input_number` entities by `step` |
+| `reload` | | Reload `input_number` configuration |
+| `set_value` | `value` `entity_id(s)` `area_id(s)` | Set the value of specific `input_number` entities |
### Restore state
diff --git a/source/_integrations/input_select.markdown b/source/_integrations/input_select.markdown
index c7303e07e227..72900456e387 100644
--- a/source/_integrations/input_select.markdown
+++ b/source/_integrations/input_select.markdown
@@ -1,6 +1,6 @@
---
-title: Input Select
-description: Instructions on how to integrate the Input Select integration into Home Assistant.
+title: Input select
+description: Instructions on how to integrate the input select integration into Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_select
ha_integration_type: helper
---
-The `input_select` integration allows the user to define a list of values that can be selected via the frontend and can be used within conditions of an automation. When a user selects a new item, a state transition event is generated. This state event can be used in an `automation` trigger.
+The **Input select** {% term integration %} allows the user to define a list of values that can be selected via the frontend and can be used within conditions of an automation. When a user selects a new item, a state transition event is generated. This state event can be used in an `automation` trigger.
The preferred way to configure an input select is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain="input_select" title="Dropdown" %}** option.
@@ -77,29 +77,29 @@ If you set a valid value for `initial` this integration will start with the stat
This integration provides three services to modify the state of the `input_select`.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `select_option` | `option` | This can be used to select a specific option.
-| `set_options` | `options` `entity_id(s)` | Set the options for specific `input_select` entities.
-| `select_first` | | Select the first option.
-| `select_last` | | Select the last option.
-| `reload` | | Reload `input_select` configuration |
+| Service | Data | Description |
+| --------------- | --------------------------- | ----------------------------------------------------- |
+| `select_option` | `option` | This can be used to select a specific option. |
+| `set_options` | `options` `entity_id(s)` | Set the options for specific `input_select` entities. |
+| `select_first` | | Select the first option. |
+| `select_last` | | Select the last option. |
+| `reload` | | Reload `input_select` configuration |
#### Service `input_select.select_next`
Select the next option.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `cycle` | yes | Whether to cycle to the first value after the last. Default: `true`
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------- |
+| `cycle` | yes | Whether to cycle to the first value after the last. Default: `true` |
#### Service `input_select.select_previous`
Select the previous option.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `cycle` | yes | Whether to cycle to the last value before the first. Default: `true`
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | -------------------------------------------------------------------- |
+| `cycle` | yes | Whether to cycle to the last value before the first. Default: `true` |
### Scenes
diff --git a/source/_integrations/input_text.markdown b/source/_integrations/input_text.markdown
index ad7fde933508..8a57b8309877 100644
--- a/source/_integrations/input_text.markdown
+++ b/source/_integrations/input_text.markdown
@@ -1,6 +1,6 @@
---
-title: Input Text
-description: Instructions on how to integrate the Input Text integration into Home Assistant.
+title: Input text
+description: Instructions on how to integrate the Input text integration into Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_text
ha_integration_type: helper
---
-The `input_text` integration allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. It can also be configured in password mode (obscured text).
+The **Input text** {% term integration %} allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. It can also be configured in password mode (obscured text).
The preferred way to configure an input text is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain="input_text" title="Text" %}** option.
@@ -83,10 +83,10 @@ input_text:
This integration provides a service to modify the state of the `input_text` and a service to reload the `input_text` configuration without restarting Home Assistant itself.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `set_value` | `value` `entity_id(s)` | Set the value for specific `input_text` entities.
-| `reload` | | Reload `input_text` configuration |
+| Service | Data | Description |
+| ----------- | ------------------------- | ------------------------------------------------- |
+| `set_value` | `value` `entity_id(s)` | Set the value for specific `input_text` entities. |
+| `reload` | | Reload `input_text` configuration |
### Restore state
diff --git a/source/_integrations/inspired_shades.markdown b/source/_integrations/inspired_shades.markdown
index 72a6854504a3..6305a38ac2fb 100644
--- a/source/_integrations/inspired_shades.markdown
+++ b/source/_integrations/inspired_shades.markdown
@@ -1,12 +1,12 @@
---
title: Inspired Shades
-description: Connect and control your Inspired Shades devices using the Motion Blinds integration
+description: Connect and control your Inspired Shades devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: inspired_shades
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/integration.markdown b/source/_integrations/integration.markdown
index 4a07d90bc171..cecac94a851e 100644
--- a/source/_integrations/integration.markdown
+++ b/source/_integrations/integration.markdown
@@ -97,6 +97,24 @@ In case you expect that your source sensor will provide several subsequent value
The unit of `source` together with `unit_prefix` and `unit_time` is used to generate a unit for the integral product (e.g. a source in `W` with prefix `k` and time `h` would result in `kWh`). Note that `unit_prefix` and `unit_time` are _also_ relevant to the Riemann sum calculation.
+## Integration method
+
+Riemann Sum is a approximation of an integral by a finite sum and is therefore intrinsically inaccurate, nonetheless, depending on the method used, values can be more or less accurate.
+
+Regardless of the method used the integration will be more accurate if the source updates more often. If your source is not updated, neither will the Riemann Sum sensor, as all this integration does is calculate the next step in the event of a source update.
+
+### Trapezoidal
+
+The `trapezoidal` method follows the [Trapezoidal rule](https://en.wikipedia.org/wiki/Trapezoidal_rule). This method is the most accurate of the currently implemented methods, **if** the source updates often, since it better fits the curve of the intrinsic source.
+
+### Left
+
+The `left` method follows the [Left rule](https://en.wikipedia.org/wiki/Riemann_sum#Left_rule). The method **underestimates** the intrinsic source, but is extremely accurate at estimating rectangular functions which are very stable for long periods of time and change very rapidly (e.g. such as the power function of a resistive load can jump instantly to a given value and stay at the same value for hours). If your source keeps its state for long periods of time, this method is preferable to the `trapezoidal`.
+
+### Right
+
+The `right` method follows the [Right rule](https://en.wikipedia.org/wiki/Riemann_sum#Right_rule). The method is similar to the left method, but **overestimates** the intrinsic source. Again it is only appropriate to be used with rectangular functions.
+
## Energy
An integration sensor is quite useful in energy billing scenarios since energy is generally billed in kWh and many sensors provide power in W (Watts).
diff --git a/source/_integrations/intent_script.markdown b/source/_integrations/intent_script.markdown
index 7c60a76dc925..9cf1b9f68178 100644
--- a/source/_integrations/intent_script.markdown
+++ b/source/_integrations/intent_script.markdown
@@ -98,7 +98,7 @@ conversation:
intent_script:
EventCountToday:
action:
- - service: calendar.list_events
+ - service: calendar.get_events
target:
entity_id: calendar.my_calendar
data_template:
@@ -108,7 +108,7 @@ intent_script:
- stop: ""
response_variable: result # and return it
speech:
- text: "{{ action_response.events | length }}" # use the action's response
+ text: "{{ action_response['calendar.my_calendar'].events | length }}" # use the action's response
```
{% endraw %}
diff --git a/source/_integrations/ipma.markdown b/source/_integrations/ipma.markdown
index 85351853890a..378c143b06e4 100644
--- a/source/_integrations/ipma.markdown
+++ b/source/_integrations/ipma.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
- '@dgomes'
ha_domain: ipma
ha_platforms:
+ - diagnostics
- sensor
- weather
ha_integration_type: integration
diff --git a/source/_integrations/iqvia.markdown b/source/_integrations/iqvia.markdown
index 25f622237510..c75407cf22d9 100644
--- a/source/_integrations/iqvia.markdown
+++ b/source/_integrations/iqvia.markdown
@@ -50,5 +50,5 @@ Example values include:
| Particulate (<= 2.5 μm) | PM2.5 | [EPA: Particulate Matter (PM) Pollution](https://www.epa.gov/pm-pollution) |
| Particulate (<= 10 μm) | PM10 | [EPA: Particulate Matter (PM) Pollution](https://www.epa.gov/pm-pollution) |
| Ozone | O | [EPA: Ozone Pollution](https://www.epa.gov/ozone-pollution) |
-| Sulpher Dioxide | SO2 | [EPA: Sulfur Dioxide (SO2) Pollution](https://www.epa.gov/so2-pollution) |
+| Sulfur Dioxide | SO2 | [EPA: Sulfur Dioxide (SO2) Pollution](https://www.epa.gov/so2-pollution) |
| Carbon Monoxide | CO | [EPA: Carbon Monoxide (CO) Pollution in Outdoor Air](https://www.epa.gov/co-pollution) |
diff --git a/source/_integrations/islamic_prayer_times.markdown b/source/_integrations/islamic_prayer_times.markdown
index a9297517183e..281b409f5900 100644
--- a/source/_integrations/islamic_prayer_times.markdown
+++ b/source/_integrations/islamic_prayer_times.markdown
@@ -3,12 +3,13 @@ title: Islamic Prayer Times
description: Instructions on how to integrate the Islamic Prayer Times integration within Home Assistant.
ha_category:
- Sensor
-ha_iot_class: Cloud Polling
+ha_iot_class: Calculated
ha_release: 0.85
ha_config_flow: true
ha_domain: islamic_prayer_times
ha_codeowners:
- '@engrbm87'
+ - '@cpfair'
ha_platforms:
- sensor
ha_integration_type: integration
diff --git a/source/_integrations/ismartwindow.markdown b/source/_integrations/ismartwindow.markdown
index ac1fd715cc74..45ade76ccb92 100644
--- a/source/_integrations/ismartwindow.markdown
+++ b/source/_integrations/ismartwindow.markdown
@@ -1,12 +1,12 @@
---
title: iSmartWindow
-description: Connect and control your iSmartWindow devices using the Motion Blinds integration
+description: Connect and control your iSmartWindow devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: ismartwindow
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/isy994.markdown b/source/_integrations/isy994.markdown
index cf2440563724..4a8307229755 100644
--- a/source/_integrations/isy994.markdown
+++ b/source/_integrations/isy994.markdown
@@ -201,7 +201,7 @@ Delete a Z-Wave Lock User Code via the ISY.
#### Service `isy994.rename_node`
-Rename a node or group (scene) on the ISY994. Note: this will not automatically change the Home Assistant Entity Name or Entity ID to match. The entity name and ID will only be updated after calling `isy994.reload` or restarting Home Assistant, and ONLY IF you have not already customized the name within Home Assistant.
+Rename a node or group (scene) on the ISY994. Note: this will not automatically change the Home Assistant Entity Name or Entity ID to match. The entity name and ID will only be updated after reloading the integration or restarting Home Assistant, and ONLY IF you have not already customized the name within Home Assistant.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | -------------------------------------------------------------- |
diff --git a/source/_integrations/justnimbus.markdown b/source/_integrations/justnimbus.markdown
index fa2194ee1280..752e39d5ba7a 100644
--- a/source/_integrations/justnimbus.markdown
+++ b/source/_integrations/justnimbus.markdown
@@ -15,7 +15,7 @@ ha_codeowners:
---
The JustNimbus integration queries the JustNimbus API used by the JustNimbus web dashboard.
-This integration allows you to collect and save data to get an historic overview of your water bag
+This integration allows you to collect and save data to get a historical overview of your water bag
usage.
## Prerequisites
@@ -23,23 +23,18 @@ usage.
To configure and use this integration, you need to have a
[JustNimbus water bag](https://justnimbus.com/regenwatersysteem/) (Dutch), and
you need to be subscribed for the web dashboard functionality. For this configuration, you need the
-client ID from the URL. For example: `https://dashboard.justnimbus.com/my-installations/`.
+client ID and ZIP code from the URL. For example: `https://dashboard.justnimbus.com/user/view.php?system=&zip=`. For more help see [JustNimbus' help page](https://dashboard.justnimbus.com/user/view.php).
{% include integrations/config_flow.md %}
## Sensor types
-When configured, the integration will create twelve sensors for each configured client ID:
+When configured, the integration will create seven sensors for each configured client ID:
-- Pump flow, in `L/min` (Liters/minute)
-- Drink flow, in `L/min` (Liters/minute)
- Pump pressure, in `bar`
-- Pump starts, a number counting the number of times the pump has started
-- Pump hours, a number counting the number of hours the pump has been used
+- Pump type, `text`
- Reservoir temperature, in `°C`
- Reservoir content, in `L` (Liters)
-- Total saved, in `L` (Liters)
-- Total replenished, in `L` (Liters)
-- Error code
-- Total use, in `L` (Liters)
-- Max reservoir content, in `L` (Liters)
+- Reservoir capacity, in `L` (Liters)
+- Water saved, in `L` (Liters)
+- Water used, in `L` (Liters)
diff --git a/source/_integrations/jvc_projector.markdown b/source/_integrations/jvc_projector.markdown
index 40458b33c3c4..6546abff3fe7 100644
--- a/source/_integrations/jvc_projector.markdown
+++ b/source/_integrations/jvc_projector.markdown
@@ -8,9 +8,13 @@ ha_iot_class: Local Polling
ha_config_flow: true
ha_codeowners:
- '@SteveEasley'
+ - '@msavazzi'
ha_domain: jvc_projector
ha_platforms:
+ - binary_sensor
- remote
+ - select
+ - sensor
ha_integration_type: device
---
@@ -44,3 +48,46 @@ The JVC Projector remote platform will create a [Remote](/integrations/remote/)
- `lens_control`
- `setting_memory`
- `gamma_settings`
+- `hdmi_1`
+- `hdmi_2`
+- `mode_1`
+- `mode_2`
+- `mode_3`
+- `lens_ap`
+- `gamma`
+- `color_temp`
+- `natural`
+- `cinema`
+- `anamo`
+- `3d_format`
+
+### Binary sensor
+
+The following sensor types are supported:
+
+- Power on is True when projector is in status "on", "warming"
+
+### Sensor
+
+Introduces two sensors to detect Power Status and HDMI Input.
+
+Detailed Power Status values:
+
+- `standby`
+- `on`
+- `warming`
+- `cooling`
+- `error`
+
+Please note that if the projector is off, it will not respond to remote polling and will show as *unavailable*.
+
+Detailed HDMI Input values:
+
+- `hdmi1`
+- `hdmi2`
+
+### Selects
+
+The following Select entities are added. They allow changing the device state from a list of options.
+
+- `input`
diff --git a/source/_integrations/kentuckypower.markdown b/source/_integrations/kentuckypower.markdown
index f6e38adb8379..83a5aad1c9d2 100644
--- a/source/_integrations/kentuckypower.markdown
+++ b/source/_integrations/kentuckypower.markdown
@@ -4,7 +4,7 @@ description: Get energy usage from Kentucky Power using the Opower integration
ha_category:
- Energy
- Sensor
-ha_release: 2024.1
+ha_release: 2023.8
ha_domain: kentuckypower
ha_integration_type: virtual
ha_supporting_domain: opower
diff --git a/source/_integrations/keymitt_ble.markdown b/source/_integrations/keymitt_ble.markdown
index 29645cf787b9..12dd280adc87 100644
--- a/source/_integrations/keymitt_ble.markdown
+++ b/source/_integrations/keymitt_ble.markdown
@@ -12,7 +12,7 @@ ha_bluetooth: true
ha_platforms:
- switch
ha_config_flow: true
-ha_integration_type: integration
+ha_integration_type: hub
---
This integration allows you to locally control a [MicroBot Push](https://keymitt.com/products/microbot-push) (previously manufactured by Naran but now under the Keymitt brand).
diff --git a/source/_integrations/kitchen_sink.markdown b/source/_integrations/kitchen_sink.markdown
index de63ff726bc5..388b2ea832f9 100644
--- a/source/_integrations/kitchen_sink.markdown
+++ b/source/_integrations/kitchen_sink.markdown
@@ -10,9 +10,13 @@ ha_codeowners:
ha_domain: kitchen_sink
ha_iot_class: Calculated
ha_platforms:
+ - button
- image
+ - lawn_mower
- lock
+ - notify
- sensor
+ - switch
- weather
ha_integration_type: integration
---
diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown
index 8a801597ec4b..0b74b7f25c5f 100644
--- a/source/_integrations/knx.markdown
+++ b/source/_integrations/knx.markdown
@@ -34,6 +34,7 @@ ha_platforms:
- climate
- cover
- date
+ - datetime
- diagnostics
- fan
- light
@@ -544,7 +545,7 @@ name:
address:
description: Group address to send to.
required: true
- type: [string, list]
+ type: string
payload:
description: The raw payload that shall be sent.
required: false
@@ -1357,7 +1358,7 @@ knx:
{% configuration %}
address:
- description: KNX group address of the notification. *DPT 16.000*
+ description: KNX group address the notification will be sent to. *DPT 16*
required: true
type: [string, list]
name:
@@ -1369,8 +1370,22 @@ type:
required: false
default: "latin_1"
type: string
+entity_category:
+ description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
+ required: false
+ type: string
+ default: None
{% endconfiguration %}
+### Example service call
+
+```yaml
+service: notify.send_message
+data:
+ message: "Hello from HA!"
+ entity_id: notify.alarm
+```
+
## Number
The KNX number platform allows to send generic numeric values to the KNX bus and update its state from received telegrams. It can optionally respond to read requests from the KNX bus.
diff --git a/source/_integrations/konnected.markdown b/source/_integrations/konnected.markdown
index 717107ad37d9..36df0a6f4ed8 100644
--- a/source/_integrations/konnected.markdown
+++ b/source/_integrations/konnected.markdown
@@ -111,7 +111,7 @@ Once all zones are configured you'll be presented with the configuration for add
**Blink panel LED on when sending state change:** The desired LED behavior for the panel.
-**Override default Home Assistant API host panel URL:** The Konnected Alarm Panel post sensor states back to the Home Assistant API. If this value is unchecked the panel will default postbacks using the URL [configured](/docs/configuration/basic) in Home Assistant. By default, the integration will use the internal URL. However, if you check this field and set the **Override API host URL** to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`), it will be used instead of the internal URL.
+**Override default Home Assistant API host panel URL:** The Konnected Alarm Panel post sensor states back to the Home Assistant API. If this value is unchecked the panel will default postbacks using the URL [configured](/integrations/homeassistant/#allowlist_external_urls) in Home Assistant. By default, the integration will use the internal URL. However, if you check this field and set the **Override API host URL** to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`), it will be used instead of the internal URL.
**Override API host URL (optional):** The host info to use if you checked **Override default Home Assistant API host panel URL** in the step above. This is ignored if **Override default Home Assistant API host panel URL** is unchecked.
diff --git a/source/_integrations/krispol.markdown b/source/_integrations/krispol.markdown
new file mode 100644
index 000000000000..90da192622cd
--- /dev/null
+++ b/source/_integrations/krispol.markdown
@@ -0,0 +1,21 @@
+---
+title: Krispol
+description: Connect and control your Krispol devices using the Motionblinds integration
+ha_category:
+ - Cover
+ha_domain: krispol
+ha_integration_type: virtual
+ha_supporting_domain: motion_blinds
+ha_supporting_integration: Motionblinds
+ha_release: 2020.12
+ha_codeowners:
+ - '@starkillerOG'
+ha_config_flow: true
+ha_platforms:
+ - cover
+ - sensor
+ha_iot_class: Local Push
+ha_dhcp: true
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/lamarzocco.markdown b/source/_integrations/lamarzocco.markdown
new file mode 100644
index 000000000000..4dfa142916f8
--- /dev/null
+++ b/source/_integrations/lamarzocco.markdown
@@ -0,0 +1,113 @@
+---
+title: La Marzocco
+description: Instructions on how to integrate your La Marzocco coffee machine with Home Assistant.
+ha_release: 2024.2
+ha_category:
+ - Switch
+ - Update
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_domain: lamarzocco
+ha_platforms:
+ - binary_sensor
+ - button
+ - calendar
+ - diagnostics
+ - number
+ - select
+ - sensor
+ - switch
+ - update
+ha_bluetooth: true
+ha_codeowners:
+ - '@zweckj'
+ha_integration_type: device
+---
+
+This integration interacts with [La Marzocco coffee machines](https://lamarzocco.com/it/en/) through calls to the LaMarzocco cloud API. Optionally, local API calls, which include a WebSocket connection for (near) real-time updates and a Bluetooth connection, can be utilized for local connections.
+
+To be able to configure your machine in Home Assistant, your machine needs to be added to your account using the official La Marzocco app first. Currently, only login with username & password is supported. If you are currently using a social login, you need to create a new LaMarzocco account and transfer your machine to it to be able to use this integration.
+
+If your machine is in Bluetooth range to your Home Assistant host and the [Bluetooth](/integrations/bluetooth) integration is fully loaded, the machine will be discovered automatically.
+
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Username:
+ description: "Your username you use to log into the La Marzocco app."
+ required: true
+ type: string
+Password:
+ description: "Password you use to log into the La Marzocco app."
+ required: true
+ type: string
+Host:
+ description: "IP address of your machine in your local network. If not set, no local connections will be used."
+ required: false
+ type: boolean
+{% endconfiguration_basic %}
+
+
+## Buttons
+
+| Button name | Description | Available for machines |
+|-------------|-------------| ---------------------- |
+| Start backflush | Starts the backflush process on your machine. You got 15 seconds to turn the paddle after activation. | all |
+
+
+## Numbers
+
+| Number name | Description | Available for machines | Remarks |
+|-------------|-------------| ---------------------- | ------- |
+| Coffee target temperature | Temperature the coffee boiler is set to | GS3 AV, GS3 MP | - |
+| Steam target temperature | Temperature the steam boiler is set to | GS3 AV, GS3 MP | - |
+| Tea water duration | Dose hot water (in seconds) | GS3 AV, GS3 MP | - |
+| Dose | Doseage (in ticks) for each key | GS3 AV | GS3 has this multiple times, one for each physical key (1-4), and the entities are disabled by default |
+| Prebrew on time | Time prebrew wets the puck | Linea Micra, Linea Mini, GS3 AV | GS3 has this multiple times, one for each physical key (1-4), and the entities are disabled by default |
+| Prebrew off time | Time prebrew waits before turning on the pump | Linea Micra, Linea Mini, GS3 AV | GS3 has this multiple times, one for each physical key (1-4), and the entities are disabled by default |
+| Preinfusion time | Duration of preinfusion | Linea Micra, Linea Mini, GS3 AV | GS3 has this multiple times, one for each physical key (1-4), and the entities are disabled by default |
+
+
+## Switches
+
+| Switch name | Description | Available for machines |
+|-------------|-------------| ---------------------- |
+| Main | Allows to turn machines on-/off | all |
+| Auto on/off | Allows to enable/disable the auto on/off schedule | all |
+| Steam boiler | Allows to enable/disable the steam boiler | all |
+
+## Binary sensors
+
+| Binary sensor name | Description | Available for machines | Remarks |
+|-------------|-------------| ---------------------- | ------- |
+| Water tank empty | Indicates whether the water tank needs a refill. | all | - |
+| Brewing active | Is on if you are in the process of making coffee. | all | Only available when the *Host* was set during component configuration. |
+
+## Sensors
+
+| Sensor name | Description | Available for machines | Remarks |
+|-------------|-------------| ---------------------- | ------- |
+| Current coffee temperature | Current temperature of the coffee boiler | all | - |
+| Current steam temperature| Current temperature of the steam boiler | all | - |
+| Total coffees made | Counter for total coffees made| all | - |
+| Total flushes made | Counter for total flushes done | all | - |
+| Shot timer | Time the current brew is running | all | Only available when the *Host* was set during component configuration. |
+
+## Updates
+
+| Update name | Description | Available for machines |
+|-------------|-------------| ---------------------- |
+| Gateway firmware | Firmware status of the gateway | all |
+| Machine firmware | Firmware status of the machine | all |
+
+## Selects
+
+| Select name | Description | Options | Available for machines |
+|-------------|-------------| ------------------------| ---------------------- |
+| Prebrew/-infusion mode | Whether to use prebrew, preinfusion, or neither | Disabled, Prebrew, Preinfusion | Linea Micra, Linea Mini, GS3 AV |
+| Steam level | The level your steam boiler should run at | 1,2,3 | Linea Micra |
+
+## Calendar
+
+The integration exposes a calendar for the auto on/off schedule set for the machine. The schedule will be displayed recurringly: If you set the machine to start up on Mondays at 8:00, and shut down at 9:00, you will get events for all Mondays in your calendar. On days when you have the auto on/off feature disabled, you won't get an event in the calendar. Also, if you have the auto on/off feature disabled globally (for example, through the switch "Auto on/off"), there will be no events in the calendar.
diff --git a/source/_integrations/lawn_mower.mqtt.markdown b/source/_integrations/lawn_mower.mqtt.markdown
index efbc6eda4817..d8c58a267422 100644
--- a/source/_integrations/lawn_mower.mqtt.markdown
+++ b/source/_integrations/lawn_mower.mqtt.markdown
@@ -77,7 +77,7 @@ device:
required: false
type: string
connections:
- description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example, the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
type: list
hw_version:
@@ -100,6 +100,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -134,7 +138,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
@@ -174,7 +177,7 @@ qos:
type: integer
default: 0
start_mowing_template:
- description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`.
+ description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `start_mowing_command_topic`. The `value` parameter in the template will be set to `start_mowing`.
required: false
type: template
start_mowing_command_topic:
@@ -207,7 +210,7 @@ The example below shows how to use a single command topic with a command templat
```yaml
# Example configuration.yaml entry
mqtt:
- - alarm_control_panel:
+ - lawn_mower:
name: "Lawn Mower Plus"
activity_state_topic: "lawn_mower_plus/state"
activity_value_template: "{{ value_json.activity }}"
diff --git a/source/_integrations/leaone.markdown b/source/_integrations/leaone.markdown
new file mode 100644
index 000000000000..026fafc57bbb
--- /dev/null
+++ b/source/_integrations/leaone.markdown
@@ -0,0 +1,29 @@
+---
+title: LeaOne
+description: Instructions on how to integrate LeaOne devices into Home Assistant.
+ha_category:
+ - Sensor
+ha_release: 2024.2
+ha_iot_class: Local Push
+ha_codeowners:
+ - '@bdraco'
+ha_domain: leaone
+ha_config_flow: true
+ha_platforms:
+ - sensor
+ha_integration_type: integration
+---
+
+Integrates LeaOne health devices into Home Assistant.
+
+LeoOne produces Bluetooth scales and other health devices under the Xiaogui and BAGAIL brands.
+
+## Supported devices
+
+- Bluetooth scale TZC4 (metric)
+- Bluetooth scale TZC4 (imperial)
+- Bluetooth scale QJ-J (metric)
+
+The LeaOne integration cannot automatically discover devices because the LeaOne Bluetooth design uses non-standard discovery.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/led_ble.markdown b/source/_integrations/led_ble.markdown
index 8fbaec6d2907..220cb40afa5e 100644
--- a/source/_integrations/led_ble.markdown
+++ b/source/_integrations/led_ble.markdown
@@ -49,6 +49,6 @@ These devices have been sold under many brands, including:
- REYSURPIUS
- SUPERNIGHT
- Triones
-- Zengee
+- [Zengge](http://www.zengge.com/sy)
- YONEDA
- Zerproc
diff --git a/source/_integrations/legrand.markdown b/source/_integrations/legrand.markdown
index a2d560870121..13e13117fdf8 100644
--- a/source/_integrations/legrand.markdown
+++ b/source/_integrations/legrand.markdown
@@ -2,10 +2,12 @@
title: Legrand
description: Connect and control your Legrand devices using the Netatmo integration
ha_category:
+ - Binary sensor
- Camera
- Climate
- Cover
- Environment
+ - Fan
- Hub
- Light
- Media source
@@ -21,10 +23,12 @@ ha_codeowners:
- '@cgtobi'
ha_config_flow: true
ha_platforms:
+ - binary_sensor
- camera
- climate
- cover
- diagnostics
+ - fan
- light
- select
- sensor
diff --git a/source/_integrations/lg_netcast.markdown b/source/_integrations/lg_netcast.markdown
index bf1dfe8f3813..197b22c3458c 100644
--- a/source/_integrations/lg_netcast.markdown
+++ b/source/_integrations/lg_netcast.markdown
@@ -10,7 +10,9 @@ ha_platforms:
- media_player
ha_codeowners:
- '@Drafteed'
-ha_integration_type: integration
+ - '@splinter98'
+ha_integration_type: device
+ha_config_flow: true
---
The `lg_netcast` platform allows you to control a LG Smart TV running NetCast 3.0 (LG Smart TV models released in 2012) and NetCast 4.0 (LG Smart TV models released in 2013). For the new LG WebOS TV's use the [webostv](/integrations/webostv#media-player) platform.
diff --git a/source/_integrations/life360.markdown b/source/_integrations/life360.markdown
deleted file mode 100644
index 04fdab8a16e5..000000000000
--- a/source/_integrations/life360.markdown
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: Life360
-description: Instructions how to use Life360 to track devices in Home Assistant.
-ha_release: 0.95
-ha_config_flow: true
-ha_category:
- - Presence detection
-ha_iot_class: Cloud Polling
-ha_codeowners:
- - '@pnbruckner'
-ha_domain: life360
-ha_platforms:
- - button
- - device_tracker
-ha_integration_type: integration
----
-
-The `life360` integration allows you to detect presence using the [unofficial API](#disclaimer) of [Life360](https://www.life360.com/).
-
-## Prerequisites
-
-You must first [create a Life360 account](https://app.life360.com/sign-up).
-Individual Members must enable Location Sharing in their Life360 app to show up as a tracked entity in Home Assistant.
-
-> When adding your Life360 account to Home Assistant, you must use the email address associated with your Life360 account, not the phone number.
-
-{% include integrations/config_flow.md %}
-
-### Account options
-
-![Account Options](/images/integrations/life360/integration_options.png)
-
-item | description
--|-
-Limit GPS accuracy | Check this box to limit location updates based on location accuracy
-Max GPS accuracy | If location's accuracy circle is larger than this value (i.e., _less_ accurate than this limit) the update will be ignored (always specified in meters)
-Set driving speed threshold | Check this box to force `driving` attribute to be `True` if the `speed` attribute is at or above specified value
-Driving Speed | Speed threshold (mph or kph, depending on Home Assistant Unit System selection)
-Show driving as state | Check this box to change entity state to "Driving" when `driving` attribute is `True`
-
-## Additional attributes
-
-Life360 entities will have the following attributes in addition to the usual `device_tracker` ones:
-
-| Attribute | Description |
-| ---------------- | -------------------------------------------------------------------------------------------------- |
-| address | Address of the current location, or `none`. |
-| at_loc_since | Date and time when first at current location (in UTC.) |
-| battery_charging | Device is charging (`true`/`false`.) |
-| driving | Device movement indicates driving (`true`/`false`.) |
-| last_seen | Date and time when Life360 last updated device location (in UTC.) |
-| place | Name of Life360 Place where the device is located, or `none` if not located within one. |
-| speed | Estimated speed of device (in MPH or KPH depending on Home Assistant's unit system configuration.) |
-| wifi_on | Device Wi-Fi is turned on (`true`/`false`.) |
-
-## Home - Home Assistant vs. Life360
-
-Normally Home Assistant device trackers are "Home" when they enter `zone.home`. Also, Life360 normally considers your device "Home" when it enters the Place that coincides with your home. Since the definitions of these areas can be different, this can lead to a disagreement between Home Assistant and Life360 as to whether or not you're "Home." To avoid this, make sure these two areas are defined the same -- i.e., same location and radius. (See next section.)
-
-## Home Assistant Zones & Life360 Places
-
-See [Zone documentation](/integrations/zone/#home-zone) for details about how Home Assistant zones are defined. If you'd like to create Home Assistant zones from Life360 Places (e.g., to make Home Assistant's `zone.home` be identical to Life360's "Home Place"), make sure `logger` is set to `debug`. Then when Home Assistant starts the details of all the Places defined in the Circles will be written to `home-assistant.log` in a format that can be copied into your configuration under `zone:`. E.g., you would see something like this:
-
-```text
-2022-05-24 13:07:54 DEBUG (MainThread) [homeassistant.components.life360] Circle: My Family
-2022-05-24 13:07:54 DEBUG (MainThread) [homeassistant.components.life360] Places from My Family:
-- name: Home
- latitude: XX.XXX
- longitude: YY.YYY
- radius: ZZZ
-```
-
-## Polling Location
-
-A button is also provided that has the ability to poll for a user's location when pressed.
-
-## Disclaimer
-
-It does not appear that Life360 officially supports its REST API for use with other than its own apps. This integration is based on reverse engineering that has been done by the open source community, and an API token that was somehow discovered by the same community. At any time Life360 could disable that token or otherwise change its REST API such that this integration would no longer work.
diff --git a/source/_integrations/lifx_cloud.markdown b/source/_integrations/lifx_cloud.markdown
index 6c137206b754..7dfd11e404ec 100644
--- a/source/_integrations/lifx_cloud.markdown
+++ b/source/_integrations/lifx_cloud.markdown
@@ -44,7 +44,7 @@ timeout:
You create your API token on the LIFX website:
1. Sign in to the [LIFX Cloud](https://cloud.lifx.com/)
-2. Click on your e-mail address and select _Personal Access Tokens_
+2. Click on your email address and select _Personal Access Tokens_
3. Now click _Generate New Token_
4. Enter a meaningful label, such as 'Home Assistant'
5. Click _Generate_
diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown
index 774b013eb4d6..31ee29164a18 100644
--- a/source/_integrations/light.mqtt.markdown
+++ b/source/_integrations/light.mqtt.markdown
@@ -40,9 +40,7 @@ When a state topic is not available, the light will work in optimistic mode. In
Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect light operation.
Home Assistant internally assumes that a light's state corresponds to a defined `color_mode`.
-The state of MQTT lights with default schema and support for both color and color temperature will set the `color_mode` according to the last received valid color or color temperature. Optionally, a `color_mode_state_topic` can be configured for explicit control of the `color_mode`
-
-
+The state of MQTT lights with default schema and support for both color and color temperature will set the `color_mode` according to the last received valid color or color temperature. Optionally, a `color_mode_state_topic` can be configured for explicit control of the `color_mode`.
```yaml
# Example configuration.yaml entry
@@ -170,6 +168,10 @@ device:
description: 'The name of the device.'
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -196,7 +198,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
effect_command_topic:
description: "The MQTT topic to publish commands to change the light's effect state."
required: false
@@ -362,7 +363,7 @@ state_topic:
required: false
type: string
state_value_template:
- description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the state value. The template should match the payload `on` and `off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example if the message is just `on`, your `state_value_template` should be `power {{ value }}`."
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the state value. The template should return the `payload_on` and `payload_off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example, if the message is just `on`, your `state_value_template` should be `power {{ value }}`. When your `payload_on = 27`, `payload_off = 'off'`, then this template might be `'off' if value_json.my_custom_brightness_field <= 0 else 27`."
required: false
type: template
unique_id:
@@ -562,7 +563,7 @@ availability_topic:
required: false
type: string
brightness:
- description: Flag that defines if the light supports brightness.
+ description: Flag that defines if light supports brightness when the `rgb`, `rgbw`, or `rgbww` color mode is supported.
required: false
type: boolean
default: false
@@ -571,11 +572,6 @@ brightness_scale:
required: false
type: integer
default: 255
-color_mode:
- description: Flag that defines if the light supports color modes.
- required: false
- type: boolean
- default: false
command_topic:
description: The MQTT topic to publish commands to change the light’s state.
required: true
@@ -609,6 +605,10 @@ device:
description: 'The name of the device.'
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
sw_version:
description: 'The firmware version of the device.'
required: false
@@ -627,7 +627,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
effect:
description: Flag that defines if the light supports effects.
required: false
@@ -711,7 +710,7 @@ state_topic:
required: false
type: string
supported_color_modes:
- description: A list of color modes supported by the list. This is required if `color_mode` is `True`. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`, `white`. Note that if `onoff` **or** `brightness` are used, that must be the _only_ value in the list.
+ description: A list of color modes supported by the list. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`, `white`. Note that if `onoff` **or** `brightness` are used, that must be the _only_ value in the list.
required: false
type: list
unique_id:
@@ -754,7 +753,6 @@ mqtt:
state_topic: "home/rgb1"
command_topic: "home/rgb1/set"
brightness: true
- color_mode: true
supported_color_modes: ["rgb"]
```
@@ -771,7 +769,6 @@ mqtt:
state_topic: "home/rgb1"
command_topic: "home/rgb1/set"
brightness: true
- color_mode: true
supported_color_modes: ["brightness"]
```
@@ -789,7 +786,6 @@ mqtt:
command_topic: "home/light/set"
brightness: true
brightness_scale: 4095
- color_mode: true
supported_color_modes: ["brightness"]
```
@@ -813,7 +809,6 @@ mqtt:
name: mqtt_json_hs_light
state_topic: "home/light"
command_topic: "home/light/set"
- color_mode: true
supported_color_modes: ["hs"]
```
@@ -843,7 +838,6 @@ mqtt:
state_topic: "home/rgbw1"
command_topic: "home/rgbw1/set"
brightness: true
- color_mode: true
supported_color_modes: ["rgbw"]
```
@@ -978,6 +972,10 @@ device:
description: 'The name of the device.'
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
sw_version:
description: 'The firmware version of the device.'
required: false
@@ -996,7 +994,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
effect_list:
description: List of possible effects.
required: false
diff --git a/source/_integrations/light.template.markdown b/source/_integrations/light.template.markdown
index d1ef7e539f58..b1e0a786223d 100644
--- a/source/_integrations/light.template.markdown
+++ b/source/_integrations/light.template.markdown
@@ -53,7 +53,7 @@ light:
value: "{{ s }}"
entity_id: input_number.s_input
- service: light.turn_on
- data_template:
+ data:
entity_id:
- light.led_strip
transition: "{{ transition | float }}"
@@ -62,7 +62,7 @@ light:
- "{{ hs[1] }}"
set_effect:
- service: light.turn_on
- data_template:
+ data:
entity_id:
- light.led_strip
effect: "{{ effect }}"
@@ -399,12 +399,12 @@ light:
set_level:
service: light.turn_on
entity_id: light.wled_master
- data_template:
+ data:
brightness: "{{ brightness }}"
set_rgbw:
service: light.turn_on
entity_id: light.wled_segment_0, light.wled_segment_1
- data_template:
+ data:
rgbw_color:
- "{{ r }}"
- "{{ g }}"
@@ -414,7 +414,7 @@ light:
set_effect:
service: light.turn_on
entity_id: light.wled_segment_0, light.wled_segment_1
- data_template:
+ data:
effect: "{{ effect }}"
```
diff --git a/source/_integrations/llamalab_automate.markdown b/source/_integrations/llamalab_automate.markdown
index f4a6b85f9ef0..70495c6e137e 100644
--- a/source/_integrations/llamalab_automate.markdown
+++ b/source/_integrations/llamalab_automate.markdown
@@ -41,7 +41,7 @@ api_key:
required: true
type: string
to:
- description: E-Mail address the Automate-Fiber is configured for.
+ description: Email address the Automate-Fiber is configured for.
required: true
type: string
device:
@@ -71,7 +71,7 @@ Receiving cloud messages in Automate:
4. Connect OK from Flow beginning to IN of Cloud receive
5. Connect OK from Cloud receive to Toast show
6. Connect OK form Toast show to IN of Cloud receive
-7. Tap Cloud receive and select the E-Mail account as setup in your configuration
+7. Tap Cloud receive and select the email account as setup in your configuration
8. Assign a variable name for the Payload
9. Tap Toast show and set the message value to the variable you've specified
diff --git a/source/_integrations/local_calendar.markdown b/source/_integrations/local_calendar.markdown
index d0ad2e59ed05..e2cd8c251da0 100644
--- a/source/_integrations/local_calendar.markdown
+++ b/source/_integrations/local_calendar.markdown
@@ -1,6 +1,6 @@
---
-title: Local Calendar
-description: Instructions on how to use Local Calendars in Home Assistant.
+title: Local calendar
+description: Instructions on how to use local calendars in Home Assistant.
ha_category:
- Calendar
ha_iot_class: Local Polling
@@ -15,7 +15,7 @@ ha_codeowners:
ha_integration_type: integration
---
-The local calendar integration allows you to create a calendar of events in Home Assistant for powering automations.
+The **Local calendar** {% term integration %} allows you to create a calendar of events in Home Assistant for powering automations.
A calendar entity has a state and attributes that represent the next upcoming event (only). A calendar trigger is a much more flexible way to power automations with fewer limitations than using the entity state.
diff --git a/source/_integrations/local_file.markdown b/source/_integrations/local_file.markdown
index a1594b19d2d6..ca49a1ded323 100644
--- a/source/_integrations/local_file.markdown
+++ b/source/_integrations/local_file.markdown
@@ -1,6 +1,6 @@
---
-title: Local File
-description: Instructions how to use Local File as a Camera within Home Assistant.
+title: Local file
+description: Instructions how to use local file as a camera within Home Assistant.
ha_category:
- Camera
ha_iot_class: Local Polling
@@ -11,7 +11,7 @@ ha_platforms:
ha_integration_type: integration
---
-The `local_file` camera platform allows you to integrate an image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. The service `local_file.update_file_path` can be used to update the image using an automation.
+The **Local file** camera {% term integration %} allows you to integrate an image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. The service `local_file.update_file_path` can be used to update the image using an automation.
The `local_file` camera can for example be used with various camera platforms that save a temporary images locally. It can also be used to display a graph that you render periodically and will then be displayed in Home Assistant.
@@ -41,7 +41,7 @@ name:
Use this service to change the file displayed by the camera.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String of the `entity_id` of the camera to update. |
-| `file_path` | The full path to the new image file to be displayed. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------- |
+| `entity_id` | String of the `entity_id` of the camera to update. |
+| `file_path` | The full path to the new image file to be displayed. |
diff --git a/source/_integrations/local_todo.markdown b/source/_integrations/local_todo.markdown
index 3786fe8e9a65..f7602092bcbc 100644
--- a/source/_integrations/local_todo.markdown
+++ b/source/_integrations/local_todo.markdown
@@ -1,5 +1,5 @@
---
-title: Local To-do
+title: Local to-do
description: Instructions on how to use local to-do lists in Home Assistant.
ha_category:
- To-do list
@@ -12,9 +12,14 @@ ha_codeowners:
ha_integration_type: integration
ha_platforms:
- todo
+related:
+ - docs: /integrations/todo/
+ title: To-do list integration documentation
+ - docs: /dashboards/todo-list/
+ title: To-do list card
---
-The **Local to-do list** integration allows you to create to-do lists in Home Assistant.
+The **Local to-do list** {% term integration %} allows you to create to-do lists in Home Assistant.
To-do lists are shown on the **To-do list** dashboard for tracking items and whether
or not they have been completed.
diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown
index 2e513f451c59..ea94daec7fc8 100644
--- a/source/_integrations/lock.mqtt.markdown
+++ b/source/_integrations/lock.mqtt.markdown
@@ -21,8 +21,6 @@ Optimistic mode can be forced, even if state topic is available. Try to enable i
It's mandatory for locks to support `lock` and `unlock`. A lock may optionally support `open`, (e.g. to open the bolt in addition to the latch), in this case, `payload_open` is required in the configuration. If the lock is in optimistic mode, it will change states to `unlocked` when handling the `open` command.
An MQTT lock can also report the intermediate states `unlocking`, `locking` or `jammed` if the motor reports a jammed state.
-
-
To enable MQTT locks in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -114,6 +112,10 @@ device:
description: 'The name of the device.'
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -140,7 +142,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
diff --git a/source/_integrations/logger.markdown b/source/_integrations/logger.markdown
index b55a9093d5df..48bf62f37732 100644
--- a/source/_integrations/logger.markdown
+++ b/source/_integrations/logger.markdown
@@ -130,7 +130,7 @@ logger:
logs:
custom_components.my_integration: critical
filters:
- custom_component.my_integration:
+ custom_components.my_integration:
- "HTTP 429" # Filter all HTTP 429 errors
- "Request to .*unreliable.com.* Timed Out"
homeassistant.components.nws:
diff --git a/source/_integrations/logi_circle.markdown b/source/_integrations/logi_circle.markdown
deleted file mode 100644
index 16672154fdaa..000000000000
--- a/source/_integrations/logi_circle.markdown
+++ /dev/null
@@ -1,166 +0,0 @@
----
-title: Logi Circle
-description: Instructions on how to integrate your Logi Circle cameras within Home Assistant.
-ha_category:
- - Camera
- - Sensor
-ha_release: 0.79
-ha_iot_class: Cloud Polling
-ha_config_flow: true
-ha_codeowners:
- - '@evanjd'
-ha_domain: logi_circle
-ha_platforms:
- - camera
- - sensor
-ha_integration_type: integration
----
-
-The `logi_circle` implementation allows you to integrate your [Logi Circle](https://circle.logi.com/) cameras in Home Assistant. To connect Logi Circle, you will have to [sign up for API access](#requesting-api-access) and get a `client_id`, `client_secret` and `api_key`.
-
-## Requesting API access
-
-1. Navigate to the [Circle OAuth2 Client Request Form](https://docs.google.com/forms/d/184FUILJ10rVxotyOQR5DAiu6GcCbK31AZszUdzT1ybs).
-2. Fill out your contact name and e-mail address.
-3. For the User Visible Client Name, specify "Home Assistant"
-4. Request the following scopes:
- - `circle:activities`
- - `circle:accessories`
- - `circle:live_image`
- - `circle:live`
- - `circle:notifications`
- - `circle:summaries`
-5. Request the `authorization_code` grant type.
-6. For the redirect URI, specify your Home Assistant URL followed by `/api/logi_circle`. For example, if your Home Assistant URL is `https://abc123.ui.nabu.casa`, then request `https://abc123.ui.nabu.casa/api/logi_circle`. The redirect URI must meet the following criteria:
- - The URL must be HTTPS with a SSL certificate issued by a trusted CA (i.e., trusted by normal browsers).
- - At the time you submit your request to Logitech, you need to demonstrate that you have exclusive control of the fully qualified domain name in your redirect URI. An active Home Assistant instance at the redirect URI will suffice. If you don't want to expose your Home Assistant instance publicly, you may also place a static page at the redirect URI with a short message that you will manage redirection of the authorization token to your local Home Assistant instance. Free static hosts that issue subdomains for hosting (e.g., Netlify) are permitted.
- - As the redirect URI must be public facing, no local/reserved TLDs are permitted (eg. .local, .localhost, .example, etc. are not allowed).
-
-Please note that the turn-around time for API access takes up to a month after which you will be contacted by Logitech using the email address you provided in the form.
-
-## Configuration
-
-To integrate cameras linked with your [Logi Circle](https://circle.logi.com/) account, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-logi_circle:
- client_id: YOUR_CLIENT_ID
- client_secret: YOUR_CLIENT_SECRET
- api_key: YOUR_API_KEY
- redirect_uri: YOUR_REDIRECT_URI
-```
-
-{% configuration %}
-client_id:
- description: The client ID issued to you by Logitech.
- required: true
- type: string
-client_secret:
- description: The client secret issued to you by Logitech.
- required: true
- type: string
-api_key:
- description: The API key issued to you by Logitech.
- required: true
- type: string
-redirect_uri:
- description: >
- The redirect URI that corresponds to your Home Assistant instance.
- It must match one of the redirect URIs specified when you requested API
- access from Logitech.
- required: true
- type: string
-{% endconfiguration %}
-
-### Camera
-
-The `logi_circle` camera platform allows you to view still frames from your [Logi Circle](https://circle.logi.com/) camera's live stream in Home Assistant.
-
-Logi Circle cameras support the `camera.turn_on` and `camera.turn_off` services. This will set the streaming mode property of your camera accordingly, controlling whether the live stream is available and activity recordings are captured.
-
-### Sensor
-
-The `logi_circle` sensor platform lets you monitor sensors connected to your [Logi Circle](https://circle.logi.com) cameras in Home Assistant.
-
-To customize which sensors are setup, you can extend the Logi Circle integration configuration in your `configuration.yaml` file with the following settings:
-
-```yaml
-# Example configuration.yaml entry
-logi_circle:
- sensors:
- monitored_conditions:
- - battery_level
- - last_activity_time
- - recording
- - signal_strength_category
- - signal_strength_percentage
- - streaming
-```
-
-By default, all sensors available from your Logi Circle devices will be monitored. Leave `monitored_conditions` blank to disable all sensors for the Logi Circle integration. Devices without an internal battery will not expose a `battery_level` sensor.
-
-{% configuration %}
-sensor:
- description: Configuration to pass to all sensors.
- required: false
- type: map
- keys:
- monitored_conditions:
- description: The conditions to create sensors from.
- required: false
- type: list
- default: all
- keys:
- battery_level:
- description: Returns the battery level percentage from the camera.
- last_activity_time:
- description: Return the timestamp from the last time the Logi Circle camera detected any activity.
- recording:
- description: The camera's recording mode. If false, the camera will not capture activities.
- signal_strength_category:
- description: Return the Wi-Fi signal level from the camera.
- signal_strength_percentage:
- description: Return the Wi-Fi signal percentage from the camera.
- streaming:
- description: The soft on/off status of the camera.
-{% endconfiguration %}
-
-## Services
-
-The `logi_circle` platform exposes 3 services for interacting with your Logi Circle device. When calling a service with one or more entity IDs, please ensure you target the camera entity (eg. `camera.living_room_camera`).
-
-### Service `logi_circle.livestream_record`
-
-Initiates a recording of the camera's live stream.
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
-| `entity_id` | yes | Name(s) of entities to initiate a recording for, e.g., `camera.living_room_camera`. If blank, targets all Logi Circle cameras. |
-| `filename ` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/recording_{{ entity_id }}.mp4`{% endraw %}. |
-| `duration` | no | Duration of recording, in seconds. |
-
-The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
-
-### Service `logi_circle.livestream_snapshot`
-
-Take a snapshot from a camera's live stream. This differs from the generic [snapshot](/integrations/camera/#service-snapshot) service in that explicitly requests a fresh image from Logi Circle's API. This will force cameras in a deep sleep state to wake.
-
-Please note that new snapshots will only be generated if the cached snapshot is older than 30s. Requesting multiple snapshots in quick succession will likely return the same image. Likewise, requesting a snapshot from a camera that is actively streaming (ie. is not in deep sleep) will return a cached image no older than 30s.
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
-| `entity_id` | yes | Name(s) of entities to create a live stream snapshot from, e.g., `camera.living_room_camera`. If blank, targets all Logi Circle cameras. |
-| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}.jpg`{% endraw %}. |
-
-The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
-
-### Service `logi_circle.set_config`
-
-Sets a configuration property for your camera.
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- |
-| `entity_id` | yes | Name(s) of entities to set the operation mode for, e.g., `camera.living_room_camera`. If blank, targets all Logi Circle cameras. |
-| `mode` | no | Configuration property to set. Allowed values: `LED`, `RECORDING_MODE` |
-| `value` | no | Mode value. Allowed values: `true`, `false` |
diff --git a/source/_integrations/loqed.markdown b/source/_integrations/loqed.markdown
index 1243fc9354b8..06e64c5e86fb 100644
--- a/source/_integrations/loqed.markdown
+++ b/source/_integrations/loqed.markdown
@@ -32,7 +32,7 @@ On the [LOQED personal access token website](https://integrations.production.loq
{% details "Generate access token" %}
-1. Login with your LOQED App e-mail address (you need to be an admin).
+1. Login with your LOQED App email address (you need to be an admin).
2. Select **Create**.
3. Give your personal access token a name (this will not be used further on, but we recommend something like "Home Assistant" to recognize it as used by Home Assistant).
4. Select **Save**.
@@ -55,5 +55,5 @@ First, remove the integration from Home Assistant. This will remove any configur
On [LOQED personal access token website](https://integrations.production.loqed.com/personal-access-tokens), please follow the following steps:
-1. Login with your LOQED App e-mail address (you need to be admin).
+1. Login with your LOQED App email address (you need to be admin).
2. Select **delete** on the Personal Access Token you used when creating this integration.
diff --git a/source/_integrations/lupusec.markdown b/source/_integrations/lupusec.markdown
index b74930d77230..9c875d5be970 100644
--- a/source/_integrations/lupusec.markdown
+++ b/source/_integrations/lupusec.markdown
@@ -10,12 +10,14 @@ ha_release: 0.83
ha_iot_class: Local Polling
ha_codeowners:
- '@majuss'
+ - '@suaveolent'
ha_domain: lupusec
ha_platforms:
- alarm_control_panel
- binary_sensor
- switch
ha_integration_type: integration
+ha_config_flow: true
---
The `lupusec` integration allows the user to integrate their Lupusec alarm control panel and ultimately all connected sensors and other devices. For more information about the LUPUS-Electronics security system please visit their [website](https://www.lupus-electronics.de).
@@ -24,6 +26,7 @@ Supported units:
- Lupusec XT1
- Lupusec XT2 Plus
+- Lupusec XT3
The following devices are supported by the underlying `lupupy` Python library and integrated into Home Assistant.
@@ -31,33 +34,4 @@ The following devices are supported by the underlying `lupupy` Python library an
- **Binary sensor**: Displays the status of binary sensors. Door, window, water, and smoke sensors are supported.
- **Switch**: Turn off and on your Lupus power switches.
-## Configuration
-
-To use Lupusec devices in your installation, add the following `lupusec` section to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-lupusec:
- username: YOUR_USERNAME
- password: YOUR_PASSWORD
- ip_address: YOUR_IP_ADDRESS
-```
-
-{% configuration %}
-username:
- description: The login username of your Lupusec alarm panel.
- required: true
- type: string
-password:
- description: The login password of your Lupusec alarm panel.
- required: true
- type: string
-ip_address:
- description: The IP address of your Lupusec alarm panel.
- required: true
- type: string
-name:
- description: Name for your Lupusec panel.
- required: false
- type: string
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/lutron.markdown b/source/_integrations/lutron.markdown
index 6ea72c247576..91fde89568fd 100644
--- a/source/_integrations/lutron.markdown
+++ b/source/_integrations/lutron.markdown
@@ -3,6 +3,8 @@ title: Lutron
description: Instructions on how to use Lutron devices with Home Assistant.
ha_category:
- Cover
+ - Event
+ - Fan
- Hub
- Light
- Scene
@@ -11,14 +13,18 @@ ha_release: 0.37
ha_iot_class: Local Polling
ha_codeowners:
- '@cdheiser'
+ - '@wilburCForce'
ha_domain: lutron
ha_platforms:
- binary_sensor
- cover
+ - event
+ - fan
- light
- scene
- switch
ha_integration_type: integration
+ha_config_flow: true
---
[Lutron](http://www.lutron.com/) is an American lighting control company. They have several lines of home automation devices that manage light switches/dimmers, occupancy sensors, HVAC controls, etc. The `lutron` integration in Home Assistant is responsible for communicating with the main hub for these systems.
@@ -29,30 +35,9 @@ Presently, there's only support for communicating with the [RadioRA 2](http://ww
When configured, the `lutron` integration will automatically discover the rooms and their associated switches/dimmers as configured by the RadioRA 2 software from Lutron. Each room will be treated as a separate group.
-To use Lutron RadioRA 2 devices in your installation, you'll need to first create a username/password in your Lutron programming software. Once a telnet username/password has been programmed, add the following to your `configuration.yaml` file using the IP address of your RadioRA 2 main repeater:
+To use Lutron RadioRA 2 devices in your installation, you'll need to first create a username/password in your Lutron programming software. Once a telnet username/password has been programmed, you can follow the instructions from the next chapter.
-``` yaml
-# Example configuration.yaml entry
-lutron:
- host: IP_ADDRESS
- username: USERNAME
- password: PASSWORD
-```
-
-{% configuration %}
-host:
- description: The IP address of the Main Repeater.
- required: true
- type: string
-username:
- description: The login name of the user. The user `lutron` always exists, but other users can be added via RadioRA 2 software.
- required: true
- type: string
-password:
- description: The password for the user specified above. `integration` is the password for the always-present `lutron` user.
- required: true
- type: string
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
@@ -68,15 +53,7 @@ If you are using RadioRA2 software version 12 or later, the default `lutron` use
## Keypad buttons
-Individual buttons on keypads are not represented as entities. Instead, they fire events called `lutron_event` whose payloads include `id`, `action`, and `uuid` attributes.
-
-The `id` attribute includes the name of the keypad and the name of the button, normalized the same way entity names are. For example, if the keypad is called "Kitchen Keypad" and the button is called "Dinner" the event's `id` will be `kitchen_keypad_dinner`. If the button has not been assigned a name by the Lutron system installer then the button will have a name of "Unknown Button". In this case the `id` will be suffixed with the underlying Lutron button number and will be of the form `kitchen_keypad_unknown_button_1`. The `uuid` is available to distinguish buttons with the same name on one keypad.
-
-The `action` attribute varies depending on the button type.
-
-For raise/lower buttons (dimmer buttons, shade controls, etc.) there will be two values, `pressed` and `released`, fired when the button is pressed and when it's released, respectively.
-
-For single-action buttons (scene selection, etc.), `action` will be `single`, and there will only be one event fired. This is a limitation of the Lutron controller which doesn't give Home Assistant any way of knowing when a single-action button is released.
+Keypad buttons actions are provided in event entities.
## Keypad LEDs
diff --git a/source/_integrations/lutron_caseta.markdown b/source/_integrations/lutron_caseta.markdown
index edd51b03d78b..ca13682b775c 100644
--- a/source/_integrations/lutron_caseta.markdown
+++ b/source/_integrations/lutron_caseta.markdown
@@ -19,6 +19,7 @@ ha_codeowners:
- '@swails'
- '@bdraco'
- '@danaues'
+ - '@eclair4151'
ha_zeroconf: true
ha_homekit: true
ha_platforms:
@@ -112,7 +113,7 @@ Use a DHCP reservation on your router to reserve the address or in the PRO model
-To get Lutron Caseta roller, honeycomb shades, lights, scene and switch working with Home Assistant. First follow the instructions for the general Lutron Caseta integration above.
+To get Lutron Caseta roller, honeycomb shades, wood blinds, lights, scene and switch working with Home Assistant, first follow the instructions for the general Lutron Caseta integration above.
## Cover
@@ -122,6 +123,8 @@ For more information on working with shades in Home Assistant, see the [Covers i
Available services: `cover.open_cover`, `cover.close_cover`, `cover.stop_cover` and `cover.set_cover_position`. Cover `position` ranges from `0` for fully closed to `100` for fully open.
+Available services for tilt-only wood blinds: `cover.open_cover_tilt`, `cover.close_cover_tilt`, `cover.stop_cover_tilt`, `cover.toggle_tilt`. Cover `position` is `0` or `100` for fully closed and `50` for fully open.
+
## Light
After setup, dimmable lights including wall and plug-in dimmers will appear in Home Assistant using an `entity_id` based on the name used in the Lutron mobile app. For example, a light called 'Bedroom Lamp' will appear in Home Assistant as `light.bedroom_lamp`.
diff --git a/source/_integrations/luxaflex.markdown b/source/_integrations/luxaflex.markdown
index 18eec7c11926..71bee0a59e86 100644
--- a/source/_integrations/luxaflex.markdown
+++ b/source/_integrations/luxaflex.markdown
@@ -4,6 +4,7 @@ description: Connect and control your Luxaflex devices using the Hunter Douglas
ha_category:
- Button
- Cover
+ - Number
- Scene
- Select
- Sensor
@@ -21,6 +22,7 @@ ha_platforms:
- button
- cover
- diagnostics
+ - number
- scene
- select
- sensor
diff --git a/source/_integrations/lyric.markdown b/source/_integrations/lyric.markdown
index 84534445cef2..d0d88d8d9424 100644
--- a/source/_integrations/lyric.markdown
+++ b/source/_integrations/lyric.markdown
@@ -61,3 +61,10 @@ This integration provides the following sensors:
| Outdoor Humidity | Lyric's outdoor humidity |
| Next Period Time | The next time the thermostat will change |
| Setpoint Status | A description of the setpoint of the device |
+
+Additional sensors will be created for each room sensor accessory assigned to a thermostat device, if applicable:
+
+| Name | Description |
+| -------------------- | ----------------------------------------------------------------- |
+| Room Temperature | The temperature reported from a room sensor accessory |
+| Room Humidity | The humidity reported from a room accessory |
diff --git a/source/_integrations/madeco.markdown b/source/_integrations/madeco.markdown
new file mode 100644
index 000000000000..a85bf0cf92d8
--- /dev/null
+++ b/source/_integrations/madeco.markdown
@@ -0,0 +1,21 @@
+---
+title: Madeco
+description: Connect and control your Madeco devices using the Motionblinds integration
+ha_category:
+ - Cover
+ha_domain: madeco
+ha_integration_type: virtual
+ha_supporting_domain: motion_blinds
+ha_supporting_integration: Motionblinds
+ha_release: 2020.12
+ha_codeowners:
+ - '@starkillerOG'
+ha_config_flow: true
+ha_platforms:
+ - cover
+ - sensor
+ha_iot_class: Local Push
+ha_dhcp: true
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/mailbox.markdown b/source/_integrations/mailbox.markdown
deleted file mode 100644
index c634d11a1be6..000000000000
--- a/source/_integrations/mailbox.markdown
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Mailbox
-description: Instructions on how to setup your mailboxes with Home Assistant.
-ha_release: 0.51
-ha_domain: mailbox
-ha_quality_scale: internal
-ha_category: []
-ha_integration_type: entity
----
-
-Mailboxes provide a list of messages with short information about each. Mailbox messages appear on a separate panel in the frontend.
-
-Home Assistant currently supports only the [Asterisk Voicemail](/integrations/asterisk_mbox/) mailbox.
-
-Each mailbox also provides an entity to indicate the number of messages available on the main page.
-
-{% include integrations/building_block_integration.md %}
diff --git a/source/_integrations/mailgun.markdown b/source/_integrations/mailgun.markdown
index 654fd8562a26..5c5f4def3f82 100644
--- a/source/_integrations/mailgun.markdown
+++ b/source/_integrations/mailgun.markdown
@@ -12,7 +12,7 @@ ha_platforms:
ha_integration_type: integration
---
-To be able to receive webhooks from Mailgun, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic)).
+To be able to receive webhooks from Mailgun, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/integrations/homeassistant/#allowlist_external_urls).
To set it up, go to the integrations page in the configuration screen and find Mailgun. Click on configure. Follow the instructions on the screen to configure Mailgun.
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/_integrations/martec.markdown b/source/_integrations/martec.markdown
index a108bd80c38e..8d45b550d1a2 100644
--- a/source/_integrations/martec.markdown
+++ b/source/_integrations/martec.markdown
@@ -1,12 +1,12 @@
---
title: Martec
-description: Connect and control your Martec devices using the Motion Blinds integration
+description: Connect and control your Martec devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: martec
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/matrix.markdown b/source/_integrations/matrix.markdown
index 5b8ad02b746a..48cfb641a394 100644
--- a/source/_integrations/matrix.markdown
+++ b/source/_integrations/matrix.markdown
@@ -218,7 +218,7 @@ action:
-If you need to include a file from an external folder in your notifications, you will have to [list the source folder as allowed](/docs/configuration/basic/).
+If you need to include a file from an external folder in your notifications, you will have to [list the source folder as allowed](/integrations/homeassistant/#allowlist_external_dirs).
```yaml
configuration.yaml
diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown
index 9e64752a34cc..87c40efb75a4 100644
--- a/source/_integrations/matter.markdown
+++ b/source/_integrations/matter.markdown
@@ -26,19 +26,29 @@ ha_platforms:
- sensor
- switch
ha_integration_type: integration
+related:
+ - docs: /integrations/thread/
+ title: Thread
+ - docs: /integrations/homekit_controller/
+ title: HomeKit
+ - docs: /integrations/homekit_controller/#adding-a-homekit-device-through-thread
+ title: Adding an Apple HomeKit device through Thread
+ha_zeroconf: true
---
The Matter integration allows you to control Matter devices on your local Wi-Fi or {% term Thread %} network.
+For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" as add-on. This Matter Server add-on runs the controller software as a separate process and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection.
+
-The integration is marked BETA: Both the Matter standard itself and its implementation within Home Assistant are in a early stage. You may run into compatibility issues and/or other bugs.
+The integration is marked BETA: Both the Matter standard itself and its implementation within Home Assistant are in an early stage. You may run into compatibility issues and/or other bugs.
-# Introduction- What is Matter?
+# Introduction - What is Matter?
Matter is a new smart home connectivity standard for home automation products and IoT (Internet of Things) devices, see its [Wikipedia article](https://en.wikipedia.org/wiki/Matter_(standard)).
-The initial version 1.0 release of Matter was published in October of 2022. Matter is still in the process of being adopted in the smart home market. It has gotten much publicity because of its promise of interoperability across all ecosystems. The largest tech companies like Google, Apple and Amazon teamed up to develop this new smart home connectivity standard under the roof of the CSA ([Connectivity Standards Alliance](https://csa-iot.org/)). The largest tech companies that are already active in the home automation market have announced that they are or will be working on Matter-compatible products and also joined the development effort.
+The initial version 1.0 release of Matter was published in October of 2022. Matter is still in the process of being adopted in the smart home market. It has gotten much publicity because of its promise of interoperability across all ecosystems. The largest tech companies like Google, Apple and Amazon teamed up to develop this new smart home connectivity standard under the roof of the CSA ([Connectivity Standards Alliance](https://csa-iot.org/)). The largest tech companies that are already active in the home automation market have announced that they are or will be working on Matter-compatible products and also joined the development effort.
Matter products run locally and always allow local control, with device control done without the need for any internet connection or cloud services. From a technical perspective, you can use a Matter-compatible device with Home Assistant without connecting to a vendor-specific cloud. However, some vendors may require you to set up an account before you can enable Matter support for some products, (especially for commercial manufacturer's own branded gateways/bridges/hubs/controllers sold as appliances).
@@ -46,34 +56,30 @@ Unlike other common radio-based protocols for IoT, (like Zigbee, Z-Wave, and Blu
Home Assistant is a so-called "_controller_" in a Matter ecosystem, meaning that it can control Matter-based devices. Other examples of Matter controllers are the Google Nest products, Apple HomePod speakers, Samsung SmartThings Station, and some newer Amazon Echo devices.
-## Bridge devices
+## What does Thread have to do with Matter?
-One of the great things about Matter is that you can have both Wi-Fi and Thread based devices on the same controller.
-Next to actual devices (like actors or sensors), you will also see bridges. The bridge connects the network over Ethernet or Wi-Fi and bridges multiple devices into a Matter network. A great example is the Philips Hue V2 bridge, which is a Zigbee hub and a Matter bridge. This bridge exposes all Zigbee devices already connected to the bridge as Matter devices on the network. Also, Aqara, SwitchBot, and IKEA have launched such Hub devices.
+{% term Thread %} is a low power radio mesh networking technology. Much like Zigbee, but with the key difference that it is _IP-addressable_, making it a suitable transport protocol option for Matter.
-
-Home Assistant, as a Matter controller, only supports **control** of Matter devices. Home Assistant is not a bridge itself and it cannot turn existing devices within Home Assistant into Matter compatible devices.
-
+The figure below illustrates the landscape of {% term Matter %}, {% term Thread %}, and Border routers. The Thread border router forwards traffic from the devices in the Thread network to devices outside that network.
-## Thread
+![image](/images/integrations/matter/matter_thread_infographic.png)
-Matter goes hand-in-hand with (but is not the same as) [Thread](), which is a low power radio mesh networking technology. Much like Zigbee, but with the key difference that it is _IP-addressable_, making it the perfect companion transport for Matter.
+Image taken from [the Thread Smart Home Fact Sheet](https://www.threadgroup.org/support#Resources) by the Thread Group.
-Thread devices become directly addressable by Matter controllers (such as Home Assistant) thanks to the use of so-called Thread Border Routers, which are in fact just devices that are both within your network and have a Thread chip builtin and thus act as a "router" between the Thread radio signal and your local network. These border routers (you will probably end up having multiple of them in your house) make sure that your Thread-based devices are reachable on your regular network and thus can be controlled with Matter. Examples of Thread Borders routers are the Apple TV 4K, HomePod (gen 2 or Mini), and the Google Nest Hub V2, so devices that you may already own. Besides that, all kind of other border routers are available, built-in to hardware appliances or software solutions based on OpenThread Border Router, such as the add-on we provide to use with the built-in Zigbee/Thread chip of the [Home Assistant Yellow](/yellow/) or the [Home Assistant SkyConnect](/skyconnect/) dongle.
+For more information about Thread, refer to the [Thread documentation](/integrations/thread/).
-To use any Thread-based devices on a Matter controller, you need to have at least one Thread Border router device within range of the device.
-More info about Thread and diagnosing Thread networks and Border routers, see the [Thread](/integrations/thread/) integration.
+### Thread devices don't necessarily support Matter
-
-Many devices that (will) hit the market will use Thread for radio communication and Matter as a control protocol, but this is not guaranteed. For example, Thread-based devices are available that only support Apple HomeKit or some vendor-specific communication protocol. There are also a few cases where you need to apply for a (beta) firmware update on the device to enable Matter as a communication protocol. Therefore, do not assume Matter support when you see a Thread logo when looking for devices. Please be sure to look for the *Matter* logo itself (on either Wi-Fi/Ethernet-based devices or Thread) or any other confirmation by the manufacturer that the device supports Matter.
-
+Many devices on the market use {% term Thread %} for radio communication and Matter as a control protocol. But this is not guaranteed. Some Thread-based devices support Apple HomeKit or another vendor-specific communication protocol. There are also a few cases where you need to apply for a (beta) firmware update on the device to enable Matter as a communication protocol.
-## Bluetooth
+Don't assume Matter support when you see a Thread logo on a device. Always look for the _Matter_ logo itself (on either Wi-Fi/Ethernet-based devices or {% term Thread %}) or any other confirmation by the manufacturer that the device supports Matter.
-Most (if not all) Matter-compliant devices will also have a Bluetooth chip onboard, this is to ease commissioning (a somewhat technical term for adding a device to your controller). Bluetooth will not be used to control a device but only to pair it after unboxing or factory resetting. The Home Assistant controller uses the Home Assistant Companion app to do commissioning, so you can bring your phone close to the device you want to commission. The controller will then send your network credentials to your device over Bluetooth in the commissioning process. If that succeeds, the device will communicate over its native interface, meaning Wi-Fi, Ethernet, or Thread.
+## Bluetooth used during commissioning
+
+Most (if not all) Matter-compliant devices have a Bluetooth chip onboard to ease {% term commissioning %}. Bluetooth is not used to control but to pair a device after unboxing or after factory resetting. The Home Assistant controller uses the Home Assistant Companion app for {% term commissioning %}. During commissioning, you need to bring your phone close to the device. The controller then sends your network credentials to your device over Bluetooth. Once that is done, the device communicates over its native interface: Wi-Fi or Thread.
-Although your Home Assistant server might have a Bluetooth adapter on board that the controller can use to commission devices, we choose not to utilize that adapter. Mainly to prevent issues with the built-in Bluetooth integration but also because it makes more sense to bring your mobile devices close to the Matter device you'd like to commission.
+Although your Home Assistant server might have a Bluetooth adapter on board that the controller can use to {% term commission %} devices, Home Assistant does not utilize that adapter. Mainly to prevent issues with the built-in Bluetooth integration but also because it is easier to bring your mobile devices close to the Matter device than bringing the device near your server.
## Multi fabric: join to multiple controllers
@@ -82,85 +88,234 @@ One of the great features of Matter is the so-called _Multi Fabric_ feature: you
For devices where Home Assistant provides a native integration (with local API), Matter may not be the best option. Matter, being a universal standard, might not have the nitty-gritty features that come with a product-specific protocol. A good example is Philips Hue: the communication over Matter only provides the basic controls over lights, while the official [Hue integration](/integrations/hue) brings all Hue unique features like (dynamic) scenes, entertainment mode, etc.
-![image](/images/integrations/matter/matter_thread_infographic.webp)
+## Supported installation types
-Image taken from [this excellent article by The Verge](https://www.theverge.com/23165855/thread-smart-home-protocol-matter-apple-google-interview) about Matter that shows the landscape of Matter, Thread, Border routers and bridges in a nice visualized way.
+It is recommended to run the Matter add-on on Home Assistant OS. This is currently the only supported option. Other installation types are without support and at your own risk.
-{% include integrations/config_flow.md %}
+If you run Home Assistant in a container, you can run a Docker image of the [Matter server](https://github.com/home-assistant-libs/python-matter-server). The requirements and instructions for your host setup are described on that GitHub page.
-For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" in a separate process which will be launched as an add-on. This add-on runs the controller software and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection.
+Running Matter on a Home Assistant Core installation is not supported.
-### Supported installation types
+## Adding a Matter device to Home Assistant
-It is recommended to run the Matter add-on on Home Assistant OS. This is currently the best-supported option.
+Each Matter network is called a fabric. Each home automation controller that controls Matter devices has its own "fabric". You can add devices directly to the fabric of your Home Assistant instance, or share them from another fabric (for example from Google or Apple) to Home Assistant's fabric. We're going to explore all these options below.
-If you run Home Assistant in a container, you can run a Docker image of the [Matter server](https://github.com/home-assistant-libs/python-matter-server). The requirements and instructions for your host setup are described on that GitHub page.
+Note: The section below mentions third-party Thread border routers such as the Nest Hub (2nd Gen) or the HomePod Mini. This doesn’t mean you have to add your devices to these ecosystems. Home Assistant only uses them to access the Thread radio network. The communication between the Home Assistant Matter controller and your Matter devices is encrypted. The Thread border router passes the data along. It cannot read its content.
-Running Matter on a Home Assistant Core installation is not supported.
+### Prerequisites
-## Adding Matter devices to Home Assistant
+Make sure you have all these components ready before trying to add a Matter device to Home Assistant.
-Each Matter network is called a fabric. Each home automation controller that controls Matter devices has its own "fabric". You can add devices directly to the fabric of your Home Assistant instance, or share them from another fabric (ie Google, Apple) to Home Assistant's fabric. We're going to explore all these options below.
+#### Prepare Home Assistant
-### Add a device using the iOS Companion app
+- Make sure you have the latest version of Home Assistant [installed](/installation/).
+- In Home Assistant, have the Matter integration installed.
+ - Go to {% my integrations title="**Settings** > **Devices & services**" %}.
+ - Add the **Matter (BETA)** integration.
+ - When prompted to **Select the connection method**:
+ - If you run Home Assistant OS in a regular setup: select **Submit**.
+ - This will install the official Matter server add-on.
+ - If you are already running the Matter server in another add-on, in or a custom container:
+ - Deselect the checkbox, then select **Submit**.
+ - In the next step, provide the URL to your Matter server.
-This will use the Bluetooth connection of your phone to add the device.
+#### Check logos on the device
-1. Open The Home Assistant app on your phone.
-2. Go to {% my integrations title="**Settings** > **Devices & Services**" %}.
-3. On the **Devices** tab, press the **Add device** button.
-4. Choose **Add Matter device** at the top of the list.
-5. Scan the QR-code of the Matter device with your phone camera or press **More options...** to manually enter the Commission code.
-6. Select the **Add to Home Assistant** button which will start the commissioning process which may take up to a few minutes.
-7. If you're adding a test board or beta device, you might get a prompt about an "Uncertified Accessory". In this dialog, select **Add Anyway**.
-8. Once prompted, you can enter a custom **Accessory Name**, this is just an internal reference and not visible in Home Assistant. You can type whatever you like here.
-9. Once the process is complete and you pressed the **Done** button, you are redirected to the device within Home Assistant. It is ready for use.
+- On the device packaging, check for both the Matter logo and for either the Wi-Fi or the {% term Thread %} logo.
+- Check if the QR code or the numeric setup code is on the device.
+ - If you reset your device you'll need the QR code *or* numeric setup code to {% term commission %} that device again! Without this information, commissioning won't be possible.
+ - If the QR code or the numeric setup code is only in accompanied documentation, it is good practice to snap a picture of the QR code and/or numeric setup code as a backup, ideally along with the device for reference, and store the code in a safe place.
-
+#### Prepare Android or iPhone
-### Add a device using the Android Companion app
+- Have either an Android or iPhone ready and Bluetooth enabled. For information why Bluetooth is required, refer to the section on [Bluetooth used during commissioning](#bluetooth-used-during-commissioning):
+ - Android:
+ - Have the Android version 8.1 or higher.
+ - Have the latest version of the Home Assistant Companion app, installed from the Play Store (full version).
+ - If you are using {% term Thread %}: Make sure there is a Thread border router device (Nest Hub (2nd Gen) or Nest Wi-Fi Pro) present in your home network.
+ - iPhone
+ - Have the iOS version 16 or higher
+ - Have the latest version of the Home Assistant Companion app installed.
+ - If you are using {% term Thread %}: Make sure there is a Thread border router device (HomePod Mini or V2, Apple TV 4K) present in your home network.
+- Make sure the phone is in close range of the border router and your device.
+- If you are adding a Wi-Fi-based Matter device: Matter devices often use the 2.4 GHz frequency for Wi-Fi. For this reason, make sure your phone is in the same 2.4 GHz network where you want to operate your devices.
-This will use the Bluetooth connection of your phone to add the device.
+### To add a new device using the iOS Companion app
+
+This guide describes how to add a new device. This will use the Bluetooth connection of your phone to add the device.
1. Open The Home Assistant app on your phone.
-2. Go to {% my integrations title="**Settings** > **Devices & Services**" %}.
-3. On the **Devices** tab, press the **Add device** button.
-4. Choose **Add Matter device** as the top of the list.
-5. Scan the QR-code of the Matter device with your phones camera or select the **Setup without QR-code** button to manually enter the commission code.
-6. The process will start adding the device which takes up to a few minutes.
-7. If you're adding a test board (e.g. ESP32 running the example apps) and commissioning fails, you might need to take some actions in the Google Developer console, have a look at any instructions for your test device.
-8. Once the process is complete and you pressed the **Done** button, you are redirected to the device within Home Assistant. It is ready for use.
+2. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
+3. On the **Devices** tab, select the **Add device** button, and select **Add Matter device**.
+4. In the dialog, select **No, it's new.**.
+5. Scan the QR-code of the Matter device with your phone camera or select **More options...** to manually enter the Commission code.
+6. Select **Add to Home Assistant**.
+ - This starts the commissioning process which may take a few minutes.
+7. If you're adding a test board or beta device, you might get a prompt about an **Uncertified Accessory**. In this dialog, select **Add Anyway**.
+8. If prompted, enter a custom **Accessory Name**.
+ - You can type whatever you like here.
+ - This is an internal reference for iOS. It won't be visible in Home Assistant.
+ - After entering a name, select **Continue**.
+9. Once the process is complete, select **Done**.
+ - You are now redirected to the device page within Home Assistant. It is ready for use.
+
+### To add a new device using the Android Companion app
+
+This guide describes how to add a new device. This will use the Bluetooth connection of your phone to add the device.
-
+1. Open The Home Assistant app on your phone.
+2. Power up the device by plugging it in or add a battery. Most devices will now go into pairing mode.
+ - For some devices, you need to enable a pairing mode (like you do with Z-Wave or Zigbee device).
+ - The instructions on how to set the device in pairing mode can usually be found in the device documentation.
+3. For some devices, at this point, your phone shows a pop-up, prompting you to **Scan the QR code**.
+ - Scan the QR code.
+ - When prompted to **Choose an app**, make sure to select Home Assistant.
+ - Once the process is complete, select **Done**, then select **Add device**.
+4. If you did not see a pop-up, go to {% my integrations title="**Settings** > **Devices & Services**" %}.
+ - On the **Devices** tab, select the **Add device** button, and select **Add Matter device**.
+ - In the dialog, select **No, it's new.**.
+ - Scan the QR-code of the Matter device with your phone camera or select **Setup without QR-code** to manually enter the commission code.
+ - This starts the commissioning process which may take a few minutes.
+ - If you're adding a test board (e.g. ESP32 running the example apps) and commissioning fails, you might need to take some actions in the Google Developer console, have a look at any instructions for your test device.
+ - Once the process is complete, select **Done**.
+5. To view the device details, go to {% my integrations title="**Settings** > **Devices & Services**" %} and select the **Matter** integration.
+6. By default, the device gets a factory specified name. To rename it, on the device page, select the pencil to edit and rename the device.
+ ![image](/images/integrations/matter/matter-android-rename.png)
+7. Your device is now ready to use.
+
+
+
+ Screencast showing how to add a new Matter device to Home Assistant.
+
+
+### Troubleshooting the installation
+
+Check these steps if you are experiencing issues when trying to add a Matter device using the Home Assistant Companion app on your Android phone.
+
+#### Symptom
+
+While trying to add the Matter device, I get an error stating that *Matter is currently unavailable*.
+
+#### Remedy
+
+This could mean that not all required Matter modules that are needed by the Home Assistant Companion App have been downloaded yet. Try the following steps:
+
+1. Wait up to 24 hours for the Google Play services to download the necessary Matter modules.
+2. If this did not work, try reinstalling the Home Assistant Companion app.
+3. If this did not work, try installing the Google Home app. Technically this is not required, but it might trigger another installation attempt of the Matter modules.
+4. Refer to this [Troubleshooting Guide from Google](https://developers.home.google.com/matter/verify-services).
+
+## Sharing a device from another platform with Home Assistant
+
+Use one of these methods if your Matter device was added to Apple Home or Google Home and you want to control it from both Apple or Google Home and Home Assistant.
+
+### Prerequisites
+
+- Latest version of the Home Assistant Companion App installed.
+- Have the Matter device integrated to Apple Home or Google Home respectively
+- In Home Assistant, have the Matter integration installed.
+ - Go to {% my integrations title="**Settings** > **Devices & services**" %}.
+ - Add the **Matter (BETA)** integration.
+ - When prompted to **Select the connection method**:
+ - If you run Home Assistant OS in a regular setup: select **Submit**.
+ - This will install the official Matter server add-on.
+ - If you are running the Matter server in a custom container (not recommended):
+ - Deselect the checkbox, then select **Submit**.
+ - In the next step, provide the URL to your Matter server.
+
+### To share a device from another Matter controller (like Apple or Google Home)
+
+To allow Home Assistant to control the Matter device that has already been added to another Matter controller, like Google Home, follow these steps:
+
+1. Open the Home Assistant app on your phone.
+2. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
+3. On the **Devices** tab, select the **Add device** button and select **Add Matter device**.
+4. In the dialog, select **Yes, it's already in use**, then select which controller it is already connected to. For example, Google Home.
+5. Follow the instructions given in the dialog.
+ - **Troubleshooting**: If Home Assistant fails to add the device, check if you have the Matter integration installed and the latest version of the Companion app.
+6. Once the device has been added to Home Assistant, you see a notification **Your device has been added**.
+ - When the process finishes, you're redirected to the device page in Home Assistant.
+ - You can now control your device from within Home Assistant, as well as from Google Home.
+
+
+
+ Screencast showing how to share a Matter device from Apple Home.
+
+
+### Using a Matter bridge
+
+For some ecosystems, you can add some of their non-Matter devices into Home Assistant via a *Matter bridge*. Examples of Matter bridges are the SwitchBot Hub 2, Aqara Hub M2, Ikea Dirigera, or the Philips Hue Bridge. Using a bridge allows you to keep controlling these devices via their native App, while having them available in Home Assistant at the same time. The Aquara Hub, for example, uses a cloud-based integration. By bridging it into Home Assistant via Matter (instead of using their cloud-based integration), you can make it use local communication.
-### Share a device from Apple Home
+Home Assistant, as a Matter controller, only supports **control** of Matter devices. Home Assistant is not a bridge itself and it cannot turn existing devices within Home Assistant into Matter compatible devices.
-This method will allow you to select a Matter device from Apple Home and share it to Home Assistant. The result is that the device can be controlled from both Apple Home and Home Assistant at the same time.
+#### How to add a Matter bridge to Home Assistant
-1. Find your device in Apple Home and press the jogwheel to edit it. In the page with detailed descriptions and settings for the device, scroll all the way down and press the button **Turn On Pairing Mode**.
-2. You are now given a Setup code, copy this to the clipboard.
-3. Follow the [Add a device using the iOS Companion app](#add-a-device-using-the-ios-companion-app) directions above to add the device to Home Assistant where you paste the code you just received from Apple Home.
+How you add a bridge to Home Assistant depends on the device. Check the documentation of that device for the specific steps. In case of SwitchBot Hub 2, for example, you need to enable the Matter-paring mode within the app. It then gives you a pairing code and tells you to set the actual device into pairing mode. You can then add that bridge device to Home Assistant as a Matter device. There is no guarantee that all the devices from that ecosystem can be used in Home Assistant. SwitchBot Hub 2 V1.5, for example, allows you to use curtain, lock, and blind via Matter, but not light.
-
+#### When not to use a bridge
-### Share a device from Google Home
+In some cases, bridging devices into Home Assistant via Matter might not bring you benefits. So far, The Philips Hue bridge, for example, supports Matter. But Matter only support a limited set of features. The native Home Assistant integration of Philips Hue comes with a wide variety of features. It also runs locally. You would not gain anything by adding your Philipps Hue devices to Home Assistant via Matter bridging. On the contrary, you would lose some of the features.
-This method will allow you to share a device that was added to Google Home to Home Assistant. The result is that the device can be controlled from both Google Home and Home Assistant at the same time.
+
-1. Open the device in Google Home and press the settings button (jog wheel) in the top right.
-2. Click **Linked Matter apps and services**.
-3. Press the button **Link apps and services** to link the device to Home Assistant.
-4. Choose Home Assistant from the list, you are redirected to the Home Assistant Companion app now. Press **Add device**.
-5. Your device will now be added to Home Assistant. When the process finishes, you're redirected to the device page in Home Assistant.
+## Sharing a device across platforms
-
+Follow these steps if you have added a Matter device to Home Assistant and you want to make it available in an other platform, such as Google Home or Apple Home.
+1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**.
+2. From the list of devices, select the device you want to share.
+3. Select **Share device**, then in the dialog, select **Share device** again.
+ - There is no need to press a hardware button on the device to set it to commissioning mode.
+4. To join the device to the other platform, in their app, scan the QR code or enter the sharing code.
+5. Follow the instructions in their app. Once the process is complete, you can see that the device is shared in Home Assistant:
+ - Next to the **Share device** button, select the three dots menu, then **Manage fabrics**.
+ - In the list there, the new platform should be listed.
+ - For example, if you shared it with Google Home, it lists **Google LLC**.
+ ![image](/images/integrations/matter/matter_share-device-with-other-platform.png)
+
+## Removing a device from a Matter controller
+
+Follow these steps if you want to remove a device from a particular Matter controller.
+
+1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**.
+2. From the list of devices, select the device you want to remove from a controller.
+3. In the **Device info** section, next to **Share device**, select the three-dot menu. Then, select **Manage fabrics**.
+4. From the list, remove the controller of interest.
+ - If you want to remove Apple Home, also remove the Apple Keychain entry.
+ ![image](/images/integrations/matter/matter-remove-from-network.png)
+5. If you want to remove the device from Home Assistant itself, select the three-dot menu and select **Delete**.
+
+## About Matter device information
+
+The device information section provides some diagnostic information of a device.
+
+1. To view the device details, go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**.
+2. From the list of devices, select the device you want to look at.
+
+
+
+
+
+This section provides a bit more information on some of the categories:
+
+**Network type**: Shows which network type the device belongs to. For example, Thread or Wi-Fi.
+
+**Device type**: There are 4 device types:
+
+- **End device**: End device that always keeps its radio on. Typically these devices are not battery-powered.
+- **Sleepy end device**: non-routing end device. Normally sleeping, wakes on occasion to check for messages. Typically battery-powered.
+- **Routing end device**: End device that always keeps its radio on and can route traffic for other, routing and non-routing end devices.
+- **Bridge**
+
+**Network name**: Name of the network the device joined when it was commissioned.
+
+**IP addresses**: Typically more than one IPv6 address is shown: link local, unique local, and global unicast. In some cases a device also supports IPv4. In that case there will also be listed an IPv4 address here.
## Experiment with Matter using a ESP32 dev board
You do not yet have any Matter-compatible hardware but you do like to try it out or maybe create your own DIY Matter device? We have [prepared a page for you](https://nabucasa.github.io/matter-example-apps/) where you can easily flash Matter firmware to a supported ESP32 development board. We recommend the M5 Stamp C3 device running the Lighting app.
-NOTE for Android users: You need to follow the instructions at the bottom of the page to add the test device to the Google developer console, otherwise commissioning will fail. iOS users will not have this issue but they will get a prompt during commissioning asking if you trust the development device.
+NOTE for Android users: You need to follow the instructions at the bottom of the page to add the test device to the Google developer console, otherwise {% term commissioning %} will fail. iOS users will not have this issue but they will get a prompt during {% term commissioning %} asking if you trust the development device.
1. Make sure you use Google Chrome or Microsoft Edge browser.
2. Open https://nabucasa.github.io/matter-example-apps/
@@ -180,7 +335,7 @@ NOTE for Android users: You need to follow the instructions at the bottom of the
- Using Thread-based Matter devices in Home Assistant requires Home Assistant OS version 10 and above. Not using Home Assistant OS is at your own risk. We do provide some [documentation](https://github.com/home-assistant-libs/python-matter-server/blob/main/README.md) on how to run the Matter Server as a Docker container. The documentation includes a description of the host and networking requirements.
-- To use Thread devices you will need a Thread Network with at least one Thread Border Router in your network nearby the Thread device(s). Apple users need for example the Apple TV 4K or the HomePod Mini, while Google users need a Nest Hub V2. Use the Thread integration in Home Assistant to diagnose your Thread network(s).
+- To use {% term Thread %} devices you will need a {% term Thread %} network with at least one Thread border router in your network nearby the {% term Thread %} device(s). Apple users, for example, need the Apple TV 4K or the HomePod Mini, while Google users need a Nest Hub (2nd Gen). Use the Thread integration in Home Assistant to diagnose your {% term Thread %} network(s).
- Start simple and work from there, keep your network simple and add for example an ESP32 test device. Once that works, move on to the next step or more devices.
@@ -190,7 +345,6 @@ NOTE for Android users: You need to follow the instructions at the bottom of the
- For more detailed information on network configuration, refer to the [README of the Matter server repository](https://github.com/home-assistant-libs/python-matter-server/blob/main/README.md).
-
### I do not see the button "Commission using the Companion app"
This button will only be visible within the Home Assistant Companion App (so not in the browser) and your device meets all requirements for Matter support.
@@ -207,6 +361,6 @@ Also see this [extended troubleshooting guide](https://developers.home.google.co
### Unable to commission devices, it keeps giving errors or stops working randomly
-The Matter protocol relies on (local) IPv6 and mDNS (multicast traffic) which should be able to travel freely in your network. Matter devices that use Wi-Fi (including Thread Border routers) must be on the same LAN/VLAN as Home Assistant. Matter devices that only use Thread must be joined to Thread networks for which there is at least one border router connected to the Home Assistant LAN.
+The Matter protocol relies on (local) IPv6 and mDNS (multicast traffic) which should be able to travel freely in your network. Matter devices that use Wi-Fi (including Thread border routers) must be on the same LAN/VLAN as Home Assistant. Matter devices that only use {% term Thread %} must be joined to {% term Thread %} networks for which there is at least one border router connected to the Home Assistant LAN.
-If you experience any issues with discovering devices (for example, if the initial commission keeps failing or if devices become unavailable randomly), investigate your network topology. For instance, a setting on your router or Wi-Fi access point to "optimize" multicast traffic can harm the (discovery) traffic from Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. Protocols like Matter are designed for regular residential network setups and may not integrate well with enterprise networking solutions like VLANs, Multicast filtering, and (malfunctioning) IGMP snooping. To avoid issues, try to keep your network topology as simple and flat as possible.
+If you experience any issues with discovering devices (for example, if the initial {% term commissioning %} keeps failing or if devices become unavailable randomly), investigate your network topology. For instance, a setting on your router or Wi-Fi access point to "optimize" multicast traffic can harm the (discovery) traffic from Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. Protocols like Matter are designed for regular residential network setups and may not integrate well with enterprise networking solutions like VLANs, Multicast filtering, and (malfunctioning) IGMP snooping. To avoid issues, try to keep your network topology as simple and flat as possible.
diff --git a/source/_integrations/media_extractor.markdown b/source/_integrations/media_extractor.markdown
index 9a0952f9f30a..877144db9595 100644
--- a/source/_integrations/media_extractor.markdown
+++ b/source/_integrations/media_extractor.markdown
@@ -76,3 +76,21 @@ This will download the file from the given URL.
| `entity_id` | yes | Name(s) of entities to seek media on, e.g., `media_player.living_room_chromecast`. Defaults to all. |
| `media_content_id` | no | The ID of the content to play. Platform dependent. |
| `media_content_type` | no | The type of the content to play. Must be one of MUSIC, TVSHOW, VIDEO, EPISODE, CHANNEL or PLAYLIST MUSIC. |
+
+### Extract media URL service
+
+There is also a service that will directly return the URL in the response of the service.
+
+| Service data attribute | Optional | Description |
+|-----------------------| -------- |-----------------------------------------------------------------------------------------------------------|
+| `url` | no | The URL of the media to extract. |
+| `format_query` | yes | The query that will be used to select the right media. |
+
+### Cookies
+
+Some supported video services provide a better experience when you are logged in. For example, if you use Twitch Turbo or are subscribed to a Twitch streamer, logging in prevents the video stream from showing an "An ad is currently playing. Come back after the break." message until the ad is over. Other examples are private or purchased YouTube videos which you can only watch while logged in.
+You can add a Netscape format cookie file in the Home Assistant configuration directory. The cookie file will be loaded each time a stream is loaded:
+
+```config/media_extractor/cookies.txt```
+
+To generate the cookie file, you can use a browser extension (like [Get Cookies.txt LOCALLY](https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc)). If you want to create one manually, follow this specification: [https://curl.se/rfc/cookie_spec.html](https://curl.se/rfc/cookie_spec.html).
diff --git a/source/_integrations/media_player.markdown b/source/_integrations/media_player.markdown
index 937ab1f023e5..004774224cd7 100644
--- a/source/_integrations/media_player.markdown
+++ b/source/_integrations/media_player.markdown
@@ -183,5 +183,5 @@ Allows to group media players together for synchronous playback. Only works on s
The way media players are displayed in the frontend can be modified in the [customize section](/getting-started/customizing-devices/). The following device classes are supported for media players:
- `tv`: Device is a television type device.
-- `speaker`: Device is speaker or stereo type device.
-- `receiver`: Device is audio video receiver type device taking audio and outputting to speakers and video to some display.
+- `speaker`: Device is a speaker or stereo type device.
+- `receiver`: Device is an audio/video receiver type device taking audio and outputting to speakers and video to displays.
diff --git a/source/_integrations/media_source.markdown b/source/_integrations/media_source.markdown
index 5da8c87175d6..e00c857c5815 100644
--- a/source/_integrations/media_source.markdown
+++ b/source/_integrations/media_source.markdown
@@ -64,7 +64,7 @@ homeassistant:
- If you want to use media from a network storage, the network storage must first be connected first. Refer to [these instructions on how to connect network storage](/common-tasks/os/#network-storage).
+ If you want to use media from a network storage, the network storage must be connected first. Refer to [these instructions on how to connect network storage](/common-tasks/os/#network-storage).
The media from the network storage is then automatically added to the local media browser.
@@ -99,4 +99,4 @@ data:
media_content_id: "media-source://media_source/local/videos/favourites/Epic Sax Guy 10 Hours.mp4"
```
-[basic-configuration]: /docs/configuration/basic/#media_dirs
+[basic-configuration]: /integrations/homeassistant/#media_dirs
\ No newline at end of file
diff --git a/source/_integrations/melcloud.markdown b/source/_integrations/melcloud.markdown
index 21ea026aff35..97ab553a1722 100644
--- a/source/_integrations/melcloud.markdown
+++ b/source/_integrations/melcloud.markdown
@@ -6,8 +6,6 @@ ha_category:
ha_release: 0.106
ha_iot_class: Cloud Polling
ha_config_flow: true
-ha_codeowners:
- - '@vilppuvuorinen'
ha_domain: melcloud
ha_platforms:
- climate
diff --git a/source/_integrations/meteoalarm.markdown b/source/_integrations/meteoalarm.markdown
index d2fd72d55f76..10e8a2e4a6c4 100644
--- a/source/_integrations/meteoalarm.markdown
+++ b/source/_integrations/meteoalarm.markdown
@@ -94,7 +94,7 @@ automation:
trigger:
platform: state
entity_id: binary_sensor.meteoalarm
- from: ‘off’
+ from: 'off'
action:
- service: notify.notify
data:
diff --git a/source/_integrations/microbees.markdown b/source/_integrations/microbees.markdown
new file mode 100644
index 000000000000..28f0763db0e3
--- /dev/null
+++ b/source/_integrations/microbees.markdown
@@ -0,0 +1,41 @@
+---
+title: microBees
+description: Instructions on how to integrate microBees devices into Home Assistant.
+ha_category:
+ - Button
+ - Cover
+ - Light
+ - Sensor
+ - Switch
+ha_release: 2024.3
+ha_codeowners:
+ - '@microBeesTech'
+ha_config_flow: true
+ha_domain: microbees
+ha_iot_class: Cloud Polling
+ha_platforms:
+ - binary_sensor
+ - button
+ - cover
+ - light
+ - sensor
+ - switch
+ha_integration_type: integration
+---
+
+The microbees integration allows you to control your [microBees devices](https://www.microbees.com/) such as plugs and wall switches.
+To use this integration you need OAuth2 Client ID and Client Secret and your user credentials.
+
+To retrieve the OAuth2 Client ID and Client Secret go to [microBees Developer Dashboard](https://developers.microbees.com/dashboard), login with your microBees account and [create a new app](https://developers.microbees.com/dashboard/?p=wizard), choose a Label for your App, select WebApplication and input https://my.home-assistant.io as Website URL.
+
+There is currently support for the following device types within Home Assistant:
+- **Switch**
+- **Cover**
+- **Binary sensors**
+- **Button**
+- **Light**
+- **Sensor**
+
+Note: The cover status will be unknown
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/minio.markdown b/source/_integrations/minio.markdown
index 7ac507c75803..20ae31afb3f1 100644
--- a/source/_integrations/minio.markdown
+++ b/source/_integrations/minio.markdown
@@ -14,7 +14,7 @@ ha_integration_type: integration
This integration adds interaction with [Minio](https://min.io).
It also enables listening for bucket notifications: [see documentation](https://docs.min.io/docs/minio-client-complete-guide.html#watch)
-To download or upload files, folders must be added to [allowlist_external_dirs](/docs/configuration/basic/).
+To download or upload files, folders must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs).
## Configuration
@@ -133,27 +133,27 @@ These services are provided:
Download file.
-| Service data attribute | Required | Description |
-|---------------------------|----------|---------------------------------------------------|
-| `bucket` | yes | Bucket to use |
-| `key` | yes | Object key of the file |
-| `file_path` | yes | File path on the local file system |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ---------------------------------- |
+| `bucket` | yes | Bucket to use |
+| `key` | yes | Object key of the file |
+| `file_path` | yes | File path on the local file system |
### Service `minio.put`
Upload file.
-| Service data attribute | Required | Description |
-|---------------------------|----------|---------------------------------------------------|
-| `bucket` | yes | Bucket to use |
-| `key` | yes | Object key of the file |
-| `file_path` | yes | File path on the local file system |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ---------------------------------- |
+| `bucket` | yes | Bucket to use |
+| `key` | yes | Object key of the file |
+| `file_path` | yes | File path on the local file system |
### Service `minio.remove`
Delete file.
-| Service data attribute | Required | Description |
-|---------------------------|----------|---------------------------------------------------|
-| `bucket` | yes | Bucket to use |
-| `key` | yes | Object key of the file |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ---------------------- |
+| `bucket` | yes | Bucket to use |
+| `key` | yes | Object key of the file |
diff --git a/source/_integrations/mobile_app.markdown b/source/_integrations/mobile_app.markdown
index 69e66ad95b94..5d17fa4ee44e 100644
--- a/source/_integrations/mobile_app.markdown
+++ b/source/_integrations/mobile_app.markdown
@@ -36,7 +36,9 @@ mobile_app:
## Apps that use Mobile App
- [Home Assistant for iOS](https://apps.apple.com/us/app/home-assistant/id1099568401?ls=1) (official)
+ - [Beta release](https://testflight.apple.com/join/1AlPbnLZ) (Testflight)
- [Home Assistant for Android](https://play.google.com/store/apps/details?id=io.homeassistant.companion.android) (official)
+ - [Beta release](https://play.google.com/apps/testing/io.homeassistant.companion.android)
## Mobile App Documentation
diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown
index 000eeba1d1fb..0fc5fae1bced 100644
--- a/source/_integrations/modbus.markdown
+++ b/source/_integrations/modbus.markdown
@@ -16,7 +16,7 @@ ha_platforms:
- light
- sensor
- switch
-ha_quality_scale: gold
+ha_quality_scale: platinum
ha_integration_type: integration
---
@@ -52,11 +52,6 @@ name:
description: "Name of this hub. Must be unique."
required: true
type: string
-retries:
- description: "Number of times to retry a request."
- required: false
- default: 3
- type: integer
timeout:
description: "Timeout while waiting for a response in seconds."
required: false
@@ -117,7 +112,6 @@ modbus:
delay: 0
message_wait_milliseconds: 30
- retries: 3
timeout: 5
```
@@ -164,7 +158,6 @@ modbus:
delay: 0
message_wait_milliseconds: 30
- retries: 3
timeout: 5
```
@@ -207,7 +200,6 @@ modbus:
delay: 0
message_wait_milliseconds: 30
- retries: 3
timeout: 5
```
@@ -302,7 +294,6 @@ modbus:
delay: 0
message_wait_milliseconds: 30
- retries: 3
timeout: 5
```
@@ -348,10 +339,12 @@ modbus:
modbus entities are grouped below each modbus communication entry.
-All modbus entities have the following parameters:
+**REMARK** Each modbus device must have at least 1 entity defined, otherwise the integration will not be loaded.
Please refer to [Parameter usage](#parameters-usage-matrix) for conflicting parameters.
+All modbus entities have the following parameters:
+
{% configuration %}
address:
description: "Address of coil/register."
@@ -364,8 +357,8 @@ name:
scan_interval:
description: "Update interval in seconds.
scan_interval = 0 for no polling.
- Entities are unavailable until the first scan interval is passed,
- except for entities with scan_interval = 0, which are read at startup and not updated."
+ Entities are read shortly after startup and then according to scan_interval.
+ Remark, when restarting HA the last known value is restored."
required: false
type: integer
default: 15
@@ -632,9 +625,9 @@ climates:
type: map
keys:
address:
- description: "Address of Fan mode register."
+ description: "Address of Fan mode register. (int to call write_register, list of 1 int to call write_registers)"
required: true
- type: integer
+ type: [integer, list]
values:
description: "Mapping between the register values and Fan modes
This is typically used to control one of: Speed, Direction or On/Off state."
@@ -689,6 +682,40 @@ climates:
value 1 is written."
required: false
type: integer
+ swing_mode_register:
+ description: "Configuration of the register for swing mode"
+ required: false
+ type: map
+ keys:
+ address:
+ description: "Address of swing mode register. (int to call write_register, list of 1 int to call write_registers). - Reading done through holding register"
+ required: true
+ type: [integer, list]
+ values:
+ description: "Mapping between the register values and swing modes"
+ required: true
+ type: map
+ keys:
+ swing_mode_state_on:
+ description: "Value corresponding to swing mode on."
+ required: false
+ type: integer
+ swing_mode_state_off:
+ description: "Value corresponding to swing mode off."
+ required: false
+ type: integer
+ swing_mode_state_horizontal:
+ description: "Value corresponding to swing mode horizontal."
+ required: false
+ type: integer
+ swing_mode_state_vertical:
+ description: "Value corresponding to swing mode vertical."
+ required: false
+ type: integer
+ swing_mode_state_both:
+ description: "Value corresponding to Swing mode both."
+ required: false
+ type: integer
input_type:
description: Modbus register type for current temperature.
required: false
@@ -744,9 +771,9 @@ climates:
word_byte:
description: "Swap word ABCD -> DCBA, **not valid with data types: `int16`, `uint16`**"
target_temp_register:
- description: "Register address for target temperature (Setpoint)."
+ description: "Register address for target temperature (Setpoint). Using a list, it is possible to define one register for each of the available HVAC Modes. The list has to have a fixed size of 7 registers corresponding to the 7 available HVAC Modes, as follows: Register **1: HVAC AUTO mode**; Register **2: HVAC Cool mode**; Register **3: HVAC Dry mode**; Register **4: HVAC Fan only mode**; Register **5: HVAC Heat mode**; Register **6: HVAC Heat Cool mode**; Register **7: HVAC OFF mode**. It is possible to set duplicated values for the modes where the devices has not a related register."
required: true
- type: integer
+ type: [integer, list]
target_temp_write_registers:
description: "If `true` use `write_registers` for target temperature."
required: false
diff --git a/source/_integrations/modem_callerid.markdown b/source/_integrations/modem_callerid.markdown
index 75fcb2484399..a49a8b97ae36 100644
--- a/source/_integrations/modem_callerid.markdown
+++ b/source/_integrations/modem_callerid.markdown
@@ -23,6 +23,14 @@ This integration also offers a button to pick up and then hang up the call to pr
{% include integrations/config_flow.md %}
+## Compatibility
+
+Reported models with this integration include that work:
+- [StarTech.com USB56KEMH2](https://www.startech.com/en-us/networking-io/usb56kemh2)
+
+Devices that did not work:
+- [StarTech.com USB56KEM3](https://www.startech.com/en-us/networking-io/usb56kem3)
+
## Examples
An example automation:
diff --git a/source/_integrations/moehlenhoff_alpha2.markdown b/source/_integrations/moehlenhoff_alpha2.markdown
index 1e3f70951c86..41b3830773b6 100644
--- a/source/_integrations/moehlenhoff_alpha2.markdown
+++ b/source/_integrations/moehlenhoff_alpha2.markdown
@@ -17,8 +17,8 @@ ha_platforms:
ha_integration_type: integration
---
-The Möhlenhoff Alpha 2 integration allows you to control a
-[Möhlenhoff Alpha 2](https://www.moehlenhoff.de/fileadmin/user_upload/Download/Broschueren/125297_1705_Broschuere_Alpha2_DEU_final_web.pdf)
+The Möhlenhoff Alpha 2 integration allows you to control a [Möhlenhoff Alpha 2](https://dev.moehlenhoff.de/en/products/room-by-room-control/oem-alpha-2-system)
+
temperature control system.
## Prerequisites
diff --git a/source/_integrations/mopeka.markdown b/source/_integrations/mopeka.markdown
index 67f3ee8a637b..829ff21b1bda 100644
--- a/source/_integrations/mopeka.markdown
+++ b/source/_integrations/mopeka.markdown
@@ -23,5 +23,13 @@ The Mopeka integration will automatically discover devices once the [Bluetooth](
## Supported devices
+The integration only supports measuring LPG (Liquefied petroleum gas). Other substances will produce incorrect readings.
+
- [Pro Plus](https://www.mopekaiot.com/product/mopeka-pro-plus-sensor) (M1015)
- [Pro Check](https://www.mopekaiot.com/product/mopeka-pro-check-sensor-aluminum-lpg-cylinders-w-collar) (M1017)
+- Pro-200
+- [Pro H2O](https://www.mopekaiot.com/product/mopeka-pro-check-water-sensor-bottom-mount-w-collar)
+- [Lippert BottleCheck](https://store.lci1.com/lippert-propane-tank-sensor-2021130655)
+- [TD40](https://www.mopekaiot.com/product/mopeka-td40)
+- TD200
+- [Pro Check Universal](https://www.mopekaiot.com/procheckuniversal)
diff --git a/source/_integrations/motion_blinds.markdown b/source/_integrations/motion_blinds.markdown
index f848ec71cf6d..d3ed8636fcb4 100644
--- a/source/_integrations/motion_blinds.markdown
+++ b/source/_integrations/motion_blinds.markdown
@@ -1,6 +1,6 @@
---
-title: Motion Blinds
-description: Instructions on how to integrate Motion Blinds from Coulisse B.V. into Home Assistant.
+title: Motionblinds
+description: Instructions on how to integrate Motionblinds from Coulisse B.V. into Home Assistant.
ha_category:
- Cover
ha_iot_class: Local Push
@@ -16,10 +16,11 @@ ha_dhcp: true
ha_integration_type: integration
---
-The integration allows you to control [Motion Blinds](https://motionblinds.com/) from [Coulisse B.V.](https://coulisse.com/).
+The integration allows you to control [Motionblinds](https://motionblinds.com/) from [Coulisse B.V.](https://coulisse.com/).
Additionally the following brands have been reported to also work with this integration:
+- [Acomax](https://www.acomax.de/)
- [AMP Motorization](https://www.ampmotorization.com/)
- [Bliss Automation - Alta Window Fashions](https://www.altawindowfashions.com/product/automation/bliss-automation/)
- [Bloc Blinds](https://www.blocblinds.com/)
@@ -32,24 +33,27 @@ Additionally the following brands have been reported to also work with this inte
- [Hurrican Shutters Wholesale](https://www.hurricaneshutterswholesale.com/)
- [Inspired Shades](https://www.inspired-shades.com/)
- [iSmartWindow](https://www.ismartwindow.co.nz/)
+- [Krispol](https://krispol.eu/en/drives/)
- [Madeco](https://www.madeco.fr/)
- [Martec](https://www.martec.co.nz/)
-- [Motion Blinds](https://motionblinds.com/)
+- [Motionblinds](https://motionblinds.com/)
- [Raven Rock MFG](https://www.ravenrockmfg.com/)
- [ScreenAway](https://www.screenaway.com.au/)
-- [Smart Blinds](https://www.smartblinds.nl/)
+- [Smartblinds](https://www.smartblinds.nl/)
- [Smart Home](https://www.smart-home.hu)
- [Uprise Smart Shades](http://uprisesmartshades.com)
This integration allows for both directly controlling blinds that support wifi-connection and controlling Uni- and Bi-direction blinds that connect to a 433MHz WiFi bridge.
The following bridges are reported to work with this integration:
- - CM-20 Motion Blinds bridge
- - CMD-01 Motion Blinds mini-bridge
- - DD7002B Connector bridge
- - D1554 Connector mini-bridge
- - DD7002B Brel-Home box
- - D1554 Brel Home USB plug
- - Brel HUB-03
+
+- CM-20 Motionblinds bridge
+- CMD-01 Motionblinds mini-bridge
+- DD7002B Connector bridge
+- D1554 Connector mini-bridge
+- DD7002B Brel-Home box
+- D1554 Brel Home USB plug
+- Brel HUB-03
+- Acomax FX-I 620 Bridge Maxi
{% include integrations/config_flow.md %}
@@ -58,9 +62,9 @@ The following bridges are reported to work with this integration:
The 16 character API key needed to setup the Home Assistant integration needs to be retrieved by first connecting the blind/bridge to the official app of its respective brand.
In that app the key can often be found by clicking multiple times on specific places on the "About" page.
-### Motion blinds app
+### Motionblinds app
-The Motion Blinds API uses a 16 character key that can be retrieved from the official "Motion Blinds" app for [IOS](https://apps.apple.com/us/app/motion-blinds/id1437234324) or [Android](https://play.google.com/store/apps/details?id=com.coulisse.motion).
+The Motionblinds API uses a 16 character key that can be retrieved from the official "Motionblinds" app for [IOS](https://apps.apple.com/us/app/motion-blinds/id1437234324) or [Android](https://play.google.com/store/apps/details?id=com.coulisse.motion).
Open the app, click the 3 dots in the top right corner, go to "settings", go to "Motion APP About", Please quickly tap this "Motion APP About" page 5 times, a popup will appear that gives you the key.
@@ -81,6 +85,7 @@ In the Brel Home app on Android go to the `me` page (home screen 4th tab), tap 5
In the official Bloc Blinds app go to settings (three bars > gear icon), go to the `About` page, Tap five time on the bloc blinds icon in the middle and a pop-up with the key will be shown.
### Connector app
+
Click the about page of the connector app 5 times to get the key ([iOS app](https://apps.apple.com/us/app/connector/id1344058317), [Android app](https://play.google.com/store/apps/details?id=com.smarthome.app.connector)).
## Top Down Bottom Up (TDBU) blinds
@@ -140,10 +145,10 @@ For tilt capable blinds a new position and tilt can be specified and the blind w
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------- |
-| `entity_id` | yes | Name of the motion blind cover entity to control. For example `cover.TopDownBottomUp-Bottom-0001` |
-| `absolute_position` | no | Absolute position to move to. For example 70 |
-| `tilt_position` | yes | Tilt position to move to. For example 50 |
-| `width` | yes | Optionally specify the width that is covered, only for TDBU Combined entities. For example 30 |
+| `entity_id` | yes | Name of the Motionblinds cover entity to control. For example `cover.TopDownBottomUp-Bottom-0001` |
+| `absolute_position` | no | Absolute position to move to. For example 70 |
+| `tilt_position` | yes | Tilt position to move to. For example 50 |
+| `width` | yes | Optionally specify the width that is covered, only for TDBU Combined entities. For example 30 |
## Troubleshooting
@@ -174,18 +179,19 @@ For Ubiquiti routers/access points the "Enable multicast enhancement (IGMPv3)" s
### Bypassing UDP multicast
If UDP Multicast does not work in your setup (due to network limitations), this integration can be used in local polling mode.
-Go to Settings -> Integrations -> on the already set up Motion Blinds integration click "configure" --> disable the "Wait for multicast push on update" option (disabled by default).
+Go to Settings -> Integrations -> on the already set up Motionblinds integration click "configure" --> disable the "Wait for multicast push on update" option (disabled by default).
-The default update interval of the Motion Blinds integration is every 10 minutes. When UDP multicast pushes do not work, this polling interval can be a bit high.
+The default update interval of the Motionblinds integration is every 10 minutes. When UDP multicast pushes do not work, this polling interval can be a bit high.
To increase the polling interval:
-Go to Settings -> Integrations -> on the already set up Motion Blinds integration click more options (three dots) and select "System options" -> disable "polling for updates".
+Go to Settings -> Integrations -> on the already set up Motionblinds integration click more options (three dots) and select "System options" -> disable "polling for updates".
Now create an automation with as trigger a time pattern and select your desired polling time.
-As the action select "Call service" and select "Update entity", select one of the motion blinds covers as entity.
-You only have to create one automation with only one motion blind cover as entity, the rest will update at the same time.
+As the action select "Call service" and select "Update entity", select one of the Motionblinds covers as entity.
+You only have to create one automation with only one Motionblinds cover as entity, the rest will update at the same time.
Example YAML automation for custom polling interval (every minute):
+
```yaml
-alias: Motion blinds polling automation
+alias: Motionblinds polling automation
mode: single
trigger:
- platform: time_pattern
diff --git a/source/_integrations/motionblinds_ble.markdown b/source/_integrations/motionblinds_ble.markdown
new file mode 100644
index 000000000000..aee84394c9f6
--- /dev/null
+++ b/source/_integrations/motionblinds_ble.markdown
@@ -0,0 +1,66 @@
+---
+title: Motionblinds Bluetooth
+description: Instructions on how to integrate Motionblinds Bluetooth motors into Home Assistant.
+ha_category:
+ - Cover
+ha_iot_class: Assumed State
+ha_release: 2024.4
+ha_domain: motionblinds_ble
+ha_codeowners:
+ - '@LennP'
+ - '@jerrybboy'
+ha_config_flow: true
+ha_platforms:
+ - button
+ - cover
+ - select
+ha_integration_type: device
+---
+
+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 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.
+- **Roman blind**: has the ability to change position and speed.
+- **Venetian blind**: has the ability to change position, tilt, and speed.
+- **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 must be done using the Motionblinds Bluetooth app.
+
+## Entities
+
+The following entities are available for a Motionblinds Bluetooth device:
+
+- [Cover](https://www.home-assistant.io/integrations/cover/) entity: depending on the blind that was chosen during the setup, this entity has a slider that makes it possible to change position and tilt, and buttons that allow you to open the blind, close the blind, tilt it open, tilt it closed and stop it.
+- [Button](https://www.home-assistant.io/integrations/button/) entities:
+ - Connect button: allows you to connect to the blind.
+ - 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 curtain blinds and vertical blinds.
+
+## Services
+
+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 its state in Home Assistant:
+
+```yaml
+alias: Motionblinds Bluetooth polling automation
+mode: single
+trigger:
+ - platform: time_pattern
+ hours: "/24"
+action:
+ - service: homeassistant.update_entity
+ target:
+ entity_id: cover.motion_shade
+```
diff --git a/source/_integrations/motionmount.md b/source/_integrations/motionmount.md
index 5935dcb8c474..444ab6553160 100644
--- a/source/_integrations/motionmount.md
+++ b/source/_integrations/motionmount.md
@@ -3,11 +3,17 @@ title: Vogel's MotionMount
description: Instructions on how to integrate Vogel's MotionMount into Home Assistant.
ha_category:
- Number
+ - Select
+ - Binary sensor
+ - Sensor
ha_release: 2024.1
ha_iot_class: Local Push
ha_config_flow: true
ha_platforms:
- number
+ - select
+ - binary_sensor
+ - sensor
ha_codeowners:
- '@RJPoelstra'
ha_domain: motionmount
diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown
index 3680e4fcffa3..9cf7a2036f82 100644
--- a/source/_integrations/mqtt.markdown
+++ b/source/_integrations/mqtt.markdown
@@ -11,6 +11,7 @@ ha_config_flow: true
ha_codeowners:
- '@emontnemery'
- '@jbouwh'
+ - '@bdraco'
ha_domain: mqtt
ha_platforms:
- alarm_control_panel
@@ -25,8 +26,10 @@ ha_platforms:
- fan
- humidifier
- image
+ - lawn_mower
- light
- lock
+ - notify
- number
- scene
- select
@@ -34,26 +37,91 @@ ha_platforms:
- siren
- switch
- tag
+ - tag
- text
- update
- vacuum
- valve
- water_heater
ha_integration_type: integration
-ha_quality_scale: gold
+ha_quality_scale: platinum
---
MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things" connectivity protocol on top of TCP/IP. It allows extremely lightweight publish/subscribe messaging transport.
{% include integrations/config_flow.md %}
-Your first step to get MQTT and Home Assistant working is to choose a broker.
+
+{% details "Configuration of MQTT components via MQTT discovery" %}
+
+- [Alarm control panel](/integrations/alarm_control_panel.mqtt/)
+- [Binary sensor](/integrations/binary_sensor.mqtt/)
+- [Button](/integrations/button.mqtt/)
+- [Camera](/integrations/camera.mqtt/)
+- [Cover](/integrations/cover.mqtt/)
+- [Device tracker](/integrations/device_tracker.mqtt/)
+- [Device trigger](/integrations/device_trigger.mqtt/)
+- [Event](/integrations/event.mqtt/)
+- [Fan](/integrations/fan.mqtt/)
+- [Humidifier](/integrations/humidifier.mqtt/)
+- [Image](/integrations/image.mqtt/)
+- [Climate/HVAC](/integrations/climate.mqtt/)
+- [Lawn mower](/integrations/lawn_mower.mqtt/)
+- [Light](/integrations/light.mqtt/)
+- [Lock](/integrations/lock.mqtt/)
+- [Notify](/integrations/notify.mqtt/)
+- [Number](/integrations/number.mqtt/)
+- [Scene](/integrations/scene.mqtt/)
+- [Select](/integrations/select.mqtt/)
+- [Sensor](/integrations/sensor.mqtt/)
+- [Siren](/integrations/siren.mqtt/)
+- [Switch](/integrations/switch.mqtt/)
+- [Update](/integrations/update.mqtt/)
+- [Tag scanner](/integrations/tag.mqtt/)
+- [Text](/integrations/text.mqtt/)
+- [Vacuum](/integrations/vacuum.mqtt/)
+- [Valve](/integrations/valve.mqtt/)
+- [Water heater](/integrations/water_heater.mqtt/)
+
+{% enddetails %}
+
+
+{% details "Configuration of MQTT components via YAML" %}
+
+- [Alarm control panel](/integrations/alarm_control_panel.mqtt/)
+- [Binary sensor](/integrations/binary_sensor.mqtt/)
+- [Button](/integrations/button.mqtt/)
+- [Camera](/integrations/camera.mqtt/)
+- [Cover](/integrations/cover.mqtt/)
+- [Device tracker](/integrations/device_tracker.mqtt/)
+- [Event](/integrations/event.mqtt/)
+- [Fan](/integrations/fan.mqtt/)
+- [Humidifier](/integrations/humidifier.mqtt/)
+- [Image](/integrations/image.mqtt/)
+- [Climate/HVACs](/integrations/climate.mqtt/)
+- [Lawn mower](/integrations/lawn_mower.mqtt/)
+- [Light](/integrations/light.mqtt/)
+- [Lock](/integrations/lock.mqtt/)
+- [Notify](/integrations/notify.mqtt/)
+- [Number](/integrations/number.mqtt/)
+- [Scene](/integrations/scene.mqtt/)
+- [Select](/integrations/select.mqtt/)
+- [Sensor](/integrations/sensor.mqtt/)
+- [Siren](/integrations/siren.mqtt/)
+- [Switch](/integrations/switch.mqtt/)
+- [Text](/integrations/text.mqtt/)
+- [Update](/integrations/update.mqtt/)
+- [Vacuum](/integrations/vacuum.mqtt/)
+- [Valve](/integrations/valve.mqtt/)
+- [Water heater](/integrations/water_heater.mqtt/)
-## Choose an MQTT broker
+{% enddetails %}
+
+Your first step to get MQTT and Home Assistant working is to choose a broker.
-### Run your own
+## Setting up a broker
-The most private option is running your own MQTT broker.
+While public MQTT brokers are available, the easiest and most private option is running your own.
The recommended setup method is to use the [Mosquitto MQTT broker add-on](https://github.com/home-assistant/hassio-addons/blob/master/mosquitto/DOCS.md).
@@ -64,10 +132,6 @@ There are [at least two](https://issues.apache.org/jira/browse/AMQ-6360) [issues
-### Use a public broker
-
-The Mosquitto project runs a [public broker](https://test.mosquitto.org). This is the easiest to set up, but there is no privacy as all messages are public. Use this only for testing purposes and not for real tracking of your devices or controlling your home. To use the public mosquitto broker, configure the MQTT integration to connect to broker `test.mosquitto.org` on port 1883 or 8883.
-
## Broker configuration
MQTT broker settings are configured when the MQTT integration is first set up and can be changed later if needed.
@@ -79,9 +143,12 @@ Add the MQTT integration, then provide your broker's hostname (or IP address) an
3. Select **Configure**, then **Re-configure MQTT**.
+
If you experience an error message like `Failed to connect due to exception: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed`, then turn on `Advanced options` and set [Broker certificate validation](/integrations/mqtt/#broker-certificate-validation) to `Auto`.
+
+
### Advanced broker configuration
@@ -111,14 +178,14 @@ If the server certificate does not match the hostname then validation will fail.
The MQTT protocol setting defaults to version `3.1.1`. If your MQTT broker supports MQTT version 5 you can set the protocol setting to `5`.
-#### Securing the the connection
+#### Securing the connection
With a secure broker connection it is possible to use a client certificate for authentication. To set the client certificate and private key turn on the option `Use a client certificate` and click "Next" to show the controls to upload the files. Only a PEM encoded client certificates together with a PEM encoded private key can be uploaded. Make sure the private key has no password set.
#### Using WebSockets as transport
You can select `websockets` as transport method if your MQTT broker supports it. When you select `websockets` and click `NEXT`, you will be able to add a WebSockets path (default = `/`) and WebSockets headers (optional). The target WebSockets URI: `ws://{broker}:{port}{WebSockets path}` is built with `broker`, `port` and `ws_path` (WebSocket path) settings.
-To configure the WebSocketS headers supply a valid JSON dictionary string. E.g. `{ "Authorization": "token" , "x-header": "some header"}`. The default transport method is `tcp`. The WebSockets transport can be secured using TLS and optionally using user credentials or a client certificate.
+To configure the WebSocket's headers supply a valid JSON dictionary string. E.g. `{ "Authorization": "token" , "x-header": "some header"}`. The default transport method is `tcp`. The WebSockets transport can be secured using TLS and optionally using user credentials or a client certificate.
@@ -214,40 +281,14 @@ Note that on each MQTT entity, the `has_entity_name` attribute will be set to `T
The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. The configuration is done on the device itself and the topic used by the device. Similar to the [HTTP binary sensor](/integrations/http/#binary-sensor) and the [HTTP sensor](/integrations/http/#sensor). To prevent multiple identical entries if a device reconnects, a unique identifier is necessary. Two parts are required on the device side: The configuration topic which contains the necessary device type and unique identifier, and the remaining device configuration without the device type.
-{% details "Entity integrations supported by MQTT discovery" %}
+MQTT discovery is enabled by default, but can be disabled. The prefix for the discovery topic (default `homeassistant`) can be changed.
+See the [MQTT Options sections](#configure-mqtt-options)
-- [Alarm control panel](/integrations/alarm_control_panel.mqtt/)
-- [Binary sensor](/integrations/binary_sensor.mqtt/)
-- [Button](/integrations/button.mqtt/)
-- [Camera](/integrations/camera.mqtt/)
-- [Cover](/integrations/cover.mqtt/)
-- [Device tracker](/integrations/device_tracker.mqtt/)
-- [Device trigger](/integrations/device_trigger.mqtt/)
-- [Event](/integrations/event.mqtt/)
-- [Fan](/integrations/fan.mqtt/)
-- [Humidifier](/integrations/humidifier.mqtt/)
-- [Image](/integrations/image.mqtt/)
-- [Climate/HVAC](/integrations/climate.mqtt/)
-- [Lawn mower](/integrations/lawn_mower.mqtt/)
-- [Light](/integrations/light.mqtt/)
-- [Lock](/integrations/lock.mqtt/)
-- [Number](/integrations/number.mqtt/)
-- [Scene](/integrations/scene.mqtt/)
-- [Select](/integrations/select.mqtt/)
-- [Sensor](/integrations/sensor.mqtt/)
-- [Siren](/integrations/siren.mqtt/)
-- [Switch](/integrations/switch.mqtt/)
-- [Update](/integrations/update.mqtt/)
-- [Tag scanner](/integrations/tag.mqtt/)
-- [Text](/integrations/text.mqtt/)
-- [Vacuum](/integrations/vacuum.mqtt/)
-- [Valve](/integrations/valve.mqtt/)
-- [Water heater](/integrations/water_heater.mqtt/)
+
-{% enddetails %}
+Documentation on the MQTT components that support MQTT discovery [can be found here](/integrations/mqtt/#configuration-via-mqtt-discovery).
-MQTT discovery is enabled by default, but can be disabled. The prefix for the discovery topic (default `homeassistant`) can be changed.
-See the [MQTT Options sections](#configure-mqtt-options)
+
### Discovery messages
@@ -290,7 +331,6 @@ support_url:
description: Support URL of the application that supplies the discovered MQTT item.
{% endconfiguration_basic %}
-
{% details "Supported abbreviations" %}
```txt
@@ -298,16 +338,16 @@ support_url:
'act_tpl': 'action_template',
'atype': 'automation_type',
'aux_cmd_t': 'aux_command_topic',
- 'aux_stat_tpl': 'aux_state_template',
'aux_stat_t': 'aux_state_topic',
+ 'aux_stat_tpl': 'aux_state_template',
'av_tones': 'available_tones',
'avty': 'availability',
'avty_mode': 'availability_mode',
'avty_t': 'availability_topic',
'avty_tpl': 'availability_template',
'away_mode_cmd_t': 'away_mode_command_topic',
- 'away_mode_stat_tpl': 'away_mode_state_template',
'away_mode_stat_t': 'away_mode_state_topic',
+ 'away_mode_stat_tpl': 'away_mode_state_template',
'b_tpl': 'blue_template',
'bri_cmd_t': 'brightness_command_topic',
'bri_cmd_tpl': 'brightness_command_template',
@@ -316,10 +356,6 @@ support_url:
'bri_tpl': 'brightness_template',
'bri_val_tpl': 'brightness_value_template',
'clr_temp_cmd_tpl': 'color_temp_command_template',
- 'bat_lev_t': 'battery_level_topic',
- 'bat_lev_tpl': 'battery_level_template',
- 'chrg_t': 'charging_topic',
- 'chrg_tpl': 'charging_template',
'clr_temp_cmd_t': 'color_temp_command_topic',
'clr_temp_stat_t': 'color_temp_state_topic',
'clr_temp_tpl': 'color_temp_template',
@@ -327,8 +363,6 @@ support_url:
'clrm': 'color_mode',
'clrm_stat_t': 'color_mode_state_topic',
'clrm_val_tpl': 'color_mode_value_template',
- 'cln_t': 'cleaning_topic',
- 'cln_tpl': 'cleaning_template',
'cmd_off_tpl': 'command_off_template',
'cmd_on_tpl': 'command_on_template',
'cmd_t': 'command_topic',
@@ -345,17 +379,12 @@ support_url:
'dir_cmd_tpl': 'direction_command_template',
'dir_stat_t': 'direction_state_topic',
'dir_val_tpl': 'direction_value_template',
- 'dock_t': 'docked_topic',
- 'dock_tpl': 'docked_template',
'e': 'encoding',
'en': 'enabled_by_default',
'ent_cat': 'entity_category',
'ent_pic': 'entity_picture',
- 'err_t': 'error_topic',
- 'err_tpl': 'error_template',
'evt_typ': 'event_types',
- 'fanspd_t': 'fan_speed_topic',
- 'fanspd_tpl': 'fan_speed_template',
+ 'exp_aft': 'expire_after',
'fanspd_lst': 'fan_speed_list',
'flsh_tlng': 'flash_time_long',
'flsh_tsht': 'flash_time_short',
@@ -365,11 +394,10 @@ support_url:
'fx_stat_t': 'effect_state_topic',
'fx_tpl': 'effect_template',
'fx_val_tpl': 'effect_value_template',
- 'exp_aft': 'expire_after',
- 'fan_mode_cmd_tpl': 'fan_mode_command_template',
'fan_mode_cmd_t': 'fan_mode_command_topic',
- 'fan_mode_stat_tpl': 'fan_mode_state_template',
+ 'fan_mode_cmd_tpl': 'fan_mode_command_template',
'fan_mode_stat_t': 'fan_mode_state_topic',
+ 'fan_mode_stat_tpl': 'fan_mode_state_template',
'frc_upd': 'force_update',
'g_tpl': 'green_template',
'hs_cmd_t': 'hs_command_topic',
@@ -392,18 +420,18 @@ support_url:
'lrst_t': 'last_reset_topic',
'lrst_val_tpl': 'last_reset_value_template',
'max': 'max',
- 'min': 'min',
+ 'max_hum': 'max_humidity',
'max_mirs': 'max_mireds',
- 'min_mirs': 'min_mireds',
'max_temp': 'max_temp',
- 'min_temp': 'min_temp',
- 'max_hum': 'max_humidity',
+ 'min': 'min',
'min_hum': 'min_humidity',
+ 'min_mirs': 'min_mireds',
+ 'min_temp': 'min_temp',
'mode': 'mode',
- 'mode_cmd_tpl': 'mode_command_template',
'mode_cmd_t': 'mode_command_topic',
- 'mode_stat_tpl': 'mode_state_template',
+ 'mode_cmd_tpl': 'mode_command_template',
'mode_stat_t': 'mode_state_topic',
+ 'mode_stat_tpl': 'mode_state_template',
'modes': 'modes',
'name': 'name',
'o': 'origin',
@@ -420,25 +448,22 @@ support_url:
'pct_cmd_tpl': 'percentage_command_template',
'pct_stat_t': 'percentage_state_topic',
'pct_val_tpl': 'percentage_value_template',
- 'ptrn': 'pattern',
'pl': 'payload',
'pl_arm_away': 'payload_arm_away',
- 'pl_arm_home': 'payload_arm_home',
'pl_arm_custom_b': 'payload_arm_custom_bypass',
+ 'pl_arm_home': 'payload_arm_home',
'pl_arm_nite': 'payload_arm_night',
'pl_arm_vacation': 'payload_arm_vacation',
- 'pl_prs': 'payload_press',
- 'pl_rst': 'payload_reset',
'pl_avail': 'payload_available',
'pl_cln_sp': 'payload_clean_spot',
'pl_cls': 'payload_close',
- 'pl_disarm': 'payload_disarm',
'pl_dir_fwd': 'payload_direction_forward',
'pl_dir_rev': 'payload_direction_reverse',
+ 'pl_disarm': 'payload_disarm',
'pl_home': 'payload_home',
'pl_inst': 'payload_install',
- 'pl_lock': 'payload_lock',
'pl_loc': 'payload_locate',
+ 'pl_lock': 'payload_lock',
'pl_not_avail': 'payload_not_available',
'pl_not_home': 'payload_not_home',
'pl_off': 'payload_off',
@@ -449,12 +474,16 @@ support_url:
'pl_paus': 'payload_pause',
'pl_stop': 'payload_stop',
'pl_strt': 'payload_start',
- 'pl_stpa': 'payload_start_pause',
+ 'pl_prs': 'payload_press',
'pl_ret': 'payload_return_to_base',
+ 'pl_rst': 'payload_reset',
'pl_rst_hum': 'payload_reset_humidity',
'pl_rst_mode': 'payload_reset_mode',
'pl_rst_pct': 'payload_reset_percentage',
'pl_rst_pr_mode': 'payload_reset_preset_mode',
+ 'pl_stop': 'payload_stop',
+ 'pl_stpa': 'payload_start_pause',
+ 'pl_strt': 'payload_start',
'pl_toff': 'payload_turn_off',
'pl_ton': 'payload_turn_on',
'pl_trig': 'payload_trigger',
@@ -467,6 +496,7 @@ support_url:
'pr_mode_stat_t': 'preset_mode_state_topic',
'pr_mode_val_tpl': 'preset_mode_value_template',
'pr_modes': 'preset_modes',
+ 'ptrn': 'pattern',
'r_tpl': 'red_template',
'rel_s': 'release_summary',
'rel_u': 'release_url',
@@ -486,26 +516,26 @@ support_url:
'send_cmd_t': 'send_command_topic',
'send_if_off': 'send_if_off',
'set_fan_spd_t': 'set_fan_speed_topic',
- 'set_pos_tpl': 'set_position_template',
'set_pos_t': 'set_position_topic',
+ 'set_pos_tpl': 'set_position_template',
'pos_t': 'position_topic',
'pos_tpl': 'position_template',
'spd_rng_min': 'speed_range_min',
'spd_rng_max': 'speed_range_max',
'src_type': 'source_type',
'stat_cla': 'state_class',
- 'stat_clsd': 'state_closed',
'stat_closing': 'state_closing',
+ 'stat_clsd': 'state_closed',
'stat_jam': 'state_jammed',
+ 'stat_locked': 'state_locked',
+ 'stat_locking': 'state_locking',
'stat_off': 'state_off',
'stat_on': 'state_on',
'stat_open': 'state_open',
'stat_opening': 'state_opening',
'stat_stopped': 'state_stopped',
- 'stat_locked': 'state_locked',
- 'stat_locking': 'state_locking',
'stat_unlocked': 'state_unlocked',
- 'stat_unlocking': 'state_unlocking',
+ 'stat_unlocking': 'state_unlocking',
'stat_t': 'state_topic',
'stat_tpl': 'state_template',
'stat_val_tpl': 'state_value_template',
@@ -516,22 +546,23 @@ support_url:
'sup_dur': 'support_duration',
'sup_vol': 'support_volume_set',
'sup_feat': 'supported_features',
- 'swing_mode_cmd_tpl': 'swing_mode_command_template',
'swing_mode_cmd_t': 'swing_mode_command_topic',
- 'swing_mode_stat_tpl': 'swing_mode_state_template',
+ 'swing_mode_cmd_tpl': 'swing_mode_command_template',
'swing_mode_stat_t': 'swing_mode_state_topic',
- 'temp_cmd_tpl': 'temperature_command_template',
+ 'swing_mode_stat_tpl': 'swing_mode_state_template',
+ 't': 'topic',
'temp_cmd_t': 'temperature_command_topic',
- 'temp_hi_cmd_tpl': 'temperature_high_command_template',
+ 'temp_cmd_tpl': 'temperature_command_template',
'temp_hi_cmd_t': 'temperature_high_command_topic',
- 'temp_hi_stat_tpl': 'temperature_high_state_template',
+ 'temp_hi_cmd_tpl': 'temperature_high_command_template',
'temp_hi_stat_t': 'temperature_high_state_topic',
- 'temp_lo_cmd_tpl': 'temperature_low_command_template',
+ 'temp_hi_stat_tpl': 'temperature_high_state_template',
'temp_lo_cmd_t': 'temperature_low_command_topic',
- 'temp_lo_stat_tpl': 'temperature_low_state_template',
+ 'temp_lo_cmd_tpl': 'temperature_low_command_template',
'temp_lo_stat_t': 'temperature_low_state_topic',
- 'temp_stat_tpl': 'temperature_state_template',
+ 'temp_lo_stat_tpl': 'temperature_low_state_template',
'temp_stat_t': 'temperature_state_topic',
+ 'temp_stat_tpl': 'temperature_state_template',
'temp_unit': 'temperature_unit',
'tilt_clsd_val': 'tilt_closed_value',
'tilt_cmd_t': 'tilt_command_topic',
@@ -543,7 +574,6 @@ support_url:
'tilt_status_t': 'tilt_status_topic',
'tilt_status_tpl': 'tilt_status_template',
'tit': 'title',
- 't': 'topic',
'uniq_id': 'unique_id',
'unit_of_meas': 'unit_of_measurement',
'url_t': 'url_topic',
@@ -570,8 +600,11 @@ support_url:
'hw': 'hw_version',
'sw': 'sw_version',
'sa': 'suggested_area',
+ 'sn': 'serial_number',
```
+
{% enddetails %}
+
{% details "Supported abbreviations for origin info" %}
```txt
@@ -579,6 +612,7 @@ support_url:
'sw': 'sw_version',
'url': 'support_url',
```
+
{% enddetails %}
### How to use discovery messages
@@ -683,6 +717,8 @@ The following software has built-in support for MQTT discovery:
- [ArduinoHA](https://github.com/dawidchyrzynski/arduino-home-assistant)
- [Arilux AL-LC0X LED controllers](https://github.com/smrtnt/Arilux_AL-LC0X)
+- [ble2mqtt](https://github.com/devbis/ble2mqtt)
+- [digitalstrom-mqtt](https://github.com/gaetancollaud/digitalstrom-mqtt)
- [ebusd](https://github.com/john30/ebusd)
- [ecowitt2mqtt](https://github.com/bachya/ecowitt2mqtt)
- [EMS-ESP32 (and EMS-ESP)](https://github.com/emsesp/EMS-ESP32)
@@ -692,7 +728,7 @@ The following software has built-in support for MQTT discovery:
- [HASS.Agent](https://github.com/LAB02-Research/HASS.Agent)
- [IOTLink](https://iotlink.gitlab.io) (starting with 2.0.0)
- [MiFlora MQTT Daemon](https://github.com/ThomDietrich/miflora-mqtt-daemon)
-- [MyElectricalData](https://github.com/MyElectricalData/myelectricaldata#english)
+- [MyElectricalData](https://github.com/MyElectricalData/myelectricaldata_import#english)
- [Nuki Hub](https://github.com/technyon/nuki_hub)
- [Nuki Smart Lock 3.0 Pro](https://support.nuki.io/hc/articles/12947926779409-MQTT-support), [more info](https://developer.nuki.io/t/mqtt-api-specification-v1-3/17626)
- [OpenMQTTGateway](https://github.com/1technophile/OpenMQTTGateway)
@@ -709,6 +745,7 @@ The following software has built-in support for MQTT discovery:
- [Xiaomi DaFang Hacks](https://github.com/EliasKotlyar/Xiaomi-Dafang-Hacks)
- [Zehnder Comfoair RS232 MQTT](https://github.com/adorobis/hacomfoairmqtt)
- [Zigbee2MQTT](https://github.com/koenkk/zigbee2mqtt)
+- [OTGateway](https://github.com/Laxilef/OTGateway)
### Discovery examples
@@ -718,7 +755,8 @@ A motion detection device which can be represented by a [binary sensor](/integra
- Configuration topic: `homeassistant/binary_sensor/garden/config`
- State topic: `homeassistant/binary_sensor/garden/state`
-- Configuration payload with derived device name:
+- Configuration payload with derived device name:
+
```json
{
"name":null,
@@ -733,11 +771,13 @@ A motion detection device which can be represented by a [binary sensor](/integra
}
}
```
+
- Retain: The -r switch is added to retain the configuration topic in the broker. Without this, the sensor will not be available after Home Assistant restarts.
It is also a good idea to add a `unique_id` to allow changes to the entity and a `device` mapping so we can group all sensors of a device together. We can set "name" to `null` if we want to inherit the device name for the entity. If we set an entity name, the `friendly_name` will be a combination of the device and entity name. If `name` is left away and a `device_class` is set, the entity name part will be derived from the `device_class`.
- Example configuration payload with no name set and derived `device_class` name:
+
```json
{
"name":null,
@@ -780,7 +820,8 @@ For more details please refer to the [MQTT testing section](/integrations/mqtt/#
Setting up a sensor with multiple measurement values requires multiple consecutive configuration topic submissions.
- Configuration topic no1: `homeassistant/sensor/sensorBedroomT/config`
-- Configuration payload no1:
+- Configuration payload no1:
+
```json
{
"device_class":"temperature",
@@ -790,14 +831,23 @@ Setting up a sensor with multiple measurement values requires multiple consecuti
"unique_id":"temp01ae",
"device":{
"identifiers":[
- "bedroom01ae"
+ "bedroom01ae"
],
- "name":"Bedroom"
+ "name":"Bedroom",
+ "manufacturer": "Example sensors Ltd.",
+ "model": "K9",
+ "serial_number": "12AE3010545",
+ "hw_version": "1.01a",
+ "sw_version": "2024.1.0",
+ "configuration_url": "https://example.com/sensor_portal/config"
}
}
+
```
+
- Configuration topic no2: `homeassistant/sensor/sensorBedroomH/config`
-- Configuration payload no2:
+- Configuration payload no2:
+
```json
{
"device_class":"humidity",
@@ -808,12 +858,19 @@ Setting up a sensor with multiple measurement values requires multiple consecuti
"device":{
"identifiers":[
"bedroom01ae"
- ],
- "name":"Bedroom"
+ ]
}
}
```
-- Common state payload:
+
+The sensor [`identifiers` or `connections`](/integrations/sensor.mqtt/#device) option allows to set up multiple entities that share the same device.
+
+
+If a device configuration is shared, then it is not needed to add all device details to the other entity configs. It is enough to add shared identifiers or connections to the device mapping for the other entity config payloads.
+
+
+A common state payload that can be parsed with the `value_template` in the sensor configs:
+
```json
{
"temperature":23.20,
@@ -829,6 +886,7 @@ Setting up a light, switch etc. is similar but requires a `command_topic` as men
- State topic: `homeassistant/switch/irrigation/state`
- Command topic: `homeassistant/switch/irrigation/set`
- Payload:
+
```json
{
"name":"Irrigation",
@@ -843,6 +901,7 @@ Setting up a light, switch etc. is similar but requires a `command_topic` as men
}
}
```
+
- Retain: The -r switch is added to retain the configuration topic in the broker. Without this, the sensor will not be available after Home Assistant restarts.
```bash
@@ -863,7 +922,8 @@ Setting up a switch using topic prefix and abbreviated configuration variable na
- Configuration topic: `homeassistant/switch/irrigation/config`
- Command topic: `homeassistant/switch/irrigation/set`
- State topic: `homeassistant/switch/irrigation/state`
-- Configuration payload:
+- Configuration payload:
+
```json
{
"~":"homeassistant/switch/irrigation",
@@ -911,6 +971,7 @@ Setting up a [light that takes JSON payloads](/integrations/light.mqtt/#json-sch
"mf": "Bla electronics",
"mdl": "xya",
"sw": "1.0",
+ "sn": "ea334450945afc",
"hw": "1.0rev2",
},
"o": {
@@ -971,37 +1032,13 @@ mqtt:
...
```
-{% details "MQTT components that support setup via YAML" %}
+If you have a large number of manually configured items, you might want to consider [splitting up the configuration](/docs/configuration/splitting_configuration/).
-- [Alarm control panel](/integrations/alarm_control_panel.mqtt/)
-- [Binary sensor](/integrations/binary_sensor.mqtt/)
-- [Button](/integrations/button.mqtt/)
-- [Camera](/integrations/camera.mqtt/)
-- [Cover](/integrations/cover.mqtt/)
-- [Device tracker](/integrations/device_tracker.mqtt/)
-- [Event](/integrations/event.mqtt/)
-- [Fan](/integrations/fan.mqtt/)
-- [Humidifier](/integrations/humidifier.mqtt/)
-- [Image](/integrations/image.mqtt/)
-- [Climate/HVACs](/integrations/climate.mqtt/)
-- [Lawn mower](/integrations/lawn_mower.mqtt/)
-- [Light](/integrations/light.mqtt/)
-- [Lock](/integrations/lock.mqtt/)
-- [Number](/integrations/number.mqtt/)
-- [Scene](/integrations/scene.mqtt/)
-- [Select](/integrations/select.mqtt/)
-- [Sensor](/integrations/sensor.mqtt/)
-- [Siren](/integrations/siren.mqtt/)
-- [Switch](/integrations/switch.mqtt/)
-- [Text](/integrations/text.mqtt/)
-- [Update](/integrations/update.mqtt/)
-- [Vacuum](/integrations/vacuum.mqtt/)
-- [Valve](/integrations/valve.mqtt/)
-- [Water heater](/integrations/water_heater.mqtt/)
+
-{% enddetails %}
+Documentation on the MQTT components that support YAML [can be found here](/integrations/mqtt/#configuration-via-yaml).
-If you have a lot of manual configured items you might want to consider [splitting up the configuration](/docs/configuration/splitting_configuration/).
+
## Using Templates
@@ -1023,16 +1060,15 @@ The MQTT notification support is different than for the other [notification](/in
```
-
+
The same will work for automations.
-
+
-
### Examples
#### REST API
@@ -1093,9 +1129,16 @@ The MQTT integration will register the service `mqtt.publish` which allows publi
| `qos` | yes | Quality of Service to use. (default: 0) |
| `retain` | yes | If message should have the retain flag set. (default: false) |
-
+
+
+
+
You must include either `topic` or `topic_template`, but not both. If providing a payload, you need to include either `payload` or `payload_template`, but not both.
+
+
+
+
```yaml
topic: homeassistant/light/1/command
diff --git a/source/_integrations/myuplink.markdown b/source/_integrations/myuplink.markdown
new file mode 100644
index 000000000000..e0333c6ee79b
--- /dev/null
+++ b/source/_integrations/myuplink.markdown
@@ -0,0 +1,55 @@
+---
+title: myUplink
+description: Instructions on how to set up the myUplink integration within Home Assistant.
+ha_category:
+ - Binary sensor
+ - Number
+ - Sensor
+ - Switch
+ - Update
+ha_iot_class: Cloud Polling
+ha_release: '2024.2'
+ha_domain: myuplink
+ha_codeowners:
+ - '@pajzo'
+ - '@astrandb'
+ha_config_flow: true
+ha_platforms:
+ - binary_sensor
+ - diagnostics
+ - number
+ - sensor
+ - switch
+ - update
+ha_integration_type: integration
+---
+
+The myUplink integration lets you get information about the devices supporting myUplink using the [official cloud API](https://dev.myuplink.com).
+
+Depending on the type of devices in your system, one or more entities are added to Home Assistant. Currently, there is support for reading sensor states. There is also support for switches and number entities if suitable data points are discovered in the system. Note that you may need a valid subscription with MyUplink to control your equipment with switches and number entities.
+
+## Prerequisites
+
+1. Visit [https://myuplink.com/register](https://myuplink.com/register) and sign up for a user account.
+2. Go to [**Applications**](https://dev.myuplink.com/apps), and register a new App:
+
+- **Application ID**: Home Assistant (or whatever name makes sense to you)
+- **OAuth Flow**: Authorization Code Grant Flow
+- **Redirect URI**: `https://my.home-assistant.io/redirect/oauth`
+
+{% details "I have manually disabled My Home Assistant" %}
+
+If you don't have [My Home Assistant](/integrations/my) on your installation,
+you can use `/auth/external/callback` as the redirect URI
+instead.
+
+The `` must be the same as used during the configuration/
+authentication process.
+
+Internal examples: `http://192.168.0.2:8123/auth/external/callback`, `http://homeassistant.local:8123/auth/external/callback`."
+
+{% enddetails %}
+
+{% include integrations/config_flow.md %}
+
+The integration configuration will require the **Client ID** and **Client Secret** created above. See [Application Credentials](/integrations/application_credentials) for more details.
diff --git a/source/_integrations/neato.markdown b/source/_integrations/neato.markdown
index 1332da1336c7..8afdb03c7054 100644
--- a/source/_integrations/neato.markdown
+++ b/source/_integrations/neato.markdown
@@ -11,7 +11,6 @@ ha_iot_class: Cloud Polling
ha_release: 0.33
ha_config_flow: true
ha_codeowners:
- - '@dshokouhi'
- '@Santobert'
ha_domain: neato
ha_platforms:
diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown
index 511ae508cf46..dd3fb8e30725 100644
--- a/source/_integrations/nest.markdown
+++ b/source/_integrations/nest.markdown
@@ -42,6 +42,12 @@ The Nest Smart Device Management (SDM) API **requires a US$5 fee**. Before buyin
+
+
+The Google Nest integration uses a Cloud Pub/Sub subscription with a 15-minute retention period by default. The Google Cloud Pub/Sub billing changes, effective June 30, 2024, do not apply. The billing changes only apply to subscriptions with a 24-hour retention period. See the [Pub/Sub console](https://console.cloud.google.com/cloudpubsub/subscription/list) to view your subscriptions if you previously created one manually.
+
+
+
## Configuration
@@ -608,12 +614,4 @@ logger:
- It is recommended to let Home Assistant create the Pub/Sub subscription for you. However, if you would like more control you can enter a `subscriber_id` in the configuration. See [Subscribe to Events](https://developers.google.com/nest/device-access/subscribe-to-events) for more instructions on how to manually create a subscription and use the full subscription name in the Home Assistant configuration e.g. `projects/gcp-project-name/subscriptions/subscription-id`
-- *Not receiving camera motion and person events*: assuming the integration is correctly configured (for example, the oauth and SDM API are set up correctly, you can see camera streams, and permissions are correctly set in [Partner Connections Manager](https://nestservices.google.com/partnerconnections)): If you are then still not seeing events, it's possible you need to adjust the Google Home App settings. Refer to the [Cameras: Automation: Google Home App Settings](#google-home-app-settings) for details.
-
-# Works With Nest API
-
-
-
-The Legacy [Works with Nest](https://developers.nest.com/) API is deprecated, and will be shut down by Google in September 2023.
-
-
+- *Not receiving camera motion and person events*: assuming the integration is correctly configured (for example, the oauth and SDM API are set up correctly, you can see camera streams, and permissions are correctly set in [Partner Connections Manager](https://nestservices.google.com/partnerconnections)): If you are then still not seeing events, it's possible you need to adjust the Google Home App settings. Refer to the [Google Home App Notification Settings](#google-home-app-notification-settings) for details.
diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown
index b381f2b12648..d7d58a462e85 100644
--- a/source/_integrations/netatmo.markdown
+++ b/source/_integrations/netatmo.markdown
@@ -2,10 +2,12 @@
title: Netatmo
description: Instructions on how to integrate Netatmo integration into Home Assistant.
ha_category:
+ - Binary sensor
- Camera
- Climate
- Cover
- Environment
+ - Fan
- Hub
- Light
- Media source
@@ -20,10 +22,12 @@ ha_config_flow: true
ha_domain: netatmo
ha_homekit: true
ha_platforms:
+ - binary_sensor
- camera
- climate
- cover
- diagnostics
+ - fan
- light
- select
- sensor
@@ -35,9 +39,11 @@ The Netatmo integration platform is the main integration to integrate all Netatm
There is currently support for the following device types within Home Assistant:
+- [Binary sensor](#binary-sensor)
- [Camera](#camera)
- [Climate](#climate)
- [Cover](#cover)
+- [Fan](#fan)
- [Light](#light)
- [Sensor](#sensor)
- [Switch](#switch)
@@ -53,6 +59,10 @@ In the dialog, it is possible to create, edit and remove public weather sensors.
To edit an existing area, enter its name and follow the dialog.
+## Binary sensor
+
+The `netatmo` binary sensor platform is showing the connectivity for the [Netatmo Smart Home Weather Station](https://www.netatmo.com/smart-weather-station).
+
## Camera
The `netatmo` camera platform is consuming the information provided by a [Netatmo Smart Indoor](https://www.netatmo.com/smart-indoor-camera), [Outdoor](https://www.netatmo.com/smart-outdoor-camera) and [Netatmo Smart Video Doorbell](https://www.netatmo.com/smart-video-doorbell) camera. This integration allows you to view the current live stream created by the camera (exception: video doorbell).
@@ -67,6 +77,10 @@ The `netatmo` thermostat platform is consuming the information provided by a [Ne
The `netatmo` cover platform provides support for Bubendorff shutters.
+## Fan
+
+The `netatmo` fan plaform provides support for Legrand centralized ventilation control.
+
## Light
The `netatmo` light platform is consuming information provided by a [Netatmo Smart Outdoor](https://www.netatmo.com/smart-outdoor-camera) camera and requires an active webhook. This integration allows you to turn on/off the flood lights.
@@ -109,10 +123,10 @@ Set the heating schedule.
Set the preset mode for a Netatmo climate device. The preset mode must match a preset mode configured at Netatmo.
-| Service data attribute | Required | Description |
-| ---------------------- | -------- | ---------------------------------------------------------- |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ----------------------------------------------------------- |
| `preset_mode` | Yes | Climate preset mode such as Schedule, Away, or Frost Guard. |
-| `end_datetime` | Yes | Date & time until which the preset will be active. |
+| `end_datetime` | Yes | Date & time until which the preset will be active. |
### Set temperature with end date & time
@@ -131,9 +145,9 @@ Sets the target temperature for a Netatmo climate device with an end date & time
Sets the target temperature for a Netatmo climate device as well as the time period during which this target temperature applies.
-| Service data attribute | Required | Description |
-| ---------------------- | -------- | ------------------------------------------------------ |
-| `target_temperature` | Yes | The target temperature for the device. |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ----------------------------------------------------------- |
+| `target_temperature` | Yes | The target temperature for the device. |
| `time_period` | Yes | Time period during which the target temperature is applied. |
### Clear temperature setting
@@ -180,7 +194,7 @@ It is therefore recommended to use [an individual development account](#developm
-To be able to receive events from [Netatmo](https://www.netatmo.com/), your Home Assistant instance needs to be accessible from the web over port `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the external URL configured in the Home Assistant [configuration](/docs/configuration/basic).
+To be able to receive events from [Netatmo](https://www.netatmo.com/), your Home Assistant instance needs to be accessible from the web over port `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the external URL configured in the Home Assistant [configuration](/integrations/homeassistant/#allowlist_external_urls).
Events coming in from Netatmo will be available as an event in Home Assistant and are fired as `netatmo_event`, along with their data. You can use these events to trigger automations.
@@ -290,7 +304,7 @@ Sign in using your username and password from your regular Netatmo account.
-In your Netatmo Application configuration, do not enter a 'redirect URI' or a 'webhook URI'. The 'webhook URI' is automatically registered by this integration based on the external URL configured in the Home Assistant [configuration](/docs/configuration/basic).
+In your Netatmo Application configuration, do not enter a 'redirect URI' or a 'webhook URI'. The 'webhook URI' is automatically registered by this integration based on the external URL configured in the Home Assistant [configuration](/integrations/homeassistant/#editing-the-general-settings-in-yaml).
diff --git a/source/_integrations/netgear_lte.markdown b/source/_integrations/netgear_lte.markdown
index 4d59675795fd..41970ddd18f6 100644
--- a/source/_integrations/netgear_lte.markdown
+++ b/source/_integrations/netgear_lte.markdown
@@ -8,14 +8,15 @@ ha_category:
- Notifications
- Sensor
ha_iot_class: Local Polling
+ha_config_flow: true
ha_domain: netgear_lte
ha_platforms:
- binary_sensor
- notify
- sensor
-ha_integration_type: integration
ha_codeowners:
- '@tkdrob'
+ha_integration_type: integration
---
The NETGEAR LTE integration for Home Assistant allows you to observe and control [NETGEAR LTE modems](https://www.netgear.com/home/mobile-wifi/lte-modems/).
@@ -34,106 +35,11 @@ Splitting of long SMS messages is not supported so notifications can contain a m
-## Configuration
-
-To enable the integration, add the following lines to your `configuration.yaml` file:
+{% include integrations/config_flow.md %}
-```yaml
-# Example configuration.yaml entry
-netgear_lte:
- - host: IP_ADDRESS
- password: SECRET
- notify:
- - name: sms
- recipient: "+15105550123"
- sensor:
- monitored_conditions:
- - usage
- - sms
- binary_sensor:
- monitored_conditions:
- - wire_connected
- - mobile_connected
-```
+## Notification Service
-{% configuration %}
-host:
- description: The IP address of the modem web interface.
- required: true
- type: string
-password:
- description: The password used for the modem web interface.
- required: true
- type: string
-notify:
- description: A list of notification services connected to this specific host.
- required: false
- type: list
- keys:
- recipient:
- description: The phone number of a default recipient or a list with multiple recipients.
- required: false
- type: [string, list]
- name:
- description: The name of the notification service.
- required: false
- default: "`netgear_lte`"
- type: string
-sensor:
- description: Configuration options for sensors.
- required: false
- type: map
- keys:
- monitored_conditions:
- description: Sensor types to create.
- required: false
- default: usage
- type: list
- keys:
- cell_id:
- description: The Cell ID, a number identifying the base station.
- connection_text:
- description: A connection text, e.g., "4G".
- connection_type:
- description: The connection type, e.g., "IPv4Only".
- current_band:
- description: The radio band used, e.g., "LTE B3".
- current_ps_service_type:
- description: The service type, e.g., "LTE".
- radio_quality:
- description: A number with the radio quality in percent, e.g., "55"
- register_network_display:
- description: The name of the service provider.
- rx_level:
- description: The RSRP value, a measurement of the received power level, e.g., "-95".
- sms:
- description: Number of unread SMS messages in the modem inbox.
- sms_total:
- description: Number of SMS messages in the modem inbox.
- tx_level:
- description: Transmit power, e.g., "23".
- upstream:
- description: Current upstream connection, "WAN" or "LTE".
- usage:
- description: Amount of data transferred.
-binary_sensor:
- description: Configuration options for binary sensors.
- required: false
- type: map
- keys:
- monitored_conditions:
- description: Binary sensor types to create.
- required: false
- default: mobile_connected
- type: list
- keys:
- mobile_connected:
- description: The LTE connection state.
- wire_connected:
- description: The wired uplink connection state.
- roaming:
- description: The current roaming state.
-{% endconfiguration %}
+The integration will create a `notify` service matching the name of the integration entry. This is the model name of the device by default.
## Events
diff --git a/source/_integrations/network.markdown b/source/_integrations/network.markdown
index 5b072d062464..038d58736c65 100644
--- a/source/_integrations/network.markdown
+++ b/source/_integrations/network.markdown
@@ -1,6 +1,6 @@
---
-title: Network Configuration
-description: Network Configuration for Home Assistant
+title: Network configuration
+description: Network configuration for Home Assistant
ha_category:
- Other
ha_release: 2021.6
@@ -12,7 +12,7 @@ ha_codeowners:
ha_integration_type: system
---
-This integration provides network configuration for integrations such as [Zeroconf](/integrations/zeroconf/). It is managed by going to **{% my network title="Settings > System > Network" %}** and is only available to users that have "Advanced Mode" enabled on their {% my profile title="user profile" %}.
+The **Network configuration** {% term integration %} provides network configuration for integrations such as [Zeroconf](/integrations/zeroconf/). It is managed by going to **{% my network title="Settings > System > Network" %}** and is only available to users that have "Advanced Mode" enabled on their {% my profile title="user profile" %}.
**{% my general badge %}**
diff --git a/source/_integrations/nexity.markdown b/source/_integrations/nexity.markdown
index 2f6e7788926b..6f547c76eab4 100644
--- a/source/_integrations/nexity.markdown
+++ b/source/_integrations/nexity.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/nextcloud.markdown b/source/_integrations/nextcloud.markdown
index 67c30e4f5fea..f2c8edad40b9 100644
--- a/source/_integrations/nextcloud.markdown
+++ b/source/_integrations/nextcloud.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to integrate Nextcloud monitor api data into Ho
ha_category:
- Binary sensor
- Sensor
+ - Update
ha_iot_class: Cloud Polling
ha_release: 0.108
ha_domain: nextcloud
@@ -13,6 +14,7 @@ ha_codeowners:
ha_platforms:
- binary_sensor
- sensor
+ - update
ha_integration_type: integration
---
@@ -20,7 +22,7 @@ The `nextcloud` integration pulls summary [Nextcloud](https://nextcloud.com/) in
The integration provides sensors and binary sensors for most of the data points that the built-in Nextcloud [serverinfo app](https://github.com/nextcloud/serverinfo) provides.
-To see which datapoints your nextcloud instance exposes, browse to this url: `https:///ocs/v2.php/apps/serverinfo/api/v1/info?format=json`.
+To see which datapoints your nextcloud instance exposes, browse to this url: `https:///ocs/v2.php/apps/serverinfo/api/v1/info?format=json&skipUpdate=false`.
![Nextcloud Example Sensor](/images/screenshots/nextcloud-sample-sensor.png)
diff --git a/source/_integrations/notify.markdown b/source/_integrations/notify.markdown
index 0564ec0a8a55..ce65e495ad40 100644
--- a/source/_integrations/notify.markdown
+++ b/source/_integrations/notify.markdown
@@ -11,15 +11,15 @@ ha_domain: notify
ha_integration_type: entity
---
-The `notify` integration makes it possible to send notifications to a wide variety of platforms. To use it you have to setup at least one notification target (notifier), check the [integrations list](/integrations/#notifications) for one that fits your use case.
+The **Notify** {% term integration %} makes it possible to send notifications to a wide variety of platforms. To use it, you have to set up at least one notification target (notifier). Check the [integrations list](/integrations/#notifications) for one that fits your use case.
-If you want to send notifications to the Home Assistant web interface, you may use the [Persistent Notification integration](/integrations/persistent_notification/). The Persistent Notification integration is also available as an automatically configured notifier. See [its documentation](/integrations/persistent_notification/) for more details.
+If you want to send notifications to the Home Assistant web interface, you may use the [Persistent Notification integration](/integrations/persistent_notification/). It is available as an automatically configured notifier. See [its documentation](/integrations/persistent_notification/) for more details.
{% include integrations/building_block_integration.md %}
## Service
-Once loaded, the `notify` platform will expose a service that can be called to send notifications.
+The legacy `notify` platform will expose a generic `notify` service that can be called to send notifications.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
@@ -28,41 +28,103 @@ Once loaded, the `notify` platform will expose a service that can be called to s
| `target` | yes | Some platforms allow specifying a recipient that will receive the notification. See your platform page if it is supported.
| `data` | yes | On platforms who have extended functionality. See your platform page if it is supported.
-The notify integration supports specifying [templates](/docs/configuration/templating/). This will allow you to use the current state of Home Assistant in your notifications.
+## Usage
-In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this with a customized subject.
+The different **Notify** integrations you have set up will each show up as a different automation {% term action %} or {% term service %} call that you can use.
-Be aware that you might want to change the actual service to whatever service you are actually using since `notify.notify` is shorthand for the first notify service the system can find and might therefore not be working as intended.
+One notification integration is automatically included, the Persistent Notifications which creates a notification in the sidebar of the web interface of Home Assistant. This can be chosen with the action named "Notifications: Send a persistent notification" which uses the service `notify.persistent_notification`.
+
+## Notify entity service
+
+Integrations can also implement the notify entity platform. Entity platform implementations will replace the legacy notify service in time. There is an entity platform service `send_message` which allows you to send notification messages to multiple notify entities.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `message` | no | Body of the notification.
+| `title` | yes | Title of the notification.
+
+## Companion app notifications
+
+A common notification integration is via the Home Assistant Companion app for Android or iPhone. This can be chosen with the action "Send a notification via mobile_app_your_phone_name", which uses the service `notify.mobile_app_your_phone_name`. Refer to the [Companion app documentation](https://companion.home-assistant.io/docs/notifications/notifications-basic) for lots of customization options.
+
+With any of these integrations, the `message` data input in the automation editor is the main text that will be sent. Other fields are optional, and some integrations support additional `data` or `target` information to customize the action. For more details, refer to their integration documentation.
+
+Be aware that the `notify.notify` service is shorthand for the first notify service the system can find. It might not work as intended. Choose a specific service to make sure your message goes to the right place.
+
+Notifications can also be sent using [Notify groups](https://www.home-assistant.io/integrations/group/#notify-groups). These allow you to send notification to multiple devices with a single call, or to update which device is notified by only changing it in a single place.
+
+### Test if it works
+
+After you setup a [notifier](/integrations/#notifications), a simple way to test if you have set up your notify platform correctly is to open {% my developer_services title="**Developer tools** > **Services**" %}** tab from the sidebar. Choose your service from the **Service** dropdown menu depending on the integration you want to test, such as **Notifications: Send a persistent notification** or **Notifications: Send a notification via mobile_app_your_phone_name**. Enter your message into the **message** field, and select the **CALL SERVICE** button.
+
+To test the entity platform service, select the `notify.send_message` service, and select one or more of `entity`, `device`, `area`, or `label`. Then, supply a `message`.
+
+### Example with the entity platform notify service
+
+Under {% my developer_services title="**Developer Tools** > **Services**" %}, select the **Notifications: Send a notification message** action. Select some target entity's using the entity selectors, enter a message and test sending it.
+
+If you switch to view the YAML data under **Developer Tools**, it will appear as below. The same {% term action %} can be chosen in {% term automation %}. The YAML will appear the same:
+
+{% raw %}
+
+```yaml
+service: notify.send_message
+data:
+ entity_id: notify.my_direct_message_notifier
+ message: "You have an update!"
+ title: "Status changed"
+```
+
+{% endraw %}
+
+The notify integration supports specifying [templates](/docs/configuration/templating/). This will allow you to use the current state of entities in Home Assistant in your notifications, or use more complex logic to decide the message that is sent.
+
+{% raw %}
```yaml
action:
- service: notify.notify
+ service: notify.send_message
data:
- message: "Your message goes here"
- title: "Custom subject"
+ entity_id: notify.my_direct_message_notifier
+ message: "You have {{ states('todo.shopping_list') }} items on your shopping list."
```
-### Test if it works
+{% endraw %}
+
+### Examples with the legacy notify service
+
+In the **Developer Tools**, on the **Services** tab, select the **Notifications: Send a persistent notification** action. Enter a message and test sending it.
-After you setup a [notifier](/integrations/#notifications) a simple way to test if you have set up your notify platform correctly, is to open **Developer Tools** from the sidebar and then select the **Services** tab. Choose your service from the **Service** dropdown menu, enter the sample below into the **Service Data** field, and press the **CALL SERVICE** button.
+If you switch to view the YAML data under **Developer Tools**, it will appear as below. The same {% term action %} can be chosen in {% term automation %} actions %, whose YAML will appear the same:
{% raw %}
-```json
-{
- "message": "The sun is {% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}!"
-}
+```yaml
+service: notify.persistent_notification
+data:
+ message: "Can you hear me now?"
```
{% endraw %}
-The automation equivalent would be:
+The notify integration supports specifying [templates](/docs/configuration/templating/). This will allow you to use the current state of entities in Home Assistant in your notifications, or use more complex logic to decide the message that is sent.
+
+{% raw %}
+
+```yaml
+action:
+ service: notify.persistent_notification
+ data:
+ message: "You have {{ states('todo.shopping_list') }} items on your shopping list."
+```
+
+{% endraw %}
{% raw %}
```yaml
action:
- service: notify.notify
+ service: notify.persistent_notification
data:
message: "The sun is {% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}!"
```
diff --git a/source/_integrations/notify.mqtt.markdown b/source/_integrations/notify.mqtt.markdown
new file mode 100644
index 000000000000..9328222e0467
--- /dev/null
+++ b/source/_integrations/notify.mqtt.markdown
@@ -0,0 +1,202 @@
+---
+title: "MQTT notify"
+description: "Instructions on how to integrate MQTT notify entities into Home Assistant."
+ha_category:
+ - Notifications
+ha_release: 2024.5
+ha_iot_class: Configurable
+ha_domain: mqtt
+---
+
+The **MQTT notify** platform lets you send an MQTT message when the `send_message` service is called. This can be used to expose a service of a remote device that allows processing a message, such as showing it on a screen.
+
+## Configuration
+
+```yaml
+# Example configuration.yaml entry
+mqtt:
+ - notify:
+ command_topic: "home/living_room/status_screen/notifications"
+```
+
+{% configuration %}
+availability:
+ description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
+ required: false
+ type: list
+ keys:
+ payload_available:
+ description: The payload that represents the available state.
+ required: false
+ type: string
+ default: online
+ payload_not_available:
+ description: The payload that represents the unavailable state.
+ required: false
+ type: string
+ default: offline
+ topic:
+ description: An MQTT topic subscribed to receive availability (online/offline) updates.
+ required: true
+ type: string
+ value_template:
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
+ required: false
+ type: template
+availability_mode:
+ description: When `availability` is configured, this controls the conditions needed to set the entity to `available`. Valid entries are `all`, `any`, and `latest`. If set to `all`, `payload_available` must be received on all configured availability topics before the entity is marked as online. If set to `any`, `payload_available` must be received on at least one configured availability topic before the entity is marked as online. If set to `latest`, the last `payload_available` or `payload_not_available` received on any configured availability topic controls the availability.
+ required: false
+ type: string
+ default: latest
+availability_template:
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `availability_topic`. To determine the device's availability result, the template will be compared to `payload_available` and `payload_not_available`."
+ required: false
+ type: template
+availability_topic:
+ description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`.
+ required: false
+ type: string
+command_template:
+ description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
+ required: false
+ type: template
+command_topic:
+ description: The MQTT topic to publish send message commands at.
+ required: false
+ type: string
+device:
+ description: "Information about the device this notify entity is a part of to tie it into the [device registry](https://developers.home-assistant.io/docs/en/device_registry_index.html). Only works when [`unique_id`](#unique_id) is set. At least one of the identifiers or connections must be present to identify the device."
+ required: false
+ type: map
+ keys:
+ configuration_url:
+ description: 'A link to the webpage that can manage the configuration of this device. Can be either an `http://`, `https://` or an internal `homeassistant://` URL.'
+ required: false
+ type: string
+ connections:
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example, the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
+ required: false
+ type: list
+ hw_version:
+ description: The hardware version of the device.
+ required: false
+ type: string
+ identifiers:
+ description: A list of IDs that uniquely identify the device. For example, a serial number.
+ required: false
+ type: [string, list]
+ manufacturer:
+ description: The manufacturer of the device.
+ required: false
+ type: string
+ model:
+ description: The model of the device.
+ required: false
+ type: string
+ name:
+ description: The name of the device.
+ required: false
+ type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
+ suggested_area:
+ description: 'Suggest an area if the device isn’t in one yet.'
+ required: false
+ type: string
+ sw_version:
+ description: The firmware version of the device.
+ required: false
+ type: string
+ via_device:
+ description: 'Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs, or parent devices of a sub-device. This is used to show device topology in Home Assistant.'
+ required: false
+ type: string
+enabled_by_default:
+ description: Flag which defines if the entity should be enabled when first added.
+ required: false
+ type: boolean
+ default: true
+encoding:
+ description: The encoding of the published messages.
+ required: false
+ type: string
+ default: "utf-8"
+entity_category:
+ description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
+ required: false
+ type: string
+icon:
+ description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
+ required: false
+ type: icon
+json_attributes_template:
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
+ required: false
+ type: template
+json_attributes_topic:
+ description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-topic-configuration) documentation.
+ required: false
+ type: string
+name:
+ description: The name to use when displaying this notify entity. Can be set to `null` if only the device name is relevant.
+ required: false
+ type: string
+ default: MQTT notify
+object_id:
+ description: Used instead of `name` for automatic generation of `entity_id`
+ required: false
+ type: string
+payload_available:
+ description: The payload that represents the available state.
+ required: false
+ type: string
+ default: online
+payload_not_available:
+ description: The payload that represents the unavailable state.
+ required: false
+ type: string
+ default: offline
+qos:
+ description: The maximum QoS level to be used when receiving and publishing messages.
+ required: false
+ type: integer
+ default: 0
+retain:
+ description: If the published message should have the retain flag on or not.
+ required: false
+ type: boolean
+ default: false
+unique_id:
+ description: An ID that uniquely identifies this notify entity. If two notify entities have the same unique ID, Home Assistant will raise an exception.
+ required: false
+ type: string
+{% endconfiguration %}
+
+
+
+Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics.
+
+
+
+## Examples
+
+In this section, you will find some real-life examples of how to use this feature.
+
+### Full configuration
+
+The example below shows a full configuration for a notify entity.
+
+```yaml
+# Example configuration.yaml entry
+mqtt:
+ - notify:
+ unique_id: living_room_stat_scr01
+ name: "Living room status screen"
+ command_topic: "home/living_room/status_screen/notifications"
+ availability:
+ - topic: "home/living_room/status_screen/available"
+ qos: 0
+ retain: false
+```
diff --git a/source/_integrations/nsw_rural_fire_service_feed.markdown b/source/_integrations/nsw_rural_fire_service_feed.markdown
index f8676a0e1751..19882a14db0a 100644
--- a/source/_integrations/nsw_rural_fire_service_feed.markdown
+++ b/source/_integrations/nsw_rural_fire_service_feed.markdown
@@ -25,7 +25,7 @@ Entities are generated, updated and removed automatically with each update from
-The entity's information can be used for example if a bush fire that produces smoke or embers is reported close to your home, and you want to automatically close windows, turn on a sprinkler system or simply send yourself a reminder to clean the gutters from dry leaves.
+For example, you can use the entity's information to trigger actions based on the proximity and severity of a fire incident. You can set up automations to close windows, activate sprinklers or remind yourself to clean the gutters if there is a fire in your area.
The data is updated every 5 minutes.
diff --git a/source/_integrations/numato.markdown b/source/_integrations/numato.markdown
index d69384cf8da5..eaa005503a07 100644
--- a/source/_integrations/numato.markdown
+++ b/source/_integrations/numato.markdown
@@ -15,7 +15,7 @@ ha_platforms:
- binary_sensor
- sensor
- switch
-ha_integration_type: integration
+ha_integration_type: hub
---
The `numato` integration is the base for all related GPIO platforms of the
diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown
index 7306d5601d36..b7ecc054ed47 100644
--- a/source/_integrations/number.markdown
+++ b/source/_integrations/number.markdown
@@ -64,6 +64,7 @@ The type of data a number represents impacts how it is displayed in the frontend
- **volatile_organic_compounds**: Concentration of volatile organic compounds in µg/m³
- **voltage**: Voltage in V, mV
- **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³, or CCF
+- **volume_flow_rate**: Volume flow rate in m³/h, ft³/min, L/min, gal/min
- **volume_storage**: Generic stored volume in L, mL, gal, fl. oz., m³, ft³, or CCF
- **water**: Water consumption in L, gal, m³, ft³, or CCF
- **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st
diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown
index 46ee2aed08b0..1e7a5c29a3e0 100644
--- a/source/_integrations/number.mqtt.markdown
+++ b/source/_integrations/number.mqtt.markdown
@@ -12,8 +12,6 @@ The `mqtt` Number platform allows you to integrate devices that might expose con
## Configuration
-
-
To enable MQTT Number in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -70,7 +68,7 @@ device:
required: false
type: string
connections:
- description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
type: list
hw_version:
@@ -93,6 +91,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -107,10 +109,8 @@ device:
type: string
device_class:
description: The [type/class](/integrations/number/#device-class) of the number. The `device_class` can be `null`.
- default: None
required: false
type: device_class
- default: None
enabled_by_default:
description: Flag which defines if the entity should be enabled when first added.
required: false
@@ -125,7 +125,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
@@ -196,7 +195,6 @@ unique_id:
type: string
unit_of_measurement:
description: Defines the unit of measurement of the sensor, if any. The `unit_of_measurement` can be `null`.
- Default: None
required: false
type: string
value_template:
diff --git a/source/_integrations/nws.markdown b/source/_integrations/nws.markdown
index 8fdf756d46bf..cbf9d44fec9b 100644
--- a/source/_integrations/nws.markdown
+++ b/source/_integrations/nws.markdown
@@ -25,6 +25,8 @@ According to the [API documentation](https://www.weather.gov/documentation/servi
Providing a METAR station code is optional, and if not supplied, the closest station to the latitude and longitude will be chosen. A list of nearby stations is printed to the log with level `DEBUG` if no station is supplied. Stations can also be found on the [NOAA website](https://www.cnrfc.noaa.gov/metar.php). Codes with only three characters, for example, `ADW` should be prefixed with the letter K, `KADW`.
-Two weather entities are created for each entry in the configuration: one for day and night forecasts and one for hourly forecasts. The hourly forecast entity is disabled after configuration but can be enabled by the user. The time supplied for each forecast is the start time for the forecast. Sensors are also created as disabled entities after configuration and can be enabled by the user.
+One weather entity is created for each entry in the configuration. Hourly and day/night forecasts are provided through the `weather.get_forecasts` service. The time supplied for each forecast is the start time for the forecast. Sensors are also created as disabled entities after configuration and can be enabled by the user.
Details about the API are available in the [NWS API documentation](https://www.weather.gov/documentation/services-web-api). The [pynws](https://github.com/MatthewFlamm/pynws) library is used to retrieve data.
+
+Details about the `weather.get_forecasts` service are available in the [`weather` documentation](/integrations/weather/).
diff --git a/source/_integrations/octoprint.markdown b/source/_integrations/octoprint.markdown
index 0d756a69aad0..e86b350425d4 100644
--- a/source/_integrations/octoprint.markdown
+++ b/source/_integrations/octoprint.markdown
@@ -58,8 +58,8 @@ verify ssl:
{% endconfiguration_basic %}
### API key
-For the integration to work, please check that in Octoprint, the plugin Discovery is enabled and in the settings -> printer notifications menu pop-ups are enabled.
-The Octoprint integration will attempt to register itself via the [application keys plugin](https://docs.octoprint.org/en/master/bundledplugins/appkeys.html). After submitting the configuration UI in Home Assistant, open the Octoprint UI and click allow on the prompt.
+For the integration to work, please check that in Octoprint, the [Discovery Plugin](https://docs.octoprint.org/en/master/bundledplugins/discovery.html) is enabled and in the **Settings** -> **Printer Notifications** menu that **Enable popups** is checked.
+The Octoprint integration will attempt to register itself via the [Application Keys Plugin](https://docs.octoprint.org/en/master/bundledplugins/appkeys.html). After submitting the configuration UI in Home Assistant, open the Octoprint UI and select **Allow** on the prompt. NOTE: You must be logged into Octoprint as the user which you are adding Home Assistant. Otherwise, the popup access prompt does not appear.
## Binary sensor
@@ -71,6 +71,7 @@ The OctoPrint integration provides the following binary sensors:
## Sensor
The OctoPrint integration lets you monitor various states of your 3D printer and its print jobs.
+
Supported sensors:
- Current Printer State
@@ -89,6 +90,9 @@ The OctoPrint integration provides the following buttons:
- Pause Job
- Resume Job
- Stop Job
+- Shutdown System
+- Reboot System
+- Restart Octoprint
## Troubleshooting
diff --git a/source/_integrations/ollama.markdown b/source/_integrations/ollama.markdown
new file mode 100644
index 000000000000..bbb3bbc70801
--- /dev/null
+++ b/source/_integrations/ollama.markdown
@@ -0,0 +1,42 @@
+---
+title: Ollama
+description: Instructions on how to integrate Ollama
+ha_category:
+ - Voice
+ha_release: 2024.4
+ha_iot_class: Local Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@synesthesiam'
+ha_domain: ollama
+ha_integration_type: service
+related:
+ - docs: /docs/configuration/templating/
+ title: Home Assistant Templating
+ - docs: /docs/automation/trigger/#sentence-trigger
+ title: Sentence trigger
+---
+
+The **Ollama** {% term integration %} adds a conversation agent in Home Assistant powered by a local [Ollama](https://ollama.com/) server.
+
+This conversation agent is unable to control your house. The Ollama conversation agent can be used in automations, but not as a [sentence trigger](/docs/automation/trigger/#sentence-trigger). It can only query information that has been provided by Home Assistant. To be able to answer questions about your house, Home Assistant will need to provide Ollama with the details of your house, which include areas, devices, and their states.
+
+This integration requires an external Ollama server, which is available for macOS, Linux, and Windows. Follow the [download instructions](https://ollama.com/download) to install the server. Once installed, configure Ollama to be [accessible over the network](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-expose-ollama-on-my-network).
+
+{% include integrations/config_flow.md %}
+
+{% include integrations/option_flow.md %}
+{% configuration_basic %}
+URL:
+ description: The URL of the external Ollama server, such as `http://localhost:11434`.
+
+Model:
+ description: Name of the [Ollama model](https://ollama.com/library) to use, such as `mistral` or `llama2:13b`. Models will be automatically downloaded during setup.
+
+Prompt template:
+ description: The starting text for the AI language model to generate new text from. This text can include information about your Home Assistant instance, devices, and areas and is written using [Home Assistant Templating](/docs/configuration/templating/).
+
+Max history messages:
+ description: Maximum number of messages to keep for each conversation (0 = no limit). Limiting this value will cause older messages in a conversation to be dropped.
+
+{% endconfiguration_basic %}
diff --git a/source/_integrations/onewire.markdown b/source/_integrations/onewire.markdown
index a21cb464c6db..7cb270953060 100644
--- a/source/_integrations/onewire.markdown
+++ b/source/_integrations/onewire.markdown
@@ -52,6 +52,7 @@ Each 1-wire component data sheet describes the different properties the componen
| 3B | [DS1825](https://datasheets.maximintegrated.com/en/ds/DS1825.pdf) | Temperature |
| 42 | [DS28EA00](https://datasheets.maximintegrated.com/en/ds/DS28EA00.pdf) | Temperature |
| 7E | [EDS00xx](https://www.embeddeddatasystems.com/assets/images/supportFiles/manuals/EN-UserMan%20%20OW-ENV%20Sensor%20v13.pdf) | Temperature/Humidity/Barometric pressure/Light [6](#note_6)|
+| A6 | Secondary family code for [DS2438](https://datasheets.maximintegrated.com/en/ds/DS2438.pdf) | Temperature, Voltage, Current (pressure when using B1-R1-A, illuminance when using S2-R1-A, humidity when using compatible Honeywell or Humirel sensor) [2](#note_2) |
| EF | [HobbyBoard](https://hobbyboards.com/) | Temperature, Humidity, Moisture, Wetness [3](#note_3) |
#### Switches:
diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown
index 94d0ffeb1b40..89896eccdece 100644
--- a/source/_integrations/openai_conversation.markdown
+++ b/source/_integrations/openai_conversation.markdown
@@ -10,6 +10,8 @@ ha_codeowners:
- '@balloob'
ha_domain: openai_conversation
ha_integration_type: service
+ha_platforms:
+ - conversation
---
The OpenAI integration adds a conversation agent powered by [OpenAI](https://www.openai.com) in Home Assistant.
diff --git a/source/_integrations/opencv.markdown b/source/_integrations/opencv.markdown
deleted file mode 100644
index cf75af093537..000000000000
--- a/source/_integrations/opencv.markdown
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: OpenCV
-description: Instructions on how to integrate OpenCV image processing into Home Assistant.
-ha_category:
- - Image processing
-ha_iot_class: Local Push
-ha_release: 0.47
-ha_domain: opencv
-ha_integration_type: integration
----
-
-[OpenCV](https://www.opencv.org/) is an open source computer vision image and video processing library.
-
-Some pre-defined classifiers can be found [here](https://github.com/opencv/opencv/tree/master/data).
-
-## Configuration
-
-To setup OpenCV with Home Assistant, add the following section to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-image_processing:
- - platform: opencv
- source:
- - entity_id: camera.front_door
- classifier:
- mom: /path/to/classifier.xml
-```
-
-- **source** array (*Required*): List of image sources.
- - **entity_id** (*Required*): A camera entity id to get picture from.
- - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity.
-- **classifier** (*Optional*): Dictionary of name to path to the classifier XML file. If this field is not provided, a face classifier will be downloaded from OpenCV's GitHub repository.
-
-**classifier** may also be defined as a dictionary of names to classifier configurations:
-
-```yaml
- mom:
- file: /path/to/classifier/xml
- neighbors: 4
- min_size: (40, 40)
- scale: 1.1f
-```
-
-- **file** (*Required*): The path to the classifier XML file.
-- **scale** (*Optional*): The scale to perform when processing, this is a `float` value that must be greater than or equal to `1.0`, default is `1.1`.
-- **neighbors** (*Optional*): The minimum number of neighbors required for a match, default is `4`. The higher this number, the more picky the matching will be; lower the number, the more false positives you may experience.
diff --git a/source/_integrations/opengarage.markdown b/source/_integrations/opengarage.markdown
index 3f40985b3d9c..d92454e33bf4 100644
--- a/source/_integrations/opengarage.markdown
+++ b/source/_integrations/opengarage.markdown
@@ -12,6 +12,7 @@ ha_codeowners:
- '@danielhiversen'
ha_platforms:
- binary_sensor
+ - button
- cover
- sensor
ha_integration_type: integration
diff --git a/source/_integrations/opnsense.markdown b/source/_integrations/opnsense.markdown
index 06df9f5645ac..381548a3e388 100644
--- a/source/_integrations/opnsense.markdown
+++ b/source/_integrations/opnsense.markdown
@@ -14,7 +14,7 @@ ha_platforms:
ha_integration_type: integration
---
-[OPNsense](https://opnsense.org/) is an open source HardenedBSD based firewall
+[OPNsense](https://opnsense.org/) is an open source FreeBSD based firewall
and routing platform. There is currently support for the following device types
within Home Assistant:
diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown
index 5936e578d107..663b5bfc7ab1 100644
--- a/source/_integrations/opower.markdown
+++ b/source/_integrations/opower.markdown
@@ -19,8 +19,18 @@ The Opower integration allows you to get energy information from utilities that
More than 175 utilities use Opower. Currently only the following utilities are supported by this integration:
+- American Electric Power (AEP) subsidiaries
+ - AEP Ohio
+ - AEP Texas
+ - Appalachian Power
+ - Indiana Michigan Power
+ - Kentucky Power
+ - Public Service Company of Oklahoma (PSO)
+ - Southwestern Electric Power Company (SWEPCO)
+- City of Austin Utilities
- Consolidated Edison (ConEd) and subsidiaries
- Orange & Rockland Utilities (ORU)
+- Duquesne Light Company (DQE)
- Enmax Energy
- Evergy
- Exelon subsidiaries
@@ -33,6 +43,7 @@ More than 175 utilities use Opower. Currently only the following utilities are s
- Pacific Gas & Electric (PG&E)
- Portland General Electric (PGE)
- Puget Sound Energy (PSE)
+- Sacramento Municipal Utility District (SMUD)
- Seattle City Light (SCL)
When you add the Opower integration to Home Assistant, you will need to provide your utility account's authentication details to enable retrieving your energy data.
@@ -77,8 +88,8 @@ For electricity:
- Current bill electric cost to date
- Current bill electric forecasted usage (for the first few days of the bill this is 0)
- Current bill electric forecasted cost (for the first few days of the bill this is 0)
-- Typical monthly electric usage
-- Typical monthly electric cost
+- Typical monthly electric usage (based on the same month for previous years, not populated for accounts younger than a year)
+- Typical monthly electric cost (based on the same month for previous years, not populated for accounts younger than a year)
For gas:
@@ -86,8 +97,8 @@ For gas:
- Current bill gas cost to date
- Current bill gas forecasted usage (for the first few days of the bill this is 0)
- Current bill gas forecasted cost (for the first few days of the bill this is 0)
-- Typical monthly gas usage
-- Typical monthly gas cost
+- Typical monthly gas usage (based on the same month for previous years, not populated for accounts younger than a year)
+- Typical monthly gas cost (based on the same month for previous years, not populated for accounts younger than a year)
Note the unit for gas is CCF (centum cubic feet). 1 CCF is one hundred cubic feet which is equivalent to 1 therm.
diff --git a/source/_integrations/osoenergy.markdown b/source/_integrations/osoenergy.markdown
index 15882fec703f..b988c3f4ca4f 100644
--- a/source/_integrations/osoenergy.markdown
+++ b/source/_integrations/osoenergy.markdown
@@ -1,7 +1,7 @@
---
title: OSO Energy
description: Instructions on how to integrate OSO Energy devices with Home Assistant.
-ha_release: "2024.1"
+ha_release: '2024.1'
ha_category:
- Sensor
- Water Heater
@@ -10,6 +10,7 @@ ha_codeowners:
- '@osohotwateriot'
ha_domain: osoenergy
ha_platforms:
+ - sensor
- water_heater
ha_config_flow: true
ha_integration_type: integration
@@ -21,12 +22,33 @@ This OSO Energy integration uses a subscription key, which a user can create for
{% include integrations/config_flow.md %}
-## Platforms
-### Water Heater
+## Sensors
-The OSO Energy water heater platform integrates your OSO Energy devices into Home Assistant.
+The **OSO Energy** integration exposes OSO Energy data as a sensor. It provides the following sensors:
-The platform supports the following OSO Energy devices:
+- Heater Mode for water heaters.
+ - Indication of the current heater mode on the device.
+- Optimization Mode for water heaters.
+ - Indication of the way heating is managed by the device according to external factors. For example, electricity prices.
+- Power load (kW) for water heaters.
+ - Indication of the current power load of the water heater - how much energy is currently drawn out of the electricity grid.
+- Tapping capacity (kWh) for water heaters.
+ - Indication for quantity of energy that is stored and available for use at the moment - the current kWh equivalent capacity of the water heater.
+- Capacity mixed water at 40°C (L) for water heaters.
+ - Indication of the current quantity of water that can be drained out after mixing the water in the heater with the inlet tap water to produce water at 40°C.
+- V40 Min (L) for water heaters.
+ - The current minimum allowed quantity of mixed water at 40°C. When the current capacity drops below this threshold, the heater will turn on as a feature to guard against cold water.
+- Minimum Level of V40 Min (L) for water heaters.
+ - The lower boundary of the V40 Min sensor that can be achieved during normal operation of the water heater. Can vary depending on the type of the heater.
+- Maximum Level of V40 Min (L) for water heaters.
+ - The upper boundary of the V40 Min sensor that can be achieved during normal operation of the water heater. Can vary depending on the type of the heater.
+
+## Water heater
+
+The OSO Energy water heater integration integrates your OSO Energy devices into Home Assistant.
+
+It supports the following OSO Energy devices:
- Water Heaters
+- Sensors
diff --git a/source/_integrations/otbr.markdown b/source/_integrations/otbr.markdown
index b2905551e828..1e5c5b07bc0d 100644
--- a/source/_integrations/otbr.markdown
+++ b/source/_integrations/otbr.markdown
@@ -12,6 +12,14 @@ ha_config_flow: true
---
The Open Thread Border Router integration allows calling an Open Thread Border Router's REST API from Python and via WebSocket.
-The integration is automatically set up when the "Silicon Labs Multiprotocol" add-on is installed.
+
+This integration is installed automatically when the **Open Thread Border Router** add-on is installed. For Home Assistant Yellow or SkyConnect refer to the following procedures:
+
+- [Enabling Thread on Home Assistant Yellow](https://yellow.home-assistant.io/procedures/enable-thread/)
+- [Enabling Thread on Home Assistant SkyConnect](https://skyconnect.home-assistant.io/procedures/enable-thread/)
+
+The integration is also installed automatically when enabling the experimental **Silicon Labs Multiprotocol** support.
+
+Installing this integration manually is an advanced use case, for example if you run your own border router. If you do have such a use case, follow these steps:
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/ourgroceries.markdown b/source/_integrations/ourgroceries.markdown
index 8887fe86e44d..9fb27b4a781a 100644
--- a/source/_integrations/ourgroceries.markdown
+++ b/source/_integrations/ourgroceries.markdown
@@ -12,6 +12,15 @@ ha_domain: ourgroceries
ha_platforms:
- todo
ha_integration_type: integration
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - url: https://www.ourgroceries.com/
+ title: OurGroceries
---
This integration connects with an [OurGroceries](https://www.ourgroceries.com/) account and integrates your shopping lists into Home Assistant.
diff --git a/source/_integrations/overkiz.markdown b/source/_integrations/overkiz.markdown
index 9c41f6d850d6..bedb03d208e7 100644
--- a/source/_integrations/overkiz.markdown
+++ b/source/_integrations/overkiz.markdown
@@ -25,6 +25,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_domain: overkiz
ha_dhcp: true
ha_zeroconf: true
diff --git a/source/_integrations/panel_iframe.markdown b/source/_integrations/panel_iframe.markdown
deleted file mode 100644
index 2ab32f0e0a17..000000000000
--- a/source/_integrations/panel_iframe.markdown
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: iFrame panel
-description: Instructions on how to add iFrames in the front end of Home Assistant.
-ha_category:
- - Front end
-ha_release: 0.25
-ha_quality_scale: internal
-ha_codeowners:
- - '@home-assistant/frontend'
-ha_domain: panel_iframe
-ha_integration_type: integration
----
-
-The `panel_iframe` support allows you to add additional panels to your Home Assistant frontend. The panels are listed in the sidebar and can contain external resources like the web frontend of your router, your monitoring system, or your media server.
-
-
-If you are accessing Home Assistant over HTTPS using SSL, you cannot access HTTP sites through an iframe panel.
-
-
-To enable Panel iFrames in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-panel_iframe:
- router:
- title: "Router"
- url: "http://192.168.1.1"
- fridge:
- title: "Fridge"
- url: "http://192.168.1.5"
- icon: mdi:fridge
- otherapp:
- title: "Other App"
- url: "/otherapp"
- require_admin: true
-```
-
-{% configuration %}
-panel_iframe:
- description: Enables the panel_iframe integration. Only allowed once.
- required: true
- type: map
- keys:
- panel_name:
- description: Name of the panel. Only allowed once.
- required: true
- type: map
- keys:
- title:
- description: Friendly title for the panel. Will be used in the sidebar.
- required: true
- type: string
- url:
- description: The absolute URL or relative URL with an absolute path to open.
- required: true
- type: string
- icon:
- description: Icon for entry.
- required: false
- type: icon
- require_admin:
- description: If admin access is required to see this iframe.
- required: false
- type: boolean
- default: false
-{% endconfiguration %}
-
-
-
-Do **not** create one that is named `lovelace` it will overwrite existing Dashboards, causing it to never load.
-
-
diff --git a/source/_integrations/peco.markdown b/source/_integrations/peco.markdown
index 6de605ecfc5a..e8483457470c 100644
--- a/source/_integrations/peco.markdown
+++ b/source/_integrations/peco.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
- '@IceBotYT'
ha_domain: peco
ha_platforms:
+ - binary_sensor
- sensor
ha_integration_type: integration
---
diff --git a/source/_integrations/mypermobil.markdown b/source/_integrations/permobil.markdown
similarity index 88%
rename from source/_integrations/mypermobil.markdown
rename to source/_integrations/permobil.markdown
index d3ed5f348b5c..30b8a219b001 100644
--- a/source/_integrations/mypermobil.markdown
+++ b/source/_integrations/permobil.markdown
@@ -10,8 +10,9 @@ ha_codeowners:
- '@IsakNyberg'
ha_config_flow: true
ha_platforms:
- - Sensor
-ha_integration_type: hub
+ - binary_sensor
+ - sensor
+ha_integration_type: integration
---
The **MyPermobil** integration allows you to view various sensors with information about your Permobil wheelchair. For example: battery status, distance traveled, and number of seating adjustments. The values of the sensors may be delayed by several minutes and should not be relied on for any crucial applications. For the integration to work, you must ensure that _voice assistant linking_ is activated in the MyPermobil app. To do this, open the app and navigate to **Settings** > **My Account** > **Connection Settings**.
@@ -20,7 +21,7 @@ The **MyPermobil** integration allows you to view various sensors with informati
## Sensors
-A total of 11 sensors are available:
+A total of 13 sensors are available:
- **Battery charge**
The current battery state of the wheelchair as a percentage.
@@ -44,3 +45,7 @@ A total of 11 sensors are available:
The number of adjustments sessions today. Multiple different adjustment within a short time period are counted as a single sessions.
- **Highest number of adjustments**
The highest number of adjustments ever recorded in a single day.
+- **Longest distance traveled**
+ The largest distance traveled ever recorded in a single day.
+- **Is charging**
+ Binary sensor that is true when the Permobil wheelchair is charging.
diff --git a/source/_integrations/pi_hole.markdown b/source/_integrations/pi_hole.markdown
index 73638e9ee4b1..cb1e27b6ef6d 100644
--- a/source/_integrations/pi_hole.markdown
+++ b/source/_integrations/pi_hole.markdown
@@ -10,7 +10,6 @@ ha_iot_class: Local Polling
ha_config_flow: true
ha_release: 0.28
ha_codeowners:
- - '@johnluetke'
- '@shenxn'
ha_domain: pi_hole
ha_platforms:
@@ -63,3 +62,7 @@ data:
target:
entity_id: all
```
+
+## Switches
+
+The integration creates a switch for the Pi-hole allowing you to toggle the Pi-hole on and off.
diff --git a/source/_integrations/ping.markdown b/source/_integrations/ping.markdown
index 178d5e15f6a4..741931d29cc6 100644
--- a/source/_integrations/ping.markdown
+++ b/source/_integrations/ping.markdown
@@ -12,6 +12,7 @@ ha_domain: ping
ha_platforms:
- binary_sensor
- device_tracker
+ - sensor
ha_integration_type: integration
ha_config_flow: true
ha_codeowners:
@@ -21,14 +22,15 @@ ha_codeowners:
There is currently support for the following device types within Home Assistant:
- [Binary sensor](#binary-sensor)
+- [Sensors](#sensors)
- [Presence detection](#presence-detection)
{% include integrations/config_flow.md %}
## Polling interval
-By default, the integration will ping the device every 5 minutes.
-If you wish to do a ping more frequently, you can disable the automatic refresh in the integration's system options (Enable polling for updates) and create your own automation with your desired frequency.
+By default, the integration will ping the device every 30 seconds.
+If you wish to do a ping at a different interval, you can disable the automatic refresh in the integration's system options (Enable polling for updates) and create your own automation with your desired frequency.
For more detailed steps on how to define a custom interval, follow the procedure below.
@@ -47,14 +49,18 @@ To change the settings, go to {% my integrations title="**Settings** > **Devices
## Binary sensor
The `ping` binary sensor platform allows you to use `ping` to send ICMP echo requests. This way you can check if a given host is online and determine the round trip times from your Home Assistant instance to that system.
-This sensor is enabled by default. The default polling interval is 5 minutes.
+This sensor is enabled by default. The default polling interval is 30 seconds.
-The sensor exposes the different round trip times in milliseconds measured by `ping` as attributes:
+## Sensors
-- `round_trip_time_mdev`
-- `round_trip_time_avg`
-- `round_trip_time_min`
-- `round_trip_time_max`
+The integration exposes the different round trip times milliseconds as entities:
+
+- `Round Trip Time Mean Deviation` - the standard deviation
+- `Round Trip Time Average` - the average round trip time
+- `Round Trip Time Minimum` - the shortest round trip time
+- `Round Trip Time Maximum` - the longest round trip time
+
+**These entities are disabled by default and can be enabled in the UI if needed.**
When run on Windows systems, the round trip time attributes are rounded to the nearest millisecond and the mdev value is unavailable.
@@ -70,4 +76,4 @@ The device tracker is disabled by default and can be enabled in the UI.
Please keep in mind that modern smart phones will usually turn off WiFi when they are idle. Simple trackers like this may not be reliable on their own.
-See the [person integration page](/integrations/person/) for instructions on how to configure the people to be tracked.
\ No newline at end of file
+See the [person integration page](/integrations/person/) for instructions on how to configure the people to be tracked.
diff --git a/source/_integrations/piper.markdown b/source/_integrations/piper.markdown
index 2a672d447637..c5b5997631fd 100644
--- a/source/_integrations/piper.markdown
+++ b/source/_integrations/piper.markdown
@@ -13,10 +13,15 @@ ha_codeowners:
- '@synesthesiam'
ha_config_flow: true
ha_platforms:
+ - binary_sensor
+ - number
+ - select
- stt
+ - switch
- tts
- wake_word
ha_iot_class: Local Push
+ha_zeroconf: true
---
{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/portlandgeneral.markdown b/source/_integrations/portlandgeneral.markdown
index 4c84466ecee4..02a76d7f4073 100644
--- a/source/_integrations/portlandgeneral.markdown
+++ b/source/_integrations/portlandgeneral.markdown
@@ -1,16 +1,16 @@
---
title: Portland General Electric (PGE)
-description: Get energy usage from Portland General Electric (PGE) using the Opower integration
+description: Connect and control your Portland General Electric (PGE) devices using the Opower integration
ha_category:
- Energy
- Sensor
-ha_release: 2023.9
+ha_release: 2023.8
ha_domain: portlandgeneral
ha_integration_type: virtual
ha_supporting_domain: opower
ha_supporting_integration: Opower
ha_codeowners:
- - '@jrigling'
+ - '@tronikos'
ha_config_flow: true
ha_platforms:
- sensor
diff --git a/source/_integrations/powerwall.markdown b/source/_integrations/powerwall.markdown
index 3dddd9ae7415..67e5580ff516 100644
--- a/source/_integrations/powerwall.markdown
+++ b/source/_integrations/powerwall.markdown
@@ -34,7 +34,7 @@ There is currently support for the following device types within Home Assistant:
### Binary sensor
-The following binary sensors are added for each Powerwall:
+The following binary sensors are added for each Backup Gateway:
- Grid Services - On/ Off
- Grid Status - On/ Off
@@ -44,34 +44,44 @@ The following binary sensors are added for each Powerwall:
### Sensor
-The following sensors are added for each Powerwall:
+The following sensors are added for each Backup Gateway aggregated across all Powerwalls:
- Powerwall Backup Reserve - Reserve energy for grid outages in %
-- Powerwall Battery Now - Usage in kW
+- Powerwall Battery Now - Power in kW (negative for charging)
- Powerwall Charge - Percent charge remaining in %
-- Powerwall Generator Now - Usage in kW (if applicable)
-- Powerwall Load Now - Load usage in kW
-- Powerwall Solar Now - Solar usage in kW (if applicable)
-- Powerwall Site Now - Site usage in kW
+- Powerwall Generator Now - Power in kW (if applicable)
+- Powerwall Load Now - Power in kW
+- Powerwall Solar Now - Power in kW (if applicable)
+- Powerwall Site Now - Power in kW (negative for grid export)
- Powerwall Backup Reserve - Percentage of battery which will be reserved for a grid outage
-- Frequency/ Average Current/ Average Voltage Now
+- Frequency/ Average Current/ Average Voltage Now - in Hertz, Amps and Volts
-The following sensors show the direction of energy:
+The following sensors measure lifetime energy flow:
- Powerwall Solar Export - Solar energy exported in kWh
-- Powerwall Solar Import - Solar energy imported in kWh
+- Powerwall Solar Import - Solar energy imported in kWh (generally near zero)
- Powerwall Site Export - Site energy exported in kWh
- Powerwall Site Import - Site energy imported in kWh
- Powerwall Battery Export - Battery energy exported in kWh
- Powerwall Battery Import - Battery energy imported in kWh
-- Powerwall Load Export - Load energy exported in kWh
+- Powerwall Load Export - Load energy exported in kWh (generally zero)
- Powerwall Load Import - Load energy imported in kWh
-- Powerwall Generator Export - Generator energy exported in kWh
+- Powerwall Generator Export - Generator energy exported in kWh
- Powerwall Generator Import - Generator energy imported in kWh
+A Powerwall battery device for each battery, connected to the Powerwall Gateway, with the following sensors:
+- Powerwall Battery Capacity - Energy in kWh
+- Powerwall Battery Remaining - Remaining energy in kWh
+- Frequency/ Average Current/ Average Voltage Now in Hertz, Amps and Volts
+- Powerwall Battery Power - Battery power in kW (negative for charging)
+- Powerwall Battery Export - Battery energy exported in kWh
+- Powerwall Battery Import - Battery energy imported in kWh
+- Powerwall Grid State - Battery grid compliance
+
+
### Switch
-The following switches are added for each Powerwall:
+The following switch is added for the Powerwall Backup Gateway:
- Off-Grid operation - Take your Powerwall off-grid (simulate a grid outage)
diff --git a/source/_integrations/profiler.markdown b/source/_integrations/profiler.markdown
index 1c78faa4a868..cdad5ac398a1 100644
--- a/source/_integrations/profiler.markdown
+++ b/source/_integrations/profiler.markdown
@@ -85,6 +85,8 @@ Start logging the growth of objects in memory.
Periodically log the growth of new objects in memory. This service's primary use case is finding memory leaks. This service can be run for long periods to find slow leaks. For finding fast leaks, `profiler.start_log_object_sources` is preferred; however, it is much more CPU intensive.
+See the [corresponding documentation for `growth()`](https://mg.pov.lt/objgraph/objgraph.html#objgraph.growth) regarding the format in which this data is logged.
+
### Service profiler.stop_log_objects
{% my developer_call_service badge service="profiler.stop_log_objects" %}
@@ -187,3 +189,25 @@ Each upcoming scheduled item is logged similar to the below example:
{% my developer_call_service badge service="profiler.lru_stats" %}
Logs statistics from [lru_cache](https://docs.python.org/3/library/functools.html#functools.lru_cache) and [lru-dict](https://pypi.org/project/lru-dict/) to help tune Home Assistant and locate memory leaks.
+
+### Service profiler.set_asyncio_debug
+
+{% my developer_call_service badge service="profiler.set_asyncio_debug" %}
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | -------------------------------------- |
+| `enabled` | yes | Boolean to enable asyncio debug. |
+
+When `set_asyncio_debug` is enabled, `asyncio` will run in [debug mode](https://docs.python.org/3/library/asyncio-dev.html#debug-mode). Use this service to help identify an integration that is blocking the event loop.
+
+### Service profiler.log_current_tasks
+
+{% my developer_call_service badge service="profiler.log_current_tasks" %}
+
+This service can help track down task leaks, or find tasks that are delaying startup.
+
+An example is below:
+
+```txt
+[homeassistant.components.profiler] Task: wait_for=>
+```
diff --git a/source/_integrations/proximity.markdown b/source/_integrations/proximity.markdown
index b63cf2a915e4..8bb23da47ff8 100644
--- a/source/_integrations/proximity.markdown
+++ b/source/_integrations/proximity.markdown
@@ -11,9 +11,13 @@ ha_iot_class: Calculated
ha_integration_type: integration
ha_codeowners:
- '@mib1185'
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_config_flow: true
---
-The `proximity` integration allows you to monitor the proximity of devices or persons to a particular [zone](/integrations/zone/) and the direction of travel. The result is an entity created in Home Assistant which maintains the proximity data.
+The `proximity` integration allows you to monitor the proximity of devices or persons to a particular [zone](/integrations/zone/) and the direction of travel.
This integration is useful to reduce the number of automation rules required when wanting to perform automations based on locations outside a particular zone. The [zone](/docs/automation/trigger#zone-trigger) and [state](/docs/automation/trigger#state-trigger) based triggers allow similar control but the number of rules grows exponentially when factors such as direction of travel need to be taken into account.
@@ -22,95 +26,54 @@ Some examples of its use include:
- Increase thermostat temperature as you near home
- Decrease temperature the further away from home you travel
-The Proximity entity which is created has the following values:
-
-- `state`: Distance from the monitored zone (in `unit_of_measurement`)
-- `dir_of_travel`: Direction of the closest device or person to the monitored zone. Values are:
- - `not set`
- - `arrived`
- - `towards`
- - `away_from`
- - `unknown`
- - `stationary`
-- `unit_of_measurement`: Measurement of distance. Values are:
- - `km`
- - `m`
- - `mi`
- - `yd`
- - `ft`
-- `nearest`: The device or person which is nearest to the zone
-
-To enable this integration in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-proximity:
- home:
- ignored_zones:
- - work
- devices:
- - device_tracker.car1
- tolerance: 50
- unit_of_measurement: mi
-```
+{% include integrations/config_flow.md %}
+
+
+When adding the **Proximity** integration, you are prompted to define the **Tolerance distance**. The tolerance distance is used to calculate the direction of travel in meters (m) to filter out small GPS coordinate changes.
+
+
+## Sensors
+
+The following sensor entities will be created.
+
+### Distance
+
+For each tracked [device](/integrations/device_tracker/) or [person](/integrations/person/), a sensor is created showing the distance from the monitored zone in a unit depending on your [Home Assistant Unit System](/docs/configuration/basic) selection. When a tracked person or device enters the monitored zone, the distance is set to 0.
+
+### Direction of travel
+
+For each tracked device or person, a sensor is created showing the direction of travel to or from the monitored zone. Possible states are:
+
+- `arrived`
+- `away_from`
+- `stationary`
+- `towards`
+- `unknown`
+
+
+To calculate the distance and the direction of travel for a tracked device or person, they must specify a geo-location.
+
+
+### Nearest device
+
+A sensor is created showing the device or person which is nearest (_shortest distance_) to the monitored zone. If several devices or persons are at the same nearest distance, this sensor displays them all.
+
+### Nearest distance
+
+This sensor shows the distance of the device or person nearest to the monitored zone. The unit depends on your settings for the [Home Assistant unit system](/docs/configuration/basic). When a tracked person or device enters the monitored zone, the distance is set to 0.
+
+### Nearest Direction of travel
+
+This sensor shows the direction of travel of the nearest device or person to the monitored zone. Possible states are:
+
+- `arrived`
+- `away_from`
+- `stationary`
+- `towards`
+- `unknown`
### Video tutorial
-This video tutorial explains how to set up geofencing in Home Assistant using the proximity integration.
-
-
-
-{% configuration %}
-friendly_name:
- description: The name of the proximity entity.
- required: true
- type: map
- keys:
- zone:
- description: The zone to which this integration is measuring the distance to. Default is the `home` zone.
- required: false
- type: string
- ignored_zones:
- description: Where proximity is not calculated for a device or person (either the device being monitored or ones being compared (e.g., work or school).
- required: false
- type: list
- devices:
- description: A list of devices and/or persons to compare location against to check closeness to the configured zone.
- required: false
- type: list
- tolerance:
- description: The tolerance used to calculate the direction of travel in meters (m) to filter out small GPS coordinate changes.
- required: false
- type: integer
- unit_of_measurement:
- description: The unit of measurement for distance. Valid values are (km, m, mi, yd, ft) [kilometers, meters, miles, yards and feet respectively].
- required: false
- type: string
- default: km
-{% endconfiguration %}
-
-To add multiple proximity components, add a mapping to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-proximity:
- home:
- ignored_zones:
- - work
- - school
- devices:
- - device_tracker.car1
- - device_tracker.iphone1
- - device_tracker.iphone2
- tolerance: 50
- unit_of_measurement: mi
- home3:
- zone: home3
- devices:
- - device_tracker.iphone1
- tolerance: 50
- work:
- zone: work
- devices:
- - person.paulus
- tolerance: 10
-```
+
+This comprehensive video tutorial explains how to utilize the Proximity integration to automatically adjust the heating in your home based on your presence, whether you're leaving or entering an area around your house.
+
+
diff --git a/source/_integrations/prusalink.markdown b/source/_integrations/prusalink.markdown
index 7314fba00e00..d1cf0089f336 100644
--- a/source/_integrations/prusalink.markdown
+++ b/source/_integrations/prusalink.markdown
@@ -16,26 +16,37 @@ ha_platforms:
- camera
- sensor
ha_dhcp: true
+related:
+ - url: https://help.prusa3d.com/article/prusa-connect-and-prusalink-explained_302608
+ title: PrusaLink documentation
+ - url: https://help.prusa3d.com/guide/prusalink-and-prusa-connect-setup-mk3-s-_221744
+ title: PrusaLink installation guide for Prusa MK3 with Raspberry Pi Zero W
+ - url: https://help.prusa3d.com/guide/prusalink-prusa-connect-with-rpi-3-4-usb-mk2-5-s-mk3-s-_469341
+ title: Sentence trigger
---
-The PrusaLink integration allows you to monitor your [Prusa 3D printer](https://www.prusa3d.com) and its progress with your Home Assistant installation. This integration works with Prusa MINI, Prusa MK3.9/MK4 and Prusa XL. It does not work with the older Raspberry Pi Prusa Link printers.
+The **PrusaLink** {% term integration %} allows you to monitor your [Prusa 3D printer](https://www.prusa3d.com) and its progress with your Home Assistant installation. This integration works with Prusa MINI/MINI+, Prusa MK3.9/MK4, Prusa XL, and with the older Raspberry Pi-based Prusa MK2.5/MK3.
-This integration has been updated to utilize the latest v1 API endpoints, which require firmware version 4.7.0 or later. If you own a Prusa Mini, please make sure your printer is running firmware 5.1.0 or a more recent version. Firmware versions 4.7.x and 5.0.x are not available for this model.
+This integration has been updated to utilize the latest v1 API endpoints, which require firmware version 4.7.0 or later. If you own a Prusa MINI/MINI+, please make sure your printer is running firmware 5.1.0 or a more recent version. Firmware versions 4.7.x and 5.0.x are not available for this model. For Prusa MK2.5/MK3, this integration requires PrusaLink version 0.7.2 or later.
Firmware update guides can be found here:
- - [Prusa Mini](https://help.prusa3d.com/article/firmware-updating-mini-mini_124784)
- - [Prusa MK4/XL](https://help.prusa3d.com/article/how-to-update-firmware-mk4-xl_453086)
+ - [Prusa MINI/MINI+](https://help.prusa3d.com/article/firmware-updating-mini-mini_124784)
+ - [Prusa MK3.9/MK4/XL](https://help.prusa3d.com/article/how-to-update-firmware-mk4-xl_453086)
+ - [Prusa MK2.5/MK3](https://help.prusa3d.com/guide/how-to-update-prusalink-mk2-5-s-mk3-s-_650837)
-To obtain the hostname, username, and password:
+## Obtaining hostname, username, and password
+
+### Prusa MINI/MINI+/MK3.9/MK4/XL
- On your printer, navigate to **Settings** > **Network** > **PrusaLink**.
- Find the device's **IP address**. Alternatively, you can look for the printer's IP address or hostname on your router.
- Note that for some models, the username may not be visible, as it is hardcoded to `maker`.
- - Depending on your model, the entry may not be called **Password**, but **API key**.
+ - Depending on your model, the password entry may not be called **Password**, but **API key**.
-{% include integrations/config_flow.md %}
+### Prusa MK2.5/MK3
-## Related topics
+ - The device's **IP address** is displayed on the printer LCD after PrusaLink starts up. Alternatively, you can look for the printer's IP address or hostname on your router.
+ - Use the **username** and **password** you entered during the initial PrusaLink setup (not the API key).
-- [PrusaLink documentation](https://help.prusa3d.com/article/prusa-connect-and-prusalink-explained_302608)
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/psoklahoma.markdown b/source/_integrations/psoklahoma.markdown
index 38c622a65526..17ae4af69c0b 100644
--- a/source/_integrations/psoklahoma.markdown
+++ b/source/_integrations/psoklahoma.markdown
@@ -4,7 +4,7 @@ description: Get energy usage from Public Service Company of Oklahoma (PSO) usin
ha_category:
- Energy
- Sensor
-ha_release: 2024.1
+ha_release: 2023.8
ha_domain: psoklahoma
ha_integration_type: virtual
ha_supporting_domain: opower
diff --git a/source/_integrations/pushbullet.markdown b/source/_integrations/pushbullet.markdown
index 17c1ea2c615a..97339a83a2ef 100644
--- a/source/_integrations/pushbullet.markdown
+++ b/source/_integrations/pushbullet.markdown
@@ -18,7 +18,7 @@ ha_config_flow: true
There is currently support for the following device types within Home Assistant:
-- [Sensor](#sensor)
+- [Sensor](#sensors)
- [Notifications](#notifications)
@@ -60,12 +60,12 @@ The Pushbullet notification platform sends messages to [Pushbullet](https://www.
Pushbullet is a notify platform and thus can be controlled by calling the notify service [as described here](/integrations/notify/). It will send a notification to all devices registered in the Pushbullet account. An optional **target** parameter can be given to Pushbullet to specify specific account's devices, contacts or channels.
-Type | Prefix | Suffix | Example
----- | ------ | ------ | -------
-Device | `device/` | Device nickname | `device/iphone`
-Channel | `channel/` | Channel tag | `channel/my_home`
-Email | `email/` | Contact's email address | `email/email@example.com`
-SMS | `sms/` | Contact's phone number | `sms/0612345678`
+| Type | Prefix | Suffix | Example |
+| ------- | ---------- | ----------------------- | ------------------------- |
+| Device | `device/` | Device nickname | `device/iphone` |
+| Channel | `channel/` | Channel tag | `channel/my_home` |
+| Email | `email/` | Contact's email address | `email/email@example.com` |
+| SMS | `sms/` | Contact's phone number | `sms/0612345678` |
If using targets, your own account's email address functions as 'send to all devices'. All targets are verified (if exists) before sending, except email.
@@ -141,6 +141,6 @@ action:
-Don't forget to [allowlist external directories](/docs/configuration/basic/), so Home Assistant has access to them.
+Don't forget to [allowlist external directories](/integrations/homeassistant/#allowlist_external_dirs), so Home Assistant has access to them.
diff --git a/source/_integrations/pushover.markdown b/source/_integrations/pushover.markdown
index a9a357eb55c6..7d5351f6b329 100644
--- a/source/_integrations/pushover.markdown
+++ b/source/_integrations/pushover.markdown
@@ -88,7 +88,6 @@ alexa:
service: notify.notify
data:
message: "The location of {{ User }} has been queried via Alexa."
- data:
title: "Home Assistant"
target: pixel
data:
diff --git a/source/_integrations/python_script.markdown b/source/_integrations/python_script.markdown
index 0ccc00e16a2e..49069c5f9876 100644
--- a/source/_integrations/python_script.markdown
+++ b/source/_integrations/python_script.markdown
@@ -19,6 +19,7 @@ This integration allows you to write Python scripts that are exposed as services
| `time` | The stdlib `time` available as limited access.
| `datetime` | The stdlib `datetime` available as limited access.
| `dt_util` | The ` homeassistant.util.dt` module.
+| `output` | An empty dictionary. Add items to return data as [`response_variable`](/docs/scripts/service-calls#use-templates-to-handle-response-data).
Other imports like `min`, `max` are available as builtins. See the [python_script](https://github.com/home-assistant/core/blob/dev/homeassistant/components/python_script/__init__.py) source code for up-to-date information on the available objects inside the script.
@@ -132,10 +133,33 @@ Services can also respond with data. Retrieving this data in your Python script
```python
# get_forecast.py
-service_data = {"type": "daily", "entity_id": "weather.YOUR_HOME"}
-current_forecast = hass.services.call("weather", "get_forecast", service_data, blocking=True, return_response=True)
+service_data = {"type": "daily", "entity_id": ["weather.YOUR_HOME", "weather.YOUR_SCHOOL"]}
+current_forecast = hass.services.call("weather", "get_forecasts", service_data, blocking=True, return_response=True)
```
+## Returning data
+
+Python script itself can respond with data. Just add items to the `output` variable in your `python_script` and the whole dictionary will be returned. These can be used in automations to act upon the command results using [`response_variable`](/docs/scripts/service-calls#use-templates-to-handle-response-data).
+
+```python
+# hello_world.py
+output["hello"] = f"hello {data.get('name', 'world')}"
+```
+
+The above `python_script` can be called using the following YAML and return a result to later steps.
+
+{% raw %}
+
+```yaml
+- service: python_script.hello_world
+ response_variable: python_script_output
+- service: notify.mobile_app_iphone
+ data:
+ message: "{{ python_script_output['hello'] }}"
+```
+
+{% endraw %}
+
## Documenting your Python scripts
You can add names and descriptions for your Python scripts that will be shown in the frontend. To do so, simply create a `services.yaml` file in your `/python_scripts` folder. Using the above Python script as an example, the `services.yaml` file would look like:
diff --git a/source/_integrations/qbittorrent.markdown b/source/_integrations/qbittorrent.markdown
index 60010a3df09c..7a1cdd61ac16 100644
--- a/source/_integrations/qbittorrent.markdown
+++ b/source/_integrations/qbittorrent.markdown
@@ -9,6 +9,7 @@ ha_iot_class: Local Polling
ha_domain: qbittorrent
ha_codeowners:
- '@geoffreylagaisse'
+ - '@finder39'
ha_platforms:
- sensor
ha_integration_type: service
@@ -27,5 +28,48 @@ This sensor requires the qBittorrent Web UI enabled. The [official reference](ht
The qBittorrent integration will add the following sensors:
- `sensor.qbittorrent_status`: The status of qBittorrent - `up_down`, `seeding`, `downloading` or `idle`.
-- `sensor.qbittorrent_up_speed`: The current total upload speed in kB/s.
-- `sensor.qbittorrent_down_speed`: The current total download speed in kB/s.
+- `sensor.qbittorrent_upload_speed`: The current total upload speed in kB/s.
+- `sensor.qbittorrent_download_speed`: The current total download speed in kB/s.
+- `sensor.qbittorrent_all_torrents`: The current total torrents in qBittorrent.
+- `sensor.qbittorrent_active_torrents`: The current active torrents in qBittorrent.
+- `sensor.qbittorrent_inactive_torrents`: The current inactive torrents in qBittorrent.
+- `sensor.qbittorrent_paused_torrents`: The current paused torrents in qBittorrent.
+
+## Services
+
+### Service `qbittorrent.get_torrents`
+
+This service populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data)
+with a dictionary of torrents based on the provided filter.
+
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ---------------------------------------------- | --------------------------------------------------- |
+| `device` | no | The device you'd like to check the torrents of | all, active, inactive, paused, downloading, seeding |
+| `torrent_filter` | no | The type of torrents you want in the response | all, active, inactive, paused, downloading, seeding |
+
+```yaml
+service: qbittorrent.get_torrents
+data:
+ filter: "all"
+response_variable: torrents
+```
+
+The response data contains the field `torrents` which contains a dictionary of torrents. The names of the torrents are the keys.
+
+### Service `qbittorrent.get_all_torrents`
+
+This service populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data)
+with a dictionary of torrents based on the provided filter.
+
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | --------------------------------------------- | --------------------------------------------------- |
+| `torrent_filter` | no | The type of torrents you want in the response | all, active, inactive, paused, downloading, seeding |
+
+```yaml
+service: qbittorrent.get_all_torrents
+data:
+ filter: "all"
+response_variable: all_torrents
+```
+
+The response data contains the field `all_torrents`, which contains a dictionary of integrations, which each contains a dictionary of torrents. The names of the torrents are the keys.
diff --git a/source/_integrations/qingping.markdown b/source/_integrations/qingping.markdown
index cf2854f69a6f..973d65a53967 100644
--- a/source/_integrations/qingping.markdown
+++ b/source/_integrations/qingping.markdown
@@ -9,7 +9,6 @@ ha_release: 2022.9
ha_iot_class: Local Push
ha_codeowners:
- '@bdraco'
- - '@skgsergio'
ha_domain: qingping
ha_config_flow: true
ha_platforms:
@@ -34,3 +33,4 @@ The Qingping integration will automatically discover devices once the [Bluetooth
- [Motion & Ambient Light Sensor](https://www.qingping.co/motion-light-sensor/overview) (CGPR1)
- [Temp RH M](https://www.qingping.co/temp-rh-monitor/overview#mi) (CGG1)
- [Temp RH Pro E](https://www.qingping.co/temp-rh-monitor-pro-e/overview) (CGF1W)
+- [CO2 Temp RH](https://www.qingping.co/co2-temp-rh-monitor/overview) (GCP22C)
diff --git a/source/_integrations/rabbitair.markdown b/source/_integrations/rabbitair.markdown
new file mode 100644
index 000000000000..3f449eabcbee
--- /dev/null
+++ b/source/_integrations/rabbitair.markdown
@@ -0,0 +1,59 @@
+---
+title: Rabbit Air
+description: Instructions on how to integrate Rabbit Air air purifier within Home Assistant.
+ha_category:
+ - Fan
+ha_iot_class: Local Polling
+ha_release: 2024.2
+ha_codeowners:
+ - '@rabbit-air'
+ha_domain: rabbitair
+ha_config_flow: true
+ha_zeroconf: true
+ha_platforms:
+ - fan
+ha_integration_type: integration
+---
+
+The Rabbit Air integration lets you control your air purifier over the local network. The following device models are currently supported:
+
+- MinusA2 (2-nd generation)
+- A3
+
+The fan platform of this integration allows you to turn the unit on/off, select the preset mode, or set the speed manually.
+
+## Prerequisites
+
+To set up the integration, you will need to know a device address and an access token.
+
+1. Open the Rabbit Air mobile app. You will see a list of devices connected to your account.
+2. Tap the list item, and the device control page will open.
+3. On the device page, select the **Edit** button. You will see a page with the device location and name settings.
+4. On this page, quickly tap **Serial Number** several times until you see two more previously hidden lines. The first is the device ID, and the second is the access token.
+
+Note that the device ID is used as an mDNS name of the device. So you can specify it as the "Host" value by adding the suffix ".local" at the end.
+
+For example, you got:
+
+
+
+Then you can use `abcdef1234_123456789012345678.local` as the **Host** and `0123456789ABCDEF0123456789ABCDEF` as the **Access Token**.
+
+In some cases the access token may not be available right away, then you will see a "Tap for setup user key" message instead. To generate the access token, tap on this message and follow the instructions. If the app says "your device is not supported", it probably means that you are trying to connect to a first-generation MinusA2 model (an older hardware revision). It is not yet supported by this integration.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+host:
+ description: "Hostname or IP address of the device."
+ required: true
+ type: string
+access_token:
+ description: "Access Token that can be obtained in the Rabbit Air app."
+ required: true
+ type: string
+{% endconfiguration_basic %}
diff --git a/source/_integrations/rachio.markdown b/source/_integrations/rachio.markdown
index 0f33473fcc8e..f58ecddc2ca3 100644
--- a/source/_integrations/rachio.markdown
+++ b/source/_integrations/rachio.markdown
@@ -10,6 +10,7 @@ ha_release: 0.73
ha_domain: rachio
ha_codeowners:
- '@bdraco'
+ - '@rfverbruggen'
ha_config_flow: true
ha_homekit: true
ha_dhcp: true
@@ -38,7 +39,7 @@ They will be automatically added if the Rachio integration is loaded.
-In order for Rachio switches and sensors to update, your Home Assistant instance must be accessible from the internet, either via Home Assistant Cloud or another method. See the [Remote Access documentation](/docs/configuration/remote/) for more information.
+In order for Rachio switches and sensors to update, your Home Assistant instance must be accessible from the internet, either via Home Assistant Cloud or another method. See the [Remote Access documentation](/docs/configuration/remote/) for more information. The smart hose timers use polling and don't require external access to be setup.
@@ -49,6 +50,10 @@ After setting up the integration, change the options to set the duration in minu
+### Smart hose timers
+
+The Rachio smart hose timers are not currently capable of receiving real-time updates. Instead, they rely on polling. Because of this, the current state of valves started from a schedule or the physical button will not show up immediately. Polling occurs every 2 minutes when one base station is used, with an additional minute added for every additional base station to remain with the API rate limit. Up to 4 valves can be paired to a single base station.
+
### iFrame
If you would like to see and control more detailed zone information, create an [iFrame](/integrations/panel_iframe/) that renders the Rachio web app.
@@ -63,12 +68,25 @@ panel_iframe:
## Switch
-The `rachio` switch platform allows you to toggle zones and schedules connected to your [Rachio irrigation system](https://rachio.com/) on and off.
+The `rachio` switch platform allows you to toggle zones, valves, and schedules connected to your [Rachio irrigation system](https://rachio.com/) on and off.
-Once configured, a switch will be added for every zone that is enabled on every controller in the account provided and a switch to start or stop every schedule on a controller. There will also be a switch to toggle each controller's standby mode, as well as to activate a 24 hour rain delay on the device.
+Once configured, a switch will be added for every zone that is enabled on every controller in the account provided, as well as a switch for each smart hose timer valve and a switch to start or stop every schedule on a controller. There will also be a switch to toggle each controller's standby mode, as well as to activate a 24-hour rain delay on the device.
## Services
+### Service `rachio.start_watering`
+
+Allows starting one zone on a sprinkler controller, any number of smart hose timer valves, or a schedule. To sequentially start multiple zones on a sprinkler controller, use the `start_multiple_zone_schedule` service below.
+
+Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `entity_id` | no | Individual zone, schedule, or multiple smart hose timer valves to run. A smart hose timer base station device can also be selected to run all valves on the given base.
+| `duration` | yes | Duration in minutes to run the zone or valves. Leave empty for schedules.
+
+
+The services below only apply to sprinkler controllers and will not be shown if only smart hose timers are on the account.
+
+
### Service `rachio.start_multiple_zone_schedule`
Allows a list of zones to be passed with a corresponding list of durations to create a custom schedule directly from Home Assistant.
@@ -85,7 +103,7 @@ It is not currently possible to have zones from multiple controllers in the same
### Examples
```yaml
-#Example sctipt to start multiple zones with individual duration for each zone.
+#Example script to start multiple zones with individual duration for each zone.
script:
run_grass_zones:
sequence:
@@ -100,7 +118,7 @@ script:
```
```yaml
-#Example sctipt to start multiple zones with one duration for all zones.
+#Example script to start multiple zones with one duration for all zones.
script:
run_grass_zones:
sequence:
@@ -113,6 +131,7 @@ script:
data:
duration: 20
```
+
### Service `rachio.set_zone_moisture_percent`
Set the zone moisture percentage for a zone or group of zones.
diff --git a/source/_integrations/radio_browser.markdown b/source/_integrations/radio_browser.markdown
index ed98de91712c..8e0abc377bcd 100644
--- a/source/_integrations/radio_browser.markdown
+++ b/source/_integrations/radio_browser.markdown
@@ -17,12 +17,11 @@ The Radio Browser integration allows you to use the directory of
radio stations collected on [Radio Browser](https://www.radio-browser.info)
in Home Assistant.
-All radio stations can be browsed and played via the Media panel in
-Home Assistant.
+{% include integrations/config_flow.md %}
-Additionally, when creating automations, the "Play Media" action can be used
-to pick a station from the directory. This makes it possible to create
-an automation that e.g., starts playing your favorite radio station on your
-Cast devices.
+To start the Radio Browser, in Home Assistant, go to **Media** > **Radio Browser** and select the speaker.
+![Starting the radio browser](/images/integrations/radio_browser/radio_browser.png)
-{% include integrations/config_flow.md %}
+You can also use the Radio Browser in automations. When creating an automation, use the **Play Media** action to pick a station from the directory. This allows you for example to create
+an automation that starts playing your favorite radio station on your
+Cast devices.
diff --git a/source/_integrations/rainforest_raven.markdown b/source/_integrations/rainforest_raven.markdown
new file mode 100644
index 000000000000..183f2d78e901
--- /dev/null
+++ b/source/_integrations/rainforest_raven.markdown
@@ -0,0 +1,21 @@
+---
+title: Rainforest RAVEn
+description: Instructions on how to setup Rainforest RAVEn devices with Home Assistant.
+ha_category:
+ - Energy
+ - Sensor
+ha_release: 2024.2
+ha_iot_class: Local Polling
+ha_codeowners:
+ - '@cottsay'
+ha_domain: rainforest_raven
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_config_flow: true
+ha_integration_type: integration
+---
+
+The RAVEn family of devices from Rainforest Automation, Inc. includes the [EMU-2](https://www.rainforestautomation.com/rfa-z105-2-emu-2-2/), a wireless device that reads energy usage information directly from your utility meter. This integration connects to a RAVEn-compatible device attached to the Home Assistant instance via USB to integrate instantaneous power demand, accumulated usage, and current unit pricing.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/rainmachine.markdown b/source/_integrations/rainmachine.markdown
index 0352f24fc389..65b22f725705 100644
--- a/source/_integrations/rainmachine.markdown
+++ b/source/_integrations/rainmachine.markdown
@@ -39,7 +39,7 @@ Note that some entities are disabled by default. If you are missing a sensor or
{% include integrations/config_flow.md %}
-## Configuaration Options
+## Configuration Options
The integration has two configuration options:
diff --git a/source/_integrations/raven_rock_mfg.markdown b/source/_integrations/raven_rock_mfg.markdown
index e4deec6d4501..1c68f35c6b73 100644
--- a/source/_integrations/raven_rock_mfg.markdown
+++ b/source/_integrations/raven_rock_mfg.markdown
@@ -1,12 +1,12 @@
---
title: Raven Rock MFG
-description: Connect and control your Raven Rock MFG devices using the Motion Blinds integration
+description: Connect and control your Raven Rock MFG devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: raven_rock_mfg
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown
index c562b77522f4..d1a46d8fd482 100644
--- a/source/_integrations/recorder.markdown
+++ b/source/_integrations/recorder.markdown
@@ -216,17 +216,15 @@ Note that purging will not immediately decrease disk space usage but it will sig
### Service `purge_entities`
-Call the service `recorder.purge_entities` to start a task that purges events and states from the recorder database that match any of the specified `entity_id`, `domains` and `entity_globs` fields. Leaving all three parameters empty will result in all entities being selected for purging.
+Call the service `recorder.purge_entities` to start a task that purges events and states from the recorder database that match any of the specified `entity_id`, `domains`, and `entity_globs` fields. At least one of the three selection criteria fields must be provided.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `entity_id` | yes* | A list of entity_ids that should be purged from the recorder database. |
-| `domains` | yes | A list of domains that should be purged from the recorder database. |
+| `entity_id` | yes | A list of entity_ids that should be purged from the recorder database. |
+| `domains` | yes | A list of domains that should be purged from the recorder database. |
| `entity_globs` | yes | A list of regular expressions that identify entities to purge from the recorder database. |
| `keep_days` | yes | Number of history days to keep in the database of matching rows. The default of 0 days will remove all matching rows. |
-Note: The `entity_id` is only optional when used in `automations.yaml` or `scripts.yaml`. When using the UI to call this service then it is mandatory to specify at least one `entity_id` using the Target Picker or via YAML mode.
-
#### Example automation to remove data rows for specific entities
The below automation will remove history for `sensor.power_sensor_0` older than 5 days at `04:15:00` every day.
@@ -240,7 +238,6 @@ action:
- service: recorder.purge_entities
data:
keep_days: 5
- target:
entity_id: sensor.power_sensor_0
mode: single
```
diff --git a/source/_integrations/recovery_mode.markdown b/source/_integrations/recovery_mode.markdown
index 22be87e35346..4df332b4ee59 100644
--- a/source/_integrations/recovery_mode.markdown
+++ b/source/_integrations/recovery_mode.markdown
@@ -1,5 +1,5 @@
---
-title: Recovery Mode
+title: Recovery mode
description: Allows Home Assistant to start up in recovery mode.
ha_category: []
ha_release: 0.105
@@ -8,20 +8,23 @@ ha_codeowners:
ha_domain: recovery_mode
ha_quality_scale: internal
ha_integration_type: system
+related:
+ - docs: /docs/troubleshooting_general/
+ title: General troubleshooting
---
-The `recovery_mode` integration is an internally used integration by the
+The **Recovery mode** {% term integration %} is an internal integration used by the
Home Assistant Core.
-You don't have to configure it in any way since it is automatically always
+You don't have to configure it since it is automatically always
available when Home Assistant needs it.
If, during startup, Home Assistant has problems reading your configuration,
-it will still continue to start using bits and pieces from the configuration
-of the last time it did start.
+it will still continue to start using parts of the configuration
+from the last time Home Assistant did start.
-When this happens, Home Assistant will start in "Recovery mode" using this
-integration. In this mode, nothing is loaded, but it does give you access to
+When this happens, Home Assistant will start in **Recovery mode** using this
+integration. In this mode, no user configured integrations are loaded, but it does give you access to
the Home Assistant frontend, settings and add-ons.
This gives you the possibility to correct the issue and restart Home Assistant
diff --git a/source/_integrations/refoss.markdown b/source/_integrations/refoss.markdown
index 50e423f9e96c..38dd516ed3df 100644
--- a/source/_integrations/refoss.markdown
+++ b/source/_integrations/refoss.markdown
@@ -8,7 +8,6 @@ ha_codeowners:
- '@ashionky'
ha_iot_class: Local Polling
ha_domain: refoss
-featured: true
ha_config_flow: true
ha_platforms:
- switch
@@ -27,6 +26,10 @@ Integrate Refoss devices into Home Assistant.
- The integration will occupy port: 9989.
{% include integrations/config_flow.md %}
+### Supported device model
+
+- Refoss Smart Wi-Fi Switch, R10
+
### Discover device
- After integrating Refoss, it will start socket broadcast and Home Assistant will automatically discover Refoss devices under the current LAN.
@@ -56,4 +59,4 @@ Examples:
## Reset device
-Long-press the button on the device to reset it.
\ No newline at end of file
+Long-press the button on the device to reset it.
diff --git a/source/_integrations/rejseplanen.markdown b/source/_integrations/rejseplanen.markdown
index f5126f3c7920..75a3e8c25160 100644
--- a/source/_integrations/rejseplanen.markdown
+++ b/source/_integrations/rejseplanen.markdown
@@ -6,8 +6,6 @@ ha_category:
ha_iot_class: Cloud Polling
ha_release: 0.88
ha_domain: rejseplanen
-ha_codeowners:
- - '@DarkFox'
ha_platforms:
- sensor
ha_integration_type: integration
@@ -75,10 +73,10 @@ Find the name of your stop in the list and the "id" is the one you are looking f
## Direction
If you use the `direction` filter it's important to put correct final destination(s) or else the sensor will not work at all.
-The `direction` has to be the final destination(s) for the `Departure type` - ***NOT the stop where you want to get off***.
+The `direction` has to be the scheduled final destination (direction) for the `Departure type` - ***NOT the stop where you want to get off***.
- Replace YOUR_STOP_ID with the id for your stop and go to [http://xmlopen.rejseplanen.dk/bin/rest.exe/departureBoard?id=YOUR_STOP_ID](http://xmlopen.rejseplanen.dk/bin/rest.exe/departureBoard?id=YOUR_STOP_ID)
-- The values under `finalStop` is the ones you need to put under `direction`. Make sure you use the exact name and insert all possible finalstops.
+- The values under `direction` is the ones you need to put under `direction`. Make sure you use the exact name, and add all that apply.
You will see an output like this:
diff --git a/source/_integrations/renson.markdown b/source/_integrations/renson.markdown
index bf021d6f550e..7cb36d90462c 100644
--- a/source/_integrations/renson.markdown
+++ b/source/_integrations/renson.markdown
@@ -6,7 +6,8 @@ ha_category:
- Button
- Fan
- Number
- - Sensor
+ - Switch
+ - Time
ha_release: 2023.7
ha_iot_class: Local Polling
ha_config_flow: true
@@ -19,6 +20,8 @@ ha_platforms:
- fan
- number
- sensor
+ - switch
+ - time
ha_integration_type: integration
---
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index d268a62f1685..41d05d6d7626 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -24,6 +24,11 @@ ha_platforms:
- update
ha_integration_type: integration
ha_dhcp: true
+related:
+ - docs: /dashboards/picture-glance/#creating-a-card-to-control-the-camera
+ title: Controlling the camera from the dashboard
+ - url: https://reolink.com/
+ title: Reolink product page
---
The integration allows you to control [Reolink](https://reolink.com/) NVRs or cameras.
@@ -35,12 +40,23 @@ On the Reolink device, a user account with admin privileges is needed for the pr
{% include integrations/option_flow.md %}
{% configuration_basic %}
Protocol:
- description: Switch between RTSP, RTMP or FLV streaming protocol.
+ description: Switch between RTSP, RTMP, or FLV streaming protocol. RTSP supports 4K streams (h265 encoding) while RTMP and FLV do not. FLV is the least demanding on the camera.
{% endconfiguration_basic %}
+## Asterisk (*) next to entities listed in this documentation
+
+If an entity listed below has an asterisk (*) next to its name, it means it is disabled by default. To use such an entity, you must [enable the entity](/common-tasks/general/#enabling-entities) first.
+
## Camera streams
-This integration creates a few camera entities, one for each stream type with different resolutions: Clear, Fluent, Balanced, Snapshots Clear, and Snapshots Fluent.
+This integration creates a few camera entities, one for each stream type with different resolutions:
+
+- Fluent (Low resolution)
+- Balanced* (Mid resolution)
+- Clear* (High resolution, resource intensive)
+- Snapshots Fluent* (Low resolution)
+- Snapshots Clear* (High resolution)
+
The Fluent stream camera entity is enabled by default; the other streams are disabled by default.
The Snapshots stream provides a sequence of image snapshots giving very low latency at the cost of a very low frame rate; this can be used when the RTMP/RTSP/FLV video stream has too much lag.
Dual lens cameras provide additional streams for the second lens.
@@ -50,23 +66,20 @@ Dual lens cameras provide additional streams for the second lens.
Depending on the supported features of the camera, binary sensors are added for:
- Motion detection
-- Doorbell presses
+- Visitor (Doorbell presses)
- AI person detection
- AI vehicle detection
- AI pet detection
- AI animal detection
- AI face detection
+- AI package detection
These sensors receive events using 3 methods in order: ONVIF push, ONVIF long polling or fast polling (every 5 seconds).
The latency for receiving the events is the best for ONVIF push and the worst for fast polling, the fastest available method that is detected to work will be used, and slower methods will not be used.
For redundancy, these sensors are polled every 60 seconds together with the update of all other entities.
Not all camera models generate ONVIF push events for all event types, some binary sensors might, therefore, only be polled.
For list of Reolink products that support ONVIF see the [Reolink Support Site](https://support.reolink.com/hc/en-us/articles/900000617826).
-To ensure you have the best latency possible, refer to the [Reducing latency of motion events](#Reducing_latency_of_motion_events) section.
-
-## Asterisk (*) next to entities listed in this documentation
-
-If an entity listed below has an asterisk (*) next to its name, it means it is disabled by default. To use such an entity, you must [enable the entity](/common-tasks/general/#enabling-entities) first.
+To ensure you have the best latency possible, refer to the [Reducing latency of motion events](#reducing-latency-of-motion-events) section.
## Number entities
@@ -81,11 +94,13 @@ Depending on the supported features of the camera, number entities are added for
- AI face sensitivity
- AI person sensitivity
- AI vehicle sensitivity
+- AI package sensitivity
- AI pet sensitivity
- AI animal sensitivity
- AI face delay*
- AI person delay*
- AI vehicle delay*
+- AI package delay*
- AI pet delay*
- AI animal delay*
- Auto quick reply time
@@ -94,6 +109,11 @@ Depending on the supported features of the camera, number entities are added for
- Auto track disappear time
- Auto track stop time
- Day night switch threshold*
+- Image brightness* (default 128)
+- Image contrast* (default 128)
+- Image saturation* (default 128)
+- Image sharpness* (default 128)
+- Image hue* (default 128)
**Floodlight turn on brightness** controls the brightness of the floodlight when it is turned on internally by the camera (see **Floodlight mode** select entity) or when using the **Floodlight** light entity.
@@ -129,10 +149,10 @@ Depending on the supported features of the camera, button entities are added for
Some Reolink PTZ cameras can move at different speeds. For those cameras, the `reolink.ptz_move` service can be used in combination with the **PTZ left**, **right**, **up**, **down**, **zoom in**, or **zoom out** entity which allows specifying the speed attribute. If the PTZ button entities for a specific camera are not shown under **Choose entity** under **targets** of the `reolink.ptz_move` service, it means that this camera does not support custom PTZ speeds.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | -----------------------------------------------------------------------------------------|
-| `entity_id` | no | Name of the Reolink PTZ button entity to control. For example, `button.trackmix_ptz_left`. |
-| `speed` | no | PTZ move speed. For example `10`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------- |
+| `entity_id` | no | Name of the Reolink PTZ button entity to control. For example, `button.trackmix_ptz_left`. |
+| `speed` | no | PTZ move speed. For example `10`. |
## Select entities
@@ -141,13 +161,14 @@ Depending on the supported features of the camera, select entities are added for
- Floodlight mode (Off, Auto, Schedule)
- Day night mode (Auto, Color, Black&White)
- PTZ preset
+- Play quick reply message
- Auto quick reply message
- Auto track method (Digital, Digital first, Pan/Tilt first)
- Status LED (Doorbell only: Stay off, Auto, Auto & always on at night)
**PTZ preset** positions can be set in the Reolink app/windows/web client, the names of the presets will be loaded into Home Assistant at the start of the integration. When adding new preset positions, please restart the Reolink integration.
-**Auto quick reply messages** can be recorded in the Reolink app where a name is also supplied. New or updated quick reply messages will be loaded into Home Assistant at the start of the integration. When adding new quick reply messages, please restart the Reolink integration.
+**Play quick reply messages**/**Auto quick reply messages** can be recorded in the Reolink phone app where a name is also supplied. New or updated quick reply messages will be loaded into Home Assistant at the start of the integration. When adding new quick reply messages, please restart the Reolink integration.
## Siren entities
@@ -166,6 +187,7 @@ Depending on the supported features of the camera, switch entities are added for
- Auto tracking
- Auto focus
- Guard return
+- PTZ patrol (start/stop)
- Doorbell button sound
- Record
- Push notifications
@@ -185,6 +207,8 @@ For NVRs, a global switch for **Record**, **Push**, **Buzzer**, **Email**, and *
The Push-notification in the Reolink app is independent of the Home Assistant setting. It is also independent of the settings on other phones connected to the same camera. Reolink does this so you have an independent way of turning off push notifications per phone.
+The **PTZ patrol** positions first need to be configured using the Reolink [app](https://support.reolink.com/hc/en-us/articles/360008746833/)/[windows](https://support.reolink.com/hc/en-us/articles/900003738126/)/web client. When no positions are configured, the PTZ patrol entity will not be added. When adding patrol positions for the first time, you need to restart the Reolink integration.
+
## Light entities
Depending on the supported features of the camera, light entities are added for:
@@ -200,6 +224,7 @@ Depending on the supported features of the camera, the following sensor entities
- PTZ pan position
- Wi-Fi signal*
+- HDD/SD storage*
## Update entity
@@ -238,18 +263,23 @@ The following models have been tested and confirmed to work:
- [RLC-520A](https://reolink.com/product/rlc-520a/)
- RLC-522*
- [RLC-810A](https://reolink.com/product/rlc-810a/)
+- [RLC-810WA](https://reolink.com/product/rlc-810wa/)
- [RLC-811A](https://reolink.com/product/rlc-811a/)
+- [RLC-81MA](https://reolink.com/product/rlc-81ma/)
- [RLC-81PA](https://reolink.com/product/rlc-81pa/)
- [RLC-820A](https://reolink.com/product/rlc-820a/)
- [RLC-822A](https://reolink.com/product/rlc-822a/)
- [RLC-823A](https://reolink.com/product/rlc-823a/)
- [RLC-833A](https://reolink.com/product/rlc-833a/)
+- [RLC-1212A](https://reolink.com/product/rlc-1212a/)
- [RLC-1224A](https://reolink.com/product/rlc-1224a/)
- [RLN8-410 NVR](https://reolink.com/product/rln8-410/)
- [RLN16-410 NVR](https://reolink.com/product/rln16-410/)
- [RLN36 NVR](https://reolink.com/product/rln36/)
+- [RLN12W NVR](https://reolink.com/product/rln12w/)
- [Reolink Duo WiFi](https://reolink.com/product/reolink-duo-wifi-v1/)
- [Reolink Duo 2 WiFi](https://reolink.com/product/reolink-duo-wifi/)
+- [Reolink Duo 3 PoE](https://reolink.com/product/reolink-duo-3-poe/)
- Reolink Duo Floodlight ([PoE](https://reolink.com/product/reolink-duo-floodlight-poe/) and [Wi-Fi](https://reolink.com/product/reolink-duo-floodlight-wifi/))
- Reolink TrackMix ([PoE](https://reolink.com/product/reolink-trackmix-poe/) and [Wi-Fi](https://reolink.com/product/reolink-trackmix-wifi/))
- Reolink Video Doorbell ([PoE](https://reolink.com/product/reolink-video-doorbell/) and [Wi-Fi](https://reolink.com/product/reolink-video-doorbell-wifi/))
@@ -316,11 +346,13 @@ Then power up the camera while pointing it at the QR code. It takes about a minu
- Setting a static IP address for Reolink cameras/NVRs in your router is advisable to prevent (temporal) connectivity issues when the IP address changes.
- Do not set a static IP in the Reolink device itself, but leave the **Connection Type** on **DHCP** under **Settings** > **Network** > **Network Information** > **Set Up**. If you set it to **static** on the Reolink device itself, this is known to cause incorrect DHCP requests on the network. The incorrect DHCP request causes Home Assistant to use the wrong IP address for the camera, resulting in connection issues. The issue originates from the Reolink firmware, which keeps sending DCHP requests even when you set a static IP address in the Reolink device.
- Reolink cameras can support a limited amount of simultaneous connections. Therefore using third-party software like Frigate, Blue Iris, or Scrypted, or using the ONVIF integration at the same time can cause the camera to drop connections. This results in short unavailabilities of the Reolink entities in Home Assistant. Especially when the connections are coming from the same device (IP) where Home Assistant is running, the Reolink cameras can get confused, dropping one connection in favor of the other originating from the same host IP. If you experience disconnections/unavailabilities of the entities, please first temporarily shut down the other connections (like Frigate) to diagnose if that is the problem. If that is indeed the problem, you could try moving the third-party software to a different host (IP address) since that is known to solve the problem most of the time. You could also try switching the protocol to FLV on Home Assistant and/or the third-party software, as that is known to be less resource-intensive on the camera.
+- If the Reolink entities go to unavailable for short periods, the camera may be overloaded with requests resulting in short connection drops. To resolve this, first, check if the integration is using `ONVIF push` instead of `ONVIF long polling` (resource intensive) or `Fast polling` (very resource intensive), see the [Reducing latency of motion events](#reducing-latency-of-motion-events) section. Moreover, try switching to the FLV streaming protocol which is the least resource-intensive for the camera, see the [options](#options) section.
- If the integration and the browser can't connect to the camera even after you enable the HTTP/HTTPS ports, try to create a new user on the camera; that fixes the problem in some cases.
### Reducing latency of motion events
ONVIF push will result in slightly faster state changes of the binary motion/AI event sensors than ONVIF long polling.
+Moreover, ONVIF push is less demanding for the camera than ONVIF long polling or fast polling, resulting in potentially less connection issues.
However, ONVIF push has some additional network configuration requirements:
- Reolink products can not push motion events to an HTTPS address (SSL).
@@ -332,8 +364,3 @@ Therefore, ensure no Global SSL certificate is configured in the [`configuration
An SSL certificate can still be enforced for external connections, by, for instance, using the [NGINX add-on](https://github.com/home-assistant/addons/tree/master/nginx_proxy) or [NGINX Proxy Manager add-on](https://github.com/hassio-addons/addon-nginx-proxy-manager) instead of a globally enforced SSL certificate.
To see if a Reolink integration is currently using `ONVIF push`, `ONVIF long polling` or `Fast polling`, [download the diagnostics text file](/docs/configuration/troubleshooting/#download-diagnostics) and find the `"event connection": "ONVIF push"\"ONVIF long polling"\"Fast polling"` in the txt file.
-
-## Related topics
-
-- [Controlling the camera from the dashboard](/dashboards/picture-glance/#creating-a-card-to-control-the-camera)
-- [Reolink product page](https://reolink.com/)
diff --git a/source/_integrations/rest.markdown b/source/_integrations/rest.markdown
index 418ae085524b..89cabafaa428 100644
--- a/source/_integrations/rest.markdown
+++ b/source/_integrations/rest.markdown
@@ -127,6 +127,10 @@ payload:
description: The payload to send with a POST request. Depends on the service, but usually formed as JSON.
required: false
type: string
+payload_template:
+ description: The payload to send with a POST request with template support. Depends on the service, but usually formed as JSON.
+ required: false
+ type: template
verify_ssl:
description: Verify the SSL certificate of the endpoint.
required: false
diff --git a/source/_integrations/rest_command.markdown b/source/_integrations/rest_command.markdown
index 52c4a1747dc0..eebe1ac793d5 100644
--- a/source/_integrations/rest_command.markdown
+++ b/source/_integrations/rest_command.markdown
@@ -7,6 +7,8 @@ ha_release: 0.36
ha_iot_class: Local Push
ha_domain: rest_command
ha_integration_type: integration
+ha_codeowners:
+ - '@jpbede'
---
This integration can expose regular REST commands as services. Services can be called from a [script] or in [automation].
@@ -90,6 +92,55 @@ rest_command:
payload: "mode=off"
```
+### Using REST command Response in automations
+
+REST commands provide a service response in a dictionary containing `status` (containing the HTTP response code), and `content` containing the response body as text or JSON. This response can be accessed in automations using [`response_variable`](/docs/scripts/service-calls#use-templates-to-handle-response-data).
+
+The following example shows how the REST command response may be used in automations. In this case, checking the [Traefik API](https://doc.traefik.io/traefik/operations/api/) for errors.
+
+{% raw %}
+
+```yaml
+# Create a ToDo notification based on file contents
+automation:
+ - alias: "Check API response"
+ trigger:
+ - ...
+ action:
+ - service: rest_command.traefik_get_rawdata
+ response_variable: traefik_response
+ - if: "{{ traefik_response['status'] == 200 }}"
+ then:
+ - alias: "Parse data"
+ variables:
+ routers: "{{ traefik_response['content']['routers'] }}"
+ router_errors: >
+ {%- for router in routers -%}
+ {%- if 'error' in routers[router] -%}
+ {{router}}: {{ routers[router]['error'] }}
+ {% endif -%}
+ {%- endfor -%}
+ got_errors: "{{ router_errors|length > 0 }}"
+ - if: "{{ got_errors }}"
+ then:
+ - service: notify.mobile_app_iphone
+ data:
+ title: "Traefik errors"
+ message: "{{ router_errors }}"
+ else:
+ - service: notify.mobile_app_iphone
+ data:
+ title: "Could not reach Traefik"
+ message: "HTTP code: {{ traefik_response['returncode'] }}"
+
+rest_command:
+ traefik_get_rawdata:
+ url: http://127.0.0.1:8080/api/rawdata
+ method: GET
+```
+
+{% endraw %}
+
### Using templates to change the payload based on entities
The commands can be dynamic, using templates to insert values of other entities. Service call support variables for doing things with templates.
diff --git a/source/_integrations/rexel.markdown b/source/_integrations/rexel.markdown
index d0aba1f37716..0bad9d07bc77 100644
--- a/source/_integrations/rexel.markdown
+++ b/source/_integrations/rexel.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/rfxtrx.markdown b/source/_integrations/rfxtrx.markdown
index dee985fed74c..d9d3a68b6d8e 100644
--- a/source/_integrations/rfxtrx.markdown
+++ b/source/_integrations/rfxtrx.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to integrate RFXtrx into Home Assistant.
ha_category:
- Binary sensor
- Cover
+ - Event
- Hub
- Light
- Sensor
@@ -21,6 +22,7 @@ ha_platforms:
- binary_sensor
- cover
- diagnostics
+ - event
- light
- sensor
- siren
@@ -33,6 +35,7 @@ The RFXtrx integration supports RFXtrx devices by [RFXCOM](http://www.rfxcom.com
There is currently support for the following device types within Home Assistant:
- [Cover](#covers)
+- [Event](#events)
- [Light](#lights)
- [Switch](#switches)
- [Sensor](#sensors)
@@ -100,6 +103,10 @@ In the options menu, select *Enable automatic add* to enable automatic addition
The RFXtrx integration supports Siemens/LightwaveRF and Somfy RTS roller shutters that communicate in the frequency range of 433.92 MHz.
+#### Events
+
+The RFXtrx integration will expose event entities for remotes controlling lights as well as security devices.
+
#### Lights
The RFXtrx integration support lights that communicate in the frequency range of 433.92 MHz.
diff --git a/source/_integrations/ring.markdown b/source/_integrations/ring.markdown
index 8bcd79fce2e8..504d469ecf85 100644
--- a/source/_integrations/ring.markdown
+++ b/source/_integrations/ring.markdown
@@ -3,6 +3,7 @@ title: Ring
description: Instructions on how to integrate your Ring.com devices within Home Assistant.
ha_category:
- Binary sensor
+ - Button
- Camera
- Doorbell
- Light
@@ -12,9 +13,11 @@ 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
+ - button
- camera
- diagnostics
- light
@@ -31,9 +34,12 @@ The Ring integration allows you to integrate your [Ring.com](https://ring.com/)
There is currently support for the following device types within Home Assistant:
- [Binary sensor](#binary-sensor)
+- [Button](#button)
- [Camera](#camera)
+ - [Saving the videos captured by your Ring Door Bell](#saving-the-videos-captured-by-your-ring-door-bell)
- [Sensor](#sensor)
- [Switch](#switch)
+- [Light](#light)
This integration does NOT allow for live viewing of your Ring camera within Home Assistant.
@@ -45,6 +51,10 @@ This integration does NOT allow for live viewing of your Ring camera within Home
Once you have enabled the [Ring integration](/integrations/ring), you can start using a binary sensor. Currently, it supports doorbell, external chimes and stickup cameras.
+## Button
+
+Once you have enabled the [Ring integration](/integrations/ring), you can start using the button platform. Currently, it supports intercom to open the door.
+
## Camera
@@ -53,7 +63,7 @@ Please note that downloading and playing Ring video will require a Ring Protect
Once you have enabled the [Ring integration](/integrations/ring), you can start using the camera platform. Currently, it supports doorbell and stickup cameras.
-## Saving the videos captured by your Ring Door Bell
+### Saving the videos captured by your Ring Door Bell
You can save locally the latest video captured by your Ring Door Bell using the [downloader](/integrations/downloader) along with either an [automation](/integrations/automation) or [python_script](/integrations/python_script). First, enable the [downloader](/integrations/downloader) integration in your configuration by adding the following to your `configuration.yaml`.
diff --git a/source/_integrations/risco.markdown b/source/_integrations/risco.markdown
index 87cee3d83912..68925be1ba72 100644
--- a/source/_integrations/risco.markdown
+++ b/source/_integrations/risco.markdown
@@ -56,12 +56,14 @@ The local version of the integration does not support events, and the `arming` s
You can configure additional behavior by clicking on **Options** in the relevant box in the Integration panel:
{% configuration_basic %}
-How often to poll Risco (in seconds):
- description: "The lower this is, the faster your entities will reflect changes, but the more resource-intensive it'll be."
Require pin code to arm:
description: When checked, you'll need to enter your pin code when arming through Home Assistant.
Require pin code to disarm:
description: When checked, you'll need to enter your pin code when disarming through Home Assistant.
+How often to poll Risco Cloud (in seconds):
+ description: "The lower this is, the faster your entities will reflect changes, but the more resource-intensive it'll be. Only available when using Cloud and only shown in advanced mode."
+Maximum concurrent requests in Risco local:
+ description: "Lower values cause the integration to load slower. Higher values could lead to errors. Only available when using Local and only shown in advanced mode."
{% endconfiguration_basic %}
Apart from these options, you can also define a custom mapping between your Home Assistant Alarm states and the Risco arming modes.
diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown
index 87900867f6cd..4cb8db3abc44 100644
--- a/source/_integrations/roborock.markdown
+++ b/source/_integrations/roborock.markdown
@@ -34,7 +34,7 @@ ha_integration_type: integration
The Roborock integration allows you to control your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) vacuum while using the Roborock app.
-This integration requires a cloud connection to set up the device, but it communicates with the device entirely over your home network.
+This integration requires a continuous cloud connection while using the device. However, excluding map data, communication between the integration and the device is conducted locally.
Once you log in with your Roborock account, the integration will automatically discover your Roborock devices and get the needed information to communicate locally with them. Please ensure your Home Assistant instance can communicate with the local IP of your device. We recommend setting a static IP for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867. Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port.
@@ -156,14 +156,18 @@ We are working on adding a lot of features to the core integration. We have reve
### How can I clean a specific room?
We plan to make the process simpler in the future, but for now, it is a multi-step process.
1. Make sure to first name the rooms in the Roborock app; otherwise, they won't appear in the debug log.
-2. [Enable debug logging](/docs/configuration/troubleshooting/#enabling-debug-logging) for this integration and reload it.
-3. Search your logs for 'Got home data' and find the attribute rooms.
-4. Write the rooms down; they have a name and 6 digit ID.
-5. Make sure the map you want the room IDs for is selected in your app. Room IDs are non-unique and will repeat if you have multiple maps.
-6. Go to {% my developer_call_service service="vacuum.send_command" title="**Developer Tools** > **Services** > **Vacuum: Send Command**" %}. Select your vacuum as the entity and `get_room_mapping` as the command.
-7. Go back to your logs and look at the response to `get_room_mapping`. This is a list of the 6-digit IDs you saw earlier to 2-digit IDs (use the first number, for instance `16` in `[16, '14000663', 12]` ([internal room id, unique room id, room type])). In your original list of room names and 6-digit IDs, replace the 6-digit ID with its pairing 2-digit ID.
-8. Now, you have the 2-digit ID that your vacuum uses to describe a room.
-9. Go back to {% my developer_call_service service="vacuum.send_command" title="**Developer Tools** > **Services** > **Vacuum: Send Command**" %} then type `app_segment_clean` as your command and `segments` with a list of the 2-digit IDs you want to clean. Then, add `repeat` with a number (ranging from 1 to 3) to determine how many times you want to clean these areas.
+2. Go to {% my developer_call_service service="vacuum.send_command" title="**Developer Tools** > **Services** > **Roborock: Get maps**" %}. Select your vacuum as the entity. Note that room IDs and names are only updated on the currently selected map. If you don't see the rooms you expect, you should select the other map through your app or through the `load_multi_map` service.
+You will get a response like this:
+```json
+vacuum.s7_roborock:
+ maps:
+ - flag: 0
+ name: Downstairs
+ rooms:
+ "16": Kitchen
+ "17": Living room
+```
+3. Go back to {% my developer_call_service service="vacuum.send_command" title="**Developer Tools** > **Services** > **Vacuum: Send Command**" %} then type `app_segment_clean` as your command and `segments` with a list of the 2-digit IDs you want to clean. Then, add `repeat` with a number (ranging from 1 to 3) to determine how many times you want to clean these areas.
Example:
```yaml
diff --git a/source/_integrations/roku.markdown b/source/_integrations/roku.markdown
index b00890dd64ec..479a2252b0bd 100644
--- a/source/_integrations/roku.markdown
+++ b/source/_integrations/roku.markdown
@@ -33,6 +33,8 @@ The Roku integration allows you to control a [Roku](https://www.roku.com/) devic
When adding the integration, you will be asked to provide a {% term host %}. Unless you changed the hostname, this refers to the IP address of your Roku device. You can find the IP address or hostname in the network settings of your Roku device, by checking your router, or by using a network scanning tool.
+If you are having issues connecting, you may have to adjust the settings on your Roku device to allow local control. The common setting is: `Settings / System / Advanced / Control by mobile apps / Network access`
+
There is currently support for the following device types within Home Assistant:
- Media player
diff --git a/source/_integrations/romy.markdown b/source/_integrations/romy.markdown
new file mode 100644
index 000000000000..efda02b6c374
--- /dev/null
+++ b/source/_integrations/romy.markdown
@@ -0,0 +1,69 @@
+---
+title: ROMY Vacuum Cleaner
+description: Integrate your ROMY vacuum robot with Home Assistant.
+ha_category:
+ - Vacuum
+ha_iot_class: Local Polling
+ha_release: 2024.2
+ha_config_flow: true
+ha_codeowners:
+ - '@xeniter'
+ha_domain: romy
+ha_platforms:
+ - binary_sensor
+ - sensor
+ - vacuum
+ha_integration_type: integration
+ha_zeroconf: true
+---
+
+The **ROMY** integration allows you to control your [ROMY](https://www.romyrobot.com) vacuum robot.
+
+This integration currently supports the following models:
+
+- ROMY C5
+- ROMY L6 Performance
+- ROMY L6 Animal
+
+{% include integrations/config_flow.md %}
+
+## Services
+
+Currently supported services are:
+
+- `start`
+- `pause`
+- `continue`
+- `stop`
+- `return_to_base`
+
+## Integration entities
+
+The ROMY will add the following sensors.
+
+Binary Sensors:
+
+- **Dustbin present**: True if dustbin is inserted.
+- **Robot docked**: True if the robot is docked.
+- **Watertank present**: True if watertank is mounted (only present for ROMY's with wet cleaning function).
+- **Watertank empty**: True if watertank is empty and water infill is required (only present for ROMY's with wet cleaning function).
+
+Sensors:
+
+- **Battery Level**: The battery level in percent.
+- **RSSI**: Wi-Fi signal strength.
+- **Dustbin Dirt Level**: The raw dustbin dirt sensor value (not every ROMY has one).
+- **Total cleaning time**: How many hours the robot has spent cleaning in total.
+- **Total cleaning runs**: The total number of cleaning runs.
+- **Total cleaned area**: The total area in m² the robot has cleaned.
+- **Total distance driven**: The total distance in m the robot has driven.
+
+## Troubleshooting
+
+### Local HTTP interface password
+
+You have to enable the local interface first with a password. This is printed as QR Code on a label directly under the dust bin inside the robot.
+
+### ROMY robot interface protocol
+
+Is available as download under [romy-robot-interface-protocol](https://www.romyrobot.com/en-AT/romy-robot-interface-protocol)
diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown
index 89b2b539083a..d758f4a9e929 100644
--- a/source/_integrations/roomba.markdown
+++ b/source/_integrations/roomba.markdown
@@ -11,6 +11,7 @@ ha_codeowners:
- '@cyr-ius'
- '@shenxn'
- '@Xitee1'
+ - '@Orhideous'
ha_domain: roomba
ha_config_flow: true
ha_dhcp: true
@@ -57,6 +58,7 @@ Sensors:
- **Total missions**: The total number of all missions
- **Scrubs**: Total number of times the robot has executed a "scrub"
- **Total cleaning time**: How many hours the robot has spent cleaning in total
+- **Total cleaned area**: The total area in m² the robot has cleaned
### Retrieving your credentials
diff --git a/source/_integrations/rova.markdown b/source/_integrations/rova.markdown
index a140881e5e1c..024645f53ce0 100644
--- a/source/_integrations/rova.markdown
+++ b/source/_integrations/rova.markdown
@@ -5,105 +5,13 @@ ha_category:
- Sensor
ha_release: 0.87
ha_iot_class: Cloud Polling
+ha_config_flow: true
ha_domain: rova
ha_platforms:
- sensor
ha_integration_type: integration
---
-[ROVA](https://rova.nl) is a waste collection company that operates in the center and east of the Netherlands. The `rova` platform uses an unofficial [ROVA](https://rova.nl) API to allow you to get your waste collection schedule and integrate this in your Home Assistant installation.
+[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
-
-To use the ROVA sensor in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: rova
- zip_code: ZIP_CODE
- house_number: HOUSE_NUMBER
-```
-
-{% configuration %}
-zip_code:
- description: Your zip code.
- required: true
- type: string
-house_number:
- description: Your house number.
- required: true
- type: string
-house_number_suffix:
- description: A suffix for your house number.
- required: false
- type: string
-name:
- description: Let you overwrite the name of the device in the frontend.
- required: false
- default: Rova
- type: string
-monitored_conditions:
- description: ROVA information to be monitored. The following collection dates can be monitored.
- required: false
- type: list
- keys:
- bio:
- description: Upcoming collection date of your biodegradable waste
- paper:
- description: Upcoming collection date of your paper waste
- plastic:
- description: upcoming collection date of your plastic waste
- residual:
- description: Upcoming collection date of your general waste
-{% endconfiguration %}
-
-If no **monitored_conditions** are specified, only **bio** will be enabled.
-
-### Full configuration sample
-
-A full configuration entry would look like the sample below.
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: rova
- zip_code: ZIP_CODE
- house_number: HOUSE_NUMBER
- house_number_suffix: HOUSE_NUMBER_SUFFIX
- name: Rova
- monitored_conditions:
- - bio
- - paper
- - plastic
- - residual
-```
-
-To have your Home Assistant installation remind you of upcoming waste collections, combine the `rova` platform with some [Automations](/docs/automation/) and a [notification platform](/integrations/notify/).
-
-{% raw %}
-
-```yaml
-# Example configuration.yaml entry for Rova waste collection reminder
-automation:
- - id: rova-garbage-bio-reminder
- alias: "Send Rova Bio waste collection reminder"
- trigger:
- - platform: time
- at: "19:00:00"
- condition:
- - condition: template
- value_template: "{% if (as_timestamp(states('sensor.rova_garbage_gft')) - as_timestamp(now())) < 43200 %}true{% endif %}"
- - condition: template
- value_template: "{% if (as_timestamp(states('sensor.rova_garbage_gft')) - as_timestamp(now())) > 0 %}true{% endif %}"
- action:
- - service: NOTIFICATION_SERVICE
- data:
- message: "Reminder: put out biowaste bin"
-```
-
-{% endraw %}
-
-
-This integration is not affiliated with Rova and retrieves data from the endpoints of their website. Use at your own risk.
-
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/rpi_camera.markdown b/source/_integrations/rpi_camera.markdown
index 972b3dec5921..db98923c9bb0 100644
--- a/source/_integrations/rpi_camera.markdown
+++ b/source/_integrations/rpi_camera.markdown
@@ -87,4 +87,4 @@ file_path:
default: A temporary file is used.
{% endconfiguration %}
-The given **file_path** must be an existing file because the camera platform setup performs a writeable check on it. Also, keep in mind that the path should be [whitelisted](/docs/configuration/basic/).
+The given **file_path** must be an existing file because the camera platform setup performs a writeable check on it. Also, keep in mind that the path should be [whitelisted](/integrations/homeassistant/#allowlist_external_dirs).
diff --git a/source/_integrations/sabnzbd.markdown b/source/_integrations/sabnzbd.markdown
index 1cc6ba6c2ccb..521d5e46b5e1 100644
--- a/source/_integrations/sabnzbd.markdown
+++ b/source/_integrations/sabnzbd.markdown
@@ -9,6 +9,7 @@ ha_config_flow: true
ha_iot_class: Local Polling
ha_codeowners:
- '@shaiu'
+ - '@jpbede'
ha_domain: sabnzbd
ha_platforms:
- sensor
diff --git a/source/_integrations/samsam.markdown b/source/_integrations/samsam.markdown
new file mode 100644
index 000000000000..46139a1cb54e
--- /dev/null
+++ b/source/_integrations/samsam.markdown
@@ -0,0 +1,20 @@
+---
+title: SamSam
+description: Get the energy market prices from SamSam using the EnergyZero integration.
+ha_category:
+ - Energy
+ha_domain: samsam
+ha_release: 2023.2
+ha_integration_type: virtual
+ha_supporting_domain: energyzero
+ha_supporting_integration: EnergyZero
+ha_codeowners:
+ - '@klaasnicolaas'
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown
index 6727a1cb1a58..a344ed2c84dc 100644
--- a/source/_integrations/samsungtv.markdown
+++ b/source/_integrations/samsungtv.markdown
@@ -451,6 +451,6 @@ Some televisions from the H and J series use an encrypted protocol and require m
#### Samsung TV keeps asking for permission
-The default setting on newer televisions is to ask for permission on ever connection attempt.
+The default setting on newer televisions is to ask for permission on every connection attempt.
To avoid this behavior, please ensure that you adjust this to `First time only` in the `Device connection manager > Access notification` settings of your television.
It is also recommended to cleanup the previous attempts in `Device connection manager > Device list`
diff --git a/source/_integrations/sanix.markdown b/source/_integrations/sanix.markdown
new file mode 100644
index 000000000000..df439280007c
--- /dev/null
+++ b/source/_integrations/sanix.markdown
@@ -0,0 +1,29 @@
+---
+title: Sanix
+description: Instructions on how to integrate Sanix devices within Home Assistant.
+ha_category:
+ - Switch
+ha_release: 2024.5
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@tomaszsluszniak'
+ha_domain: sanix
+ha_platforms:
+ - sensor
+ha_integration_type: integration
+---
+
+The Sanix {% term integration %} allows you to get water/sewage level sensor measurements from the Sanix devices made by [BIT Complex](https://bitcomplex.pl/).
+
+## Pre-requisites
+
+To set up the {% term integration %}, go to the [Sanix dashboard](https://sanix.bitcomplex.pl) and sign in to your account.
+
+Not anyone can pull your data from the API. You need to authenticate by using an API token. To retrieve your API token, on the [Sanix dashboard](https://sanix.bitcomplex.pl), go to the **Help** page, and under **System version**, copy your API token. You will need this during setup in Home Assistant.
+
+{% include integrations/config_flow.md %}
+
+## Hardware support
+
+- Sanix S M25 (3.10 firmware version).
diff --git a/source/_integrations/scene.mqtt.markdown b/source/_integrations/scene.mqtt.markdown
index ffc3c3bc5037..cb15888dfcfe 100644
--- a/source/_integrations/scene.mqtt.markdown
+++ b/source/_integrations/scene.mqtt.markdown
@@ -12,8 +12,6 @@ The `mqtt` scene platform lets you control your MQTT enabled scenes.
## Configuration
-
-
To enable a MQTT scene in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -97,6 +95,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -118,7 +120,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
encoding:
description: The encoding of the published messages.
required: false
diff --git a/source/_integrations/schedule.markdown b/source/_integrations/schedule.markdown
index 1ad04a09f4be..5108df962dfb 100644
--- a/source/_integrations/schedule.markdown
+++ b/source/_integrations/schedule.markdown
@@ -1,6 +1,6 @@
---
title: Schedule
-description: Instructions on how use make weekly schedule in Home Assistant.
+description: Instructions on how to make a weekly schedule in Home Assistant.
ha_category:
- Automation
- Helper
@@ -101,6 +101,23 @@ automations and templates.
| Attribute | Description |
| ----- | ----- |
| `next_event` | A datetime object containing the next time the schedule is going to change state. |
+
+### Automation example
+
+A schedule creates an on/off (schedule) sensor within the times set. Using the thermostat schedule example above, you can turn on your thermostat:
+
+```yaml
+trigger:
+ - platform: state
+ entity_id:
+ - schedule.thermostat_schedule
+ to: "on"
+ action:
+ - service: climate.turn_on
+ target:
+ entity_id: climate.thermostat
+```
+
### Services
Available service: `schedule.reload`.
diff --git a/source/_integrations/scl.markdown b/source/_integrations/scl.markdown
index 031933d62feb..c8eec6aba8c2 100644
--- a/source/_integrations/scl.markdown
+++ b/source/_integrations/scl.markdown
@@ -4,7 +4,7 @@ description: Get energy usage from Seattle City Light (SCL) using the Opower int
ha_category:
- Energy
- Sensor
-ha_release: 2024.1
+ha_release: 2023.8
ha_domain: scl
ha_integration_type: virtual
ha_supporting_domain: opower
diff --git a/source/_integrations/screenaway.markdown b/source/_integrations/screenaway.markdown
index 2d8012c28501..0fc44b780f0d 100644
--- a/source/_integrations/screenaway.markdown
+++ b/source/_integrations/screenaway.markdown
@@ -1,12 +1,12 @@
---
title: ScreenAway
-description: Connect and control your ScreenAway devices using the Motion Blinds integration
+description: Connect and control your ScreenAway devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: screenaway
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/screenlogic.markdown b/source/_integrations/screenlogic.markdown
index e80695c90376..9d8bae43ec64 100644
--- a/source/_integrations/screenlogic.markdown
+++ b/source/_integrations/screenlogic.markdown
@@ -42,10 +42,27 @@ ScreenLogic options are set via **Settings** -> **Devices & Services** -> **Pent
Sets the operation of any connected color-capable lights.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `target` | no | An `area` containing the ScreenLogic device, the ScreenLogic `device` itself, or any `entity` from the ScreenLogic device you wish to set the color mode on. |
-| `color_mode` | no | The color mode to set. Valid values are listed below. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------------------------------------------------------------------------------- |
+| `config_entry` | no | Integration entry_id of the ScreenLogic instance you wish to set the color mode on. |
+| `color_mode` | no | The color mode to set. Valid values are listed below. |
+
+### `screenlogic.start_super_chlorination`
+
+Begins super chlorination, running for the specified period or 24 hours if none is specified.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------------------------------------------------------------------------------------- |
+| `config_entry` | no | Integration entry_id of the ScreenLogic instance you wish to start super chlorination on. |
+| `runtime` | yes | Number of hours to run super chlorination for. Defaults to 24 hours. |
+
+### `screenlogic.stop_super_chlorination`
+
+Stops super chlorination.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------------------------------- |
+| `config_entry` | no | Integration entry_id of the ScreenLogic instance you wish to stop super chlorination on. |
## Reference
diff --git a/source/_integrations/script.markdown b/source/_integrations/script.markdown
index 25cadcca9ee6..339c872932ca 100644
--- a/source/_integrations/script.markdown
+++ b/source/_integrations/script.markdown
@@ -122,11 +122,6 @@ sequence:
type: list
{% endconfiguration %}
-### Video tutorial
-This video tutorial explains how scripts work, how to use fields in scripts, and how to use response variables in scripts.
-
-
-
### Script modes
Mode | Description
@@ -140,62 +135,46 @@ Mode | Description
-### Full configuration
+### Passing variables to scripts
-{% raw %}
+As part of the service, variables can be passed along to a script so they become available within templates in that script.
+
+To configure a script to accept variables using the UI, the variables can be added as fields in the script editor.
+1. In the script editor, in the 3-dots menu, select **Add fields**.
+2. A new section called **Fields** is added between the basic information and **Sequence** sections.
+3. Enter a name and choose type and options of each desired field.
+4. Fields set up here will be shown in other UI editors, such as in an automation that calls the script as inputs depending on the type of field.
+5. To use the field data, use them as templates using the **Field key name** when they were added, as shown in the example below.
+
+Using the variables in the script requires the use of templates:
+{% raw %}
```yaml
-script:
- wakeup:
- alias: "Wake Up"
- icon: "mdi:party-popper"
- description: "Turns on the bedroom lights and then the living room lights after a delay"
- variables:
- turn_on_entity: group.living_room
+# Example configuration.yaml entry
+script:
+ notify_pushover:
+ description: "Send a pushover notification"
fields:
- minutes:
- name: Minutes
- description: "The amount of time to wait before turning on the living room lights"
- selector:
- number:
- min: 0
- max: 60
- step: 1
- unit_of_measurement: minutes
- mode: slider
- # If called again while still running (probably in delay step), start over.
- mode: restart
+ title:
+ description: "The title of the notification"
+ example: "State change"
+ message:
+ description: "The message content"
+ example: "The light is on!"
sequence:
- # This is Home Assistant Script Syntax
- - event: LOGBOOK_ENTRY
- event_data:
- name: Paulus
- message: is waking up
- entity_id: device_tracker.paulus
- domain: light
- - alias: "Bedroom lights on"
- service: light.turn_on
- target:
- entity_id: group.bedroom
+ - condition: state
+ entity_id: switch.pushover_notifications
+ state: "on"
+ - service: notify.pushover
data:
- brightness: 100
- - delay:
- # supports seconds, milliseconds, minutes, hours
- minutes: "{{ minutes }}"
- - alias: "Living room lights on"
- service: light.turn_on
- target:
- entity_id: "{{ turn_on_entity }}"
+ title: "{{ title }}"
+ message: "{{ message }}"
```
-
{% endraw %}
-### Passing variables to scripts
-
-As part of the service, variables can be passed along to a script so they become available within templates in that script.
-
-There are two ways to achieve this. One way is using the generic `script.turn_on` service. To pass variables to the script with this service, call it with the desired variables:
+Aside from the automation editor UI, variables can be passed to scripts within the service data. This can be used either by calling the script directly or the generic `script.turn_on` service. The difference is described in [Waiting for Script to Complete](#waiting-for-script-to-complete). All service data will be made available as variables in templates, even if not specified as fields in the script. This example shows how to call the script directly:
+{% raw %}
```yaml
# Example configuration.yaml entry
automation:
@@ -205,17 +184,16 @@ automation:
from: "off"
to: "on"
action:
- service: script.turn_on
- target:
- entity_id: script.notify_pushover
+ service: script.notify_pushover
data:
- variables:
- title: "State change"
- message: "The light is on!"
+ title: "State change"
+ message: "The light is on!"
```
+{% endraw %}
-The other way is calling the script as a service directly. In this case, all service data will be made available as variables. If we apply this approach on the script above, it would look like this:
+This example shows using `script.turn_on` service:
+{% raw %}
```yaml
# Example configuration.yaml entry
automation:
@@ -225,46 +203,27 @@ automation:
from: "off"
to: "on"
action:
- service: script.notify_pushover
+ service: script.turn_on
+ target:
+ entity_id: script.notify_pushover
data:
- title: "State change"
- message: "The light is on!"
+ variables:
+ title: "State change"
+ message: "The light is on!"
```
+{% endraw %}
-Using the variables in the script requires the use of templates:
-{% raw %}
-
-```yaml
-# Example configuration.yaml entry
-script:
- notify_pushover:
- description: "Send a pushover notification"
- fields:
- title:
- description: "The title of the notification"
- example: "State change"
- message:
- description: "The message content"
- example: "The light is on!"
- sequence:
- - condition: state
- entity_id: switch.pushover_notifications
- state: "on"
- - service: notify.pushover
- data:
- title: "{{ title }}"
- message: "{{ message }}"
-```
-Script variables that may be used by templates include those provided from the configuration, those that are passed when started from a service and the `this` variable whose value is a dictionary of the current script's state.
+Script variables that may be used by templates include the following:
+- those provided from the configuration as fields
+- those that are passed as data when started from a service,
+- the `this` variable the value of which is a dictionary of the current script's state.
-{% endraw %}
-
### Waiting for Script to Complete
When calling a script "directly" (e.g., `script.NAME`) the calling script will wait for the called script to finish.
@@ -299,3 +258,58 @@ script:
```
{% endraw %}
+
+### Full configuration
+
+{% raw %}
+```yaml
+script:
+ wakeup:
+ alias: "Wake Up"
+ icon: "mdi:party-popper"
+ description: "Turns on the bedroom lights and then the living room lights after a delay"
+ variables:
+ turn_on_entity: group.living_room
+ fields:
+ minutes:
+ name: Minutes
+ description: "The amount of time to wait before turning on the living room lights"
+ selector:
+ number:
+ min: 0
+ max: 60
+ step: 1
+ unit_of_measurement: minutes
+ mode: slider
+ # If called again while still running (probably in delay step), start over.
+ mode: restart
+ sequence:
+ # This is Home Assistant Script Syntax
+ - event: LOGBOOK_ENTRY
+ event_data:
+ name: Paulus
+ message: is waking up
+ entity_id: device_tracker.paulus
+ domain: light
+ - alias: "Bedroom lights on"
+ service: light.turn_on
+ target:
+ entity_id: group.bedroom
+ data:
+ brightness: 100
+ - delay:
+ # supports seconds, milliseconds, minutes, hours
+ minutes: "{{ minutes }}"
+ - alias: "Living room lights on"
+ service: light.turn_on
+ target:
+ entity_id: "{{ turn_on_entity }}"
+```
+{% endraw %}
+
+
+## Video tutorial
+
+This video tutorial explains how scripts work, how to use fields in scripts, and how to use response variables in scripts.
+
+
diff --git a/source/_integrations/select.mqtt.markdown b/source/_integrations/select.mqtt.markdown
index b842a5ce95f1..ea7271dbf5e3 100644
--- a/source/_integrations/select.mqtt.markdown
+++ b/source/_integrations/select.mqtt.markdown
@@ -12,8 +12,6 @@ The `mqtt` Select platform allows you to integrate devices that might expose con
## Configuration
-
-
To enable MQTT Select in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -82,7 +80,7 @@ device:
required: false
type: string
connections:
- description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
type: list
hw_version:
@@ -105,6 +103,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -131,7 +133,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
diff --git a/source/_integrations/sendgrid.markdown b/source/_integrations/sendgrid.markdown
index d89881d1803c..222c75bef0c5 100644
--- a/source/_integrations/sendgrid.markdown
+++ b/source/_integrations/sendgrid.markdown
@@ -42,7 +42,7 @@ api_key:
required: true
type: string
sender:
- description: The e-mail address of the sender.
+ description: The email address of the sender.
required: true
type: string
sender_name:
diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown
index 3579223d5147..5eab32ce77fb 100644
--- a/source/_integrations/sensor.markdown
+++ b/source/_integrations/sensor.markdown
@@ -66,10 +66,11 @@ The type of data a sensor returns impacts how it is displayed in the frontend. T
- **volatile_organic_compounds_parts**: Ratio of volatile organic compounds in ppm or ppb
- **voltage**: Voltage in V, mV
- **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³, or CCF
+- **volume_flow_rate**: Volume flow rate in m³/h, ft³/min, L/min, gal/min
- **volume_storage**: Generic stored volume in L, mL, gal, fl. oz., m³, ft³, or CCF
- **water**: Water consumption in L, gal, m³, ft³, or CCF
- **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st
-- **wind_speed**: Wind speed in ft/s, km/h, kn, m/s, or mph
+- **wind_speed**: Wind speed in Beaufort, ft/s, km/h, kn, m/s, or mph
diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown
index 9c8d32228443..416a43eec31d 100644
--- a/source/_integrations/sensor.mqtt.markdown
+++ b/source/_integrations/sensor.mqtt.markdown
@@ -12,8 +12,6 @@ This `mqtt` sensor platform uses the MQTT message payload as the sensor value. I
## Configuration
-
-
To use your MQTT sensor in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -94,6 +92,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -108,10 +110,8 @@ device:
type: string
device_class:
description: The [type/class](/integrations/sensor/#device-class) of the sensor to set the icon in the frontend. The `device_class` can be `null`.
- default: None
required: false
type: device_class
- default: None
enabled_by_default:
description: Flag which defines if the entity should be enabled when first added.
required: false
@@ -126,7 +126,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. When set, the entity category must be `diagnostic` for sensors.
required: false
type: string
- default: None
expire_after:
description: If set, it defines the number of seconds after the sensor's state expires, if it's not updated. After expiry, the sensor's state becomes `unavailable`. Default the sensors state never expires.
required: false
@@ -150,7 +149,7 @@ json_attributes_topic:
required: false
type: string
last_reset_value_template:
- description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the last_reset. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes."
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the last_reset. When `last_reset_value_template` is set, the `state_class` option must be `total`. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes."
required: false
type: template
name:
@@ -185,10 +184,8 @@ state_class:
description: The [state_class](https://developers.home-assistant.io/docs/core/entity/sensor#available-state-classes) of the sensor.
required: false
type: string
- default: None
state_topic:
description: The MQTT topic subscribed to receive sensor values. If `device_class`, `state_class`, `unit_of_measurement` or `suggested_display_precision` is set, and a numeric value is expected, an empty value `''` will be ignored and will not update the state, a `'null'` value will set the sensor to an `unknown` state. The `device_class` can be `null`.
- default: None
required: true
type: string
unique_id:
@@ -197,7 +194,6 @@ unique_id:
type: string
unit_of_measurement:
description: Defines the units of measurement of the sensor, if any. The `unit_of_measurement` can be `null`.
- default: None
required: false
type: string
value_template:
@@ -208,7 +204,71 @@ value_template:
## Examples
-In this section you find some real-life examples of how to use this sensor.
+In this section, you find some real-life examples showing how to use this sensor.
+
+### Processing Unix EPOCH timestamps
+
+The example below shows how an MQTT sensor can process a Unix EPOCH payload.
+
+{% raw %}
+
+Set up via YAML:
+
+```yaml
+# Example configuration.yaml entry
+mqtt:
+ sensor:
+ - name: "turned on"
+ state_topic: "pump/timestamp_on"
+ device_class: "timestamp"
+ value_template: "{{ as_datetime(value) }}"
+ unique_id: "hp_1231232_ts_on"
+ device:
+ name: "Heat pump"
+ identifiers:
+ - "hp_1231232"
+```
+
+{% endraw %}
+
+Or set up via MQTT discovery:
+
+Discovery topic: `homeassistant/sensor/hp_1231232/config`
+
+{% raw %}
+
+```json
+{
+ "name": "turned on",
+ "state_topic": "pump/timestamp_on",
+ "device_class": "timestamp",
+ "value_template": "{{ as_datetime(value) }}",
+ "unique_id": "hp_1231232_ts_on",
+ "device": {
+ "name": "Heat pump",
+ "identifiers": [
+ "hp_1231232"
+ ]
+ }
+}
+```
+
+{% endraw %}
+
+To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages.
+
+Payload topic: `pump/timestamp_on`
+Payload: `1707294116`
+
+To set the state of the sensor manually:
+
+```bash
+mosquitto_pub -h 127.0.0.1 -u username -p some_password -t pump/timestamp_on -m '1707294116'
+```
+
+Make sure the IP address of your MQTT broker is used and that user credentials have been set up correctly.
+
+The `value_template` will render the Unix EPOCH timestamp to correct format: `2024-02-07 08:21:56+00:00`.
### JSON attributes topic configuration
diff --git a/source/_integrations/sensor.rest.markdown b/source/_integrations/sensor.rest.markdown
index 7a224533802b..3e0368918e8d 100644
--- a/source/_integrations/sensor.rest.markdown
+++ b/source/_integrations/sensor.rest.markdown
@@ -423,12 +423,12 @@ rest:
sensor:
- name: "Steam Temp"
- value_template: "{{ json_value['response']['temp0'] | regex_findall_index('([0-9]+)XF') }}"
+ value_template: "{{ value_json['response']['temp0'] | regex_findall_index('([0-9]+)XF') }}"
unit_of_measurement: "°F"
steam_time_remaining:
- name: "Steam Time Remaining"
- value_template: "{{ json_value['response']['time0'] }}"
+ value_template: "{{ value_json['response']['time0'] }}"
unit_of_measurement: "minutes"
rest_command:
diff --git a/source/_integrations/sensorpush.markdown b/source/_integrations/sensorpush.markdown
index d5e120d548c4..925f2130a346 100644
--- a/source/_integrations/sensorpush.markdown
+++ b/source/_integrations/sensorpush.markdown
@@ -23,6 +23,7 @@ Sensor entities (temperature, humidity, barometric pressure) will not be availab
## Supported devices
+- [HT1 Temperature and Humidity Smart Sensor](https://www.sensorpush.com/products/p/ht1)
- [HT.w Water-Resistant Temperature / Humidity Smart Sensor](https://www.sensorpush.com/products/p/ht-w)
- [HTP.xw Extreme Accuracy Water-Resistant Temperature / Humidity / Barometric Pressure Smart Sensor](https://www.sensorpush.com/products/p/htp-xw)
diff --git a/source/_integrations/seventeentrack.markdown b/source/_integrations/seventeentrack.markdown
index 20b65ad595c7..8b075ff352bd 100644
--- a/source/_integrations/seventeentrack.markdown
+++ b/source/_integrations/seventeentrack.markdown
@@ -4,14 +4,17 @@ description: Instructions on how to use 17track.net data within Home Assistant
ha_category:
- Postal Service
ha_release: 0.83
+ha_config_flow: true
ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@shaiu'
ha_domain: seventeentrack
ha_platforms:
- sensor
-ha_integration_type: integration
+ha_integration_type: service
---
-The `seventeentrack` sensor platform allows users to get package data tied to their [17track.net](https://www.17track.net/) account. The platform creates both summary sensors, which show the number of packages in a current state (e.g., "In Transit"), as well as individual sensors for each package within the account.
+The seventeentrack {% term integration %} allows users to get package data tied to their [17track.net](https://www.17track.net) account. The integration creates both summary sensors, which show the number of packages in a current state (e.g., "In Transit"), as well as individual sensors for each package within the account.
@@ -19,38 +22,7 @@ Although the 17track.net website states that account passwords cannot be longer
-## Configuration
-
-To enable the platform, add the following lines to your `configuration.yaml`
-file:
-
-```yaml
-sensor:
- - platform: seventeentrack
- username: EMAIL_ADDRESS
- password: YOUR_PASSWORD
-```
-
-{% configuration %}
-username:
- description: The email address associated with your 17track.net account.
- required: true
- type: string
-password:
- description: The password associated with your 17track.net account.
- required: true
- type: string
-show_archived:
- description: Whether sensors should be created for archived packages.
- required: false
- type: boolean
- default: false
-show_delivered:
- description: Whether sensors should be created for delivered packages.
- required: false
- type: boolean
- default: false
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
## Package statuses
@@ -59,10 +31,10 @@ show_delivered:
- Not found
- In transit
- Expired
-- Pick up
+- Ready to be picked up
- Undelivered
- Delivered
-- Alert
+- Returned
## Package-level attributes
@@ -102,3 +74,23 @@ content: >
```
{% endraw %}
+
+## Services
+
+### Service `seventeentrack.get_packages`
+
+The `seventeentrack.get_packages` service allows you to query the 17track API for the latest package data.
+
+
+| Service data attribute | Optional | Description |
+|------------------------|----------|---------------------------------------------|
+| `config_entry_id` | No | The ID of the 17Track service config entry. |
+| `package_state` | yes | A list of the package states. |
+
+```yaml
+# Example automation action to add a product to the cart by name.
+- service: seventeentrack.get_packages
+ data:
+ config_entry_id: 2b4be47a1fa7c3764f14cf756dc98991
+ package_state: ["Delivered", "In transit"]
+```
diff --git a/source/_integrations/sfr_box.markdown b/source/_integrations/sfr_box.markdown
index 9460349ce11b..9a1dbeec6f90 100644
--- a/source/_integrations/sfr_box.markdown
+++ b/source/_integrations/sfr_box.markdown
@@ -26,3 +26,9 @@ This integration provides the following platforms:
- Sensors - such as ADSL line status, attenuation, noise and data rate.
{% include integrations/config_flow.md %}
+
+## Compatibility
+
+The integration uses the REST API, which is known to be available on models `NB4`, `NB5`, `NB6`, `NB6V`, and `NB6VAC`.
+
+However, `NCC` models do not appear to expose this REST API, and are therefore unsupported by the integration.
diff --git a/source/_integrations/sharkiq.markdown b/source/_integrations/sharkiq.markdown
index c1dcdcb217e4..1d38e4187fe8 100644
--- a/source/_integrations/sharkiq.markdown
+++ b/source/_integrations/sharkiq.markdown
@@ -21,7 +21,7 @@ The `sharkiq` integration allows you to control your [Shark IQ](https://www.shar
## Services
-Currently supported services are:
+Currently supported [`vacuum`](/integrations/vacuum/) services are:
- `start`
- `pause`
@@ -30,4 +30,32 @@ Currently supported services are:
- `locate`
- `set_fan_speed`
+### Room Targeting
+In addition to the [`vacuum`](/integrations/vacuum/) services, this integration supports room targeting.
+This allows you to select specific rooms that you want cleaned, instead of doing a whole-home clean.
+
+```yaml
+service: sharkiq.clean_room
+data:
+ rooms:
+ - "Entry"
+ - "Living Room"
+target:
+ entity_id: vacuum.my_vacuum
+```
+**Important Note:** The list of rooms must be written _exactly_ as they appear in the Shark Clean app. If you want exact names that the service will understand,
+look for the `Rooms` attribute of your Shark Robot Vacuum in Home Assistant. This will be populated with the rooms that the robot has configured, as they will be
+understood by the service.
+
+If you want to use the area selector in the service's UI, you need to format the area names exactly as they appear in the vacuum's `Rooms` attribute. You may also check the attribute using Home Assistant's [Developer Tools](https://www.home-assistant.io/docs/tools/dev-tools/).
+
+
+
+
+## Troubleshooting
+
+### Integration Disconnecting
+
+If the integration frequently disconnects and you have an ad blocker runner like [Pi-hole](https://pi-hole.net/) or [AdGuard](https://adguard.com) add `ads-field.aylanetworks.com` to the Allow list . This domain is needed for the connection and can be part of the automatic blocking because of `ads` being part of the subdomain.
+
If `pause` does not work for you, then it is not supported by your vacuum. The `stop` service will provide similar functionality.
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index 71e4e2fac4f3..d9728a665040 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -3,13 +3,16 @@ title: Shelly
description: Integrate Shelly devices
ha_category:
- Binary sensor
+ - Climate
- Cover
- Energy
+ - Event
- Light
- Number
- Sensor
- Switch
- Update
+ - Valve
ha_release: 0.115
ha_codeowners:
- '@balloob'
@@ -34,11 +37,12 @@ ha_platforms:
- sensor
- switch
- update
+ - valve
ha_integration_type: device
ha_quality_scale: platinum
---
-Integrate [Shelly devices](https://shelly.cloud) into Home Assistant.
+Integrate [Shelly devices](https://shelly.com) into Home Assistant.
{% include integrations/config_flow.md %}
@@ -50,7 +54,7 @@ There are three generations of devices and all generations are supported by this
Generation 1 devices use the `CoIoT` protocol to communicate with the integration. `CoIoT` must be enabled in the device settings. Navigate to the local IP address of your Shelly device, **Internet & Security** > **ADVANCED - DEVELOPER SETTINGS** and check the box **Enable CoIoT**.
-We recommend using `unicast` for communication. To enable this, enter the local IP address of the Home Assistant server and port `5683` into the **CoIoT peer** field and push **SAVE** button. **This is mandatory for battery operated devices**. After changing the **CoIoT peer**, the Shelly device needs to be manually restarted.
+We recommend using `unicast` for communication. To enable this, enter the local IP address of the Home Assistant server and port `5683` into the **CoIoT peer** field and push **SAVE** button. **This is mandatory for battery operated devices** (even if USB connected). After changing the **CoIoT peer**, the Shelly device needs to be manually restarted.
Home Assistant will display a repair issue for the Shelly device if push updates from this device do not reach the Home Assistant server.
@@ -65,9 +69,10 @@ The list below will help you diagnose and fix the problem:
## Shelly device configuration (generation 2 and 3)
-Generation 2 and 3 devices use the `RPC` protocol to communicate with the integration. **Battery powered devices** need manual outbound WebSocket configuration, Navigate to the local IP address of your Shelly device, **Settings** >> **Connectivity** >> **Outbound WebSocket** and check the box **Enable Outbound WebSocket**, under server enter the following address:
+Generation 2 and 3 devices use the `RPC` protocol to communicate with the integration. **Battery operated devices** (even if USB connected) need manual outbound WebSocket configuration, Navigate to the local IP address of your Shelly device, **Settings** >> **Connectivity** >> **Outbound WebSocket** and check the box **Enable Outbound WebSocket**, under server enter the following address:
`ws://` + `Home_Assistant_local_ip_address:Port` + `/api/shelly/ws` (for example: `ws://192.168.1.100:8123/api/shelly/ws`), click **Apply** to save the settings.
+In case your installation is set up to use SSL encryption (HTTP**S** with certificate), an additional `s` needs to be added to the WebSocket protocol, too, so that it reads `wss://` (for example: `wss://192.168.1.100:8123/api/shelly/ws`).
Integration is communicating directly with the device; cloud connection is not needed.
@@ -79,6 +84,12 @@ Shelly generation 2 and 3 devices not battery-powered can act as a Bluetooth pro
{% include integrations/option_flow.md %}
+## Range Extender Support
+
+Shelly generation 2 and 3 devices that are not battery-powered can act as a Range Extender.
+Devices of the same generations can be configured via those Range Extenders specifying a custom TCP port during the configuration flow.
+Currently, only static IP or DHCP reserved IP are supported for the main device.
+
## Entity naming (generation 1)
The integration uses `Device Name` to name its entities if the device has only one relay or no relays at all.
@@ -281,7 +292,7 @@ As soon as you change the temperature, it gets enabled again.
## Shelly Gas with Valve add-on
-If you have Valve add-on connected to Shelly Gas, the integration will create two entities for the valve. The `switch` entity allows you to control the valve, the `sensor` entity shows exact states of the valve.
+If you have Valve add-on connected to Shelly Gas, the integration will create three entities for the valve. The `switch` and `valve` entities allow you to control the valve, the `sensor` entity shows exact states of the valve. The `switch` entity is deprecated and will be removed in a future version of Home Assistant.
@@ -308,8 +319,15 @@ Please check from the device Web UI that the configured server is reachable.
## Known issues and limitations
-- Only supports firmware 1.11 and later for generation 1 devices
+- Only supports firmware 1.9 and later for generation 1 devices
- Only supports firmware 1.0 and later for generation 2 devices
+- The following generation 1 devices only support firmware 1.11 and later (due to incompatible API):
+ - Shelly DUO
+ - Shelly Bulb RGBW
+ - Shelly Dimmer
+ - Shelly Dimmer 2
+ - Shelly RGBW2
+ - Shelly Vintage
- Generation 1 "Shelly 4Pro" and "Shelly Sense" are not supported (devices based on old CoAP v1 protocol)
- Before set up, battery-powered devices must be woken up by pressing the button on the device.
- For battery-powered devices, the `update` platform entities only inform about the availability of firmware updates but are not able to trigger the update process.
diff --git a/source/_integrations/shopping_list.markdown b/source/_integrations/shopping_list.markdown
index 957202089ede..533e88d4f92a 100644
--- a/source/_integrations/shopping_list.markdown
+++ b/source/_integrations/shopping_list.markdown
@@ -14,9 +14,9 @@ ha_platforms:
- todo
---
-The `shopping_list` integration allows you to keep track of shopping list items.
+The **Shopping list** {% term integration %} allows you to keep track of shopping list items.
-Your shopping list will be accessible from the sidebar, and you can optionally add the [shopping list card](/dashboards/shopping-list/) to your dashboard. With the [conversation integration](/integrations/conversation/) you can add items to your shopping list using voice commands like "Add eggs to my shopping list."
+Your shopping list will be accessible from the sidebar, and you can optionally add the [To-do list card](/dashboards/todo-list/) to your dashboard. With the [conversation integration](/integrations/conversation/), you can add items to your shopping list using voice commands like "Add eggs to my shopping list."
{% include integrations/config_flow.md %}
@@ -28,33 +28,33 @@ You can add or remove items from your shopping list by using the following servi
Add an item to the shopping list.
-| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------------|
-| `name` | no | Name of the item to add. Example: "Milk" |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------- |
+| `name` | no | Name of the item to add. Example: "Milk" |
### Service `shopping_list.remove_item`
Remove the first item with matching name from the shopping list.
-| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------------|
-| `name` | no | Name of the item to remove. Example: "Milk" |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------- |
+| `name` | no | Name of the item to remove. Example: "Milk" |
### Service `shopping_list.complete_item`
Mark the first item with matching name as completed in the shopping list. It does not remove the item.
| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------------|
-| `name` | no | Name of the item to mark as completed. Example: "Milk" |
+| ---------------------- | -------- | ------------------------------------------------------ |
+| `name` | no | Name of the item to mark as completed. Example: "Milk" |
### Service `shopping_list.incomplete_item`
Mark the first item with matching name as incomplete in the shopping list.
-| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------------|
-| `name` | no | Name of the item to mark as incomplete. Example: "Milk" |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------- |
+| `name` | no | Name of the item to mark as incomplete. Example: "Milk" |
### Service `shopping_list.complete_all`
@@ -73,15 +73,15 @@ Clear completed items from the shopping list.
Sort all items by name in the shopping list.
| Service data attribute | Optional | Description |
-|------------------------|----------|---------------------------------------------------------------------|
-| `reverse` | yes | Whether to sort in reverse (_descending_) order. (default: `False`) |
+| ---------------------- | -------- | ------------------------------------------------------------------- |
+| `reverse` | yes | Whether to sort in reverse (_descending_) order. (default: `False`) |
## Using in automations
A `shopping_list_updated` event is triggered when items in the list are modified, with the following data payload attached to it. This can be used to trigger automations such as sending a push notification when someone adds an item to the shopping list, which when clicked, will open the list.
| Data payload attribute | Description |
-|------------------------|--------------------------------------------------------------------------------------------------------------------|
+| ---------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `action` | What action was taken on the item. Either `add` for a new item being added, or `update` for an item being updated. |
| `item` | A dictionary containing details of the item that was updated. |
| `item.id` | A unique ID for this item |
diff --git a/source/_integrations/signal_messenger.markdown b/source/_integrations/signal_messenger.markdown
index 8855e0d0f741..2a3645954290 100644
--- a/source/_integrations/signal_messenger.markdown
+++ b/source/_integrations/signal_messenger.markdown
@@ -70,7 +70,7 @@ recipients:
You can use Signal Messenger REST API as a Home Assistant trigger. In this example, we will make a simple chatbot. If you write anything to your Signal account linked to Signal Messenger REST API, the automation gets triggered, with the condition that the number (attribute source) is correct, to take action by sending a Signal notification back with a "Message received!".
-To accomplish this, edit the configuration of Home Assistant, adding a [RESTful resource](/integrations/rest/) as follows:
+To accomplish this, make sure the addon's `mode` parameter is set to `native` or `normal`, and edit the configuration of Home Assistant, adding a [RESTful resource](/integrations/rest/) as follows:
```yaml
- resource: "http://127.0.0.1:8080/v1/receive/"
@@ -115,6 +115,9 @@ action:
### Text message with an attachment
+This example assumes you have an image stored in the default `www`-folder in Home Assistant Operating System.
+
+
```yaml
...
action:
@@ -123,12 +126,12 @@ action:
message: "Alarm in the living room!"
data:
attachments:
- - "/tmp/surveillance_camera.jpg"
+ - "/config/www/surveillance_camera.jpg"
```
### Text message with an attachment from a URL
-To attach files from outside of Home Assistant, the URLs must be added to the [`allowlist_external_urls`](/docs/configuration/basic/#allowlist_external_urls) list.
+To attach files from outside of Home Assistant, the URLs must be added to the [`allowlist_external_urls`](/integrations/homeassistant/#allowlist_external_urls) list.
Note there is a 50MB size limit for attachments retrieved via URLs. You can also set `verify_ssl` to `false` to ignore SSL errors (default `true`).
diff --git a/source/_integrations/simplisafe.markdown b/source/_integrations/simplisafe.markdown
index b4c39a37a14a..e72ee5f143f1 100644
--- a/source/_integrations/simplisafe.markdown
+++ b/source/_integrations/simplisafe.markdown
@@ -42,7 +42,7 @@ There is currently support for the following device types within Home Assistant:
## SimpliSafe Plans
-SimpliSafe offers several [monitoring plans](https://support.simplisafe.com/articles/alarm-events-monitoring/what-are-the-service-plan-options/6344794a013ba90af0bce6a4). Currently, only the Standard and Fast Protect are known to work with this integration; if you find otherwise, please consider updating this documentation.
+SimpliSafe offers several [monitoring plans](https://support.simplisafe.com/articles/alarm-events-monitoring/what-are-the-service-plan-options/6344794a013ba90af0bce6a4). All plans (including the free plan) should work with this integration.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/simu.markdown b/source/_integrations/simu.markdown
index c78717b95859..532af038646e 100644
--- a/source/_integrations/simu.markdown
+++ b/source/_integrations/simu.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/siren.mqtt.markdown b/source/_integrations/siren.mqtt.markdown
index 9524be4e68a8..38a1877ea46f 100644
--- a/source/_integrations/siren.mqtt.markdown
+++ b/source/_integrations/siren.mqtt.markdown
@@ -18,8 +18,6 @@ When a `state_topic` is not available, the siren will work in optimistic mode. I
Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect operation.
-
-
To enable this siren in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -116,6 +114,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -142,7 +144,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
diff --git a/source/_integrations/slack.markdown b/source/_integrations/slack.markdown
index 67d966f0b8e5..e8f50dc093fd 100644
--- a/source/_integrations/slack.markdown
+++ b/source/_integrations/slack.markdown
@@ -137,30 +137,30 @@ One sensor entity will be created:
The following attributes can be placed inside the `data` key of the service call for extended functionality:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `username` | yes | The username of the Slack bot.
-| `icon` | yes | The icon of the Slack bot.
-| `file` | yes | A file to include with the message; see below.
-| `blocks` | yes | Array of [Slack blocks](https://api.slack.com/messaging/composing/layouts). *NOTE*: if using `blocks`, they are shown **in place of** the `message` within Slack apps. The message field will be used as notification text and anywhere else Slack is unable to display blocks. `message` is required regardless of whether this field is used.
-| `blocks_template` | yes | The same as `blocks`, but able to support [templates](https://www.home-assistant.io/docs/configuration/templating).
-| `thread_ts` | yes | Sends the message as a reply to a specified parent message.
+| Attribute | Optional | Description |
+| ----------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `username` | yes | The username of the Slack bot. |
+| `icon` | yes | The icon of the Slack bot. |
+| `file` | yes | A file to include with the message; see below. |
+| `blocks` | yes | Array of [Slack blocks](https://api.slack.com/messaging/composing/layouts). *NOTE*: if using `blocks`, they are shown **in place of** the `message` within Slack apps. The message field will be used as notification text and anywhere else Slack is unable to display blocks. `message` is required regardless of whether this field is used. |
+| `blocks_template` | yes | The same as `blocks`, but able to support [templates](https://www.home-assistant.io/docs/configuration/templating). |
+| `thread_ts` | yes | Sends the message as a reply to a specified parent message. |
Note that using `file` will ignore all usage of `blocks` and `blocks_template` (as Slack does not support those frameworks in messages that accompany uploaded files).
To include a local file with the Slack message, use these attributes underneath the `file` key:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `path` | no | A local filepath that has been [whitelisted](/docs/configuration/basic/#allowlist_external_dirs).
+| Attribute | Optional | Description |
+| --------- | -------- | --------------------------------------------------------------------------------------------------- |
+| `path` | no | A local filepath that has been [whitelisted](/integrations/homeassistant/#allowlist_external_dirs). |
To include a remote file with the Slack message, use these attributes underneath the `file` key:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `url` | no | A URL that has been [whitelisted](/docs/configuration/basic/#allowlist_external_urls).
-| `username` | yes | An optional username if the URL is protected by HTTP Basic Auth.
-| `password` | yes | An optional password if the URL is protected by HTTP Basic Auth.
+| Attribute | Optional | Description |
+| ---------- | -------- | ---------------------------------------------------------------------------------------- |
+| `url` | no | A URL that has been [whitelisted](/integrations/homeassistant/#allowlist_external_urls). |
+| `username` | yes | An optional username if the URL is protected by HTTP Basic Auth. |
+| `password` | yes | An optional password if the URL is protected by HTTP Basic Auth. |
### Obtaining a member ID
diff --git a/source/_integrations/sleepiq.markdown b/source/_integrations/sleepiq.markdown
index 13a2a55faeda..9db488bdb351 100644
--- a/source/_integrations/sleepiq.markdown
+++ b/source/_integrations/sleepiq.markdown
@@ -31,7 +31,7 @@ ha_integration_type: integration
The SleepIQ integration lets you integrate your SleepNumber Bed via [SleepIQ by SleepNumber](https://www.sleepnumber.com/pages/sleepiq-sleep-tracker).
-There is currently support for the following platforms within Home Assistant:
+There is currently support available for the following platforms within Home Assistant, depending on the bed's capabilities:
- Binary sensor - View occupancy of each side
- Button - Calibrate the bed
@@ -40,6 +40,7 @@ There is currently support for the following platforms within Home Assistant:
- Number - View/Set the actuator positions of the foundation
- Number - View/Set firmness for each side
- Select - Choose a foundation preset position
+- Select/Number - Set a foot warmer mode and timeout
- Sensor - View pressure of each side
- Switch - Toggle Privacy mode
diff --git a/source/_integrations/sma.markdown b/source/_integrations/sma.markdown
index b08bc9e122bd..e648b37b953f 100644
--- a/source/_integrations/sma.markdown
+++ b/source/_integrations/sma.markdown
@@ -17,10 +17,15 @@ ha_integration_type: integration
The SMA Solar integration will poll a [SMA](http://www.sma-solar.com/) [(US)](https://www.sma-america.com/) solar inverter, energy meter or battery inverter and present the values as sensors in Home Assistant.
-The integration uses the web interface of the device. Before you start, make sure you are able to connect to the solar inverter from your favorite web browser.
{% include integrations/config_flow.md %}
+## Supported Devices
+
+Not all inverters, energy meters and batteries from SMA are supported.
+
+The integration uses the device's web interface (called webconnect). Before you start, make sure you are able to connect to the solar inverter from your favorite web browser. Devices with the ennexos operating system (like the Tripower X series) and all Energy Meters (SMA Energy Meter and SMA Sunny Home Manager) are not supported.
+
## Sensors
The SMA WebConnect module supports a wide variety of sensors, but not all of these have been mapped in the `pysma` library. Currently available sensors can be found below. Feel free to submit additional sensors to be added as standard sensors to the [pysma library](https://github.com/rklomp/pysma/blob/master/pysma/definitions.py).
diff --git a/source/_integrations/smart_blinds.markdown b/source/_integrations/smart_blinds.markdown
index 2034bdecc7dc..5ff3c8bd056a 100644
--- a/source/_integrations/smart_blinds.markdown
+++ b/source/_integrations/smart_blinds.markdown
@@ -1,12 +1,12 @@
---
-title: Smart Blinds
-description: Connect and control your Smart Blinds devices using the Motion Blinds integration
+title: Smartblinds
+description: Connect and control your Smartblinds devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: smart_blinds
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/smart_home.markdown b/source/_integrations/smart_home.markdown
index 5ff7c3e700a4..cbc5d7635dee 100644
--- a/source/_integrations/smart_home.markdown
+++ b/source/_integrations/smart_home.markdown
@@ -1,12 +1,12 @@
---
title: Smart Home
-description: Connect and control your Smart Home devices using the Motion Blinds integration
+description: Connect and control your Smart Home devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: smart_home
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/smarther.markdown b/source/_integrations/smarther.markdown
index 27d4fd83124d..36899b8a7e48 100644
--- a/source/_integrations/smarther.markdown
+++ b/source/_integrations/smarther.markdown
@@ -2,10 +2,12 @@
title: Smarther
description: Connect and control your Smarther devices using the Netatmo integration
ha_category:
+ - Binary sensor
- Camera
- Climate
- Cover
- Environment
+ - Fan
- Hub
- Light
- Media source
@@ -21,10 +23,12 @@ ha_codeowners:
- '@cgtobi'
ha_config_flow: true
ha_platforms:
+ - binary_sensor
- camera
- climate
- cover
- diagnostics
+ - fan
- light
- select
- sensor
diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown
index 268b6ef67b4e..ae88c313e48f 100644
--- a/source/_integrations/smartthings.markdown
+++ b/source/_integrations/smartthings.markdown
@@ -64,7 +64,7 @@ The PAT is used to create a Home Assistant SmartApp in your SmartThings account
This integration requires an internet accessible incoming webhook to receive push updates from SmartThings. The preferred approach is to subscribe to [Home Assistant Cloud (Nabu Casa)](https://www.nabucasa.com/) and the integration will configure and use a cloudhook automatically. Alternatively, you will have to configure and setup an internet accessible webhook in Home Assistant as described below:
1. Setup [remote access](/docs/configuration/remote/) via a domain name secured with SSL. *Self-signed SSL certificates are not supported by the SmartThings Cloud API.*
-2. Set the external URL in the Home Assistant [configuration](/docs/configuration/basic) to the URL that Home Assistant is available on the internet (this must start with `https://`). If you do not use Nabu Casa you must configure your network to allow TCP traffic from the internet to reach the IP address and port of the device running Home Assistant.
+2. Set the external URL in the Home Assistant [configuration](/integrations/homeassistant/#external_url) to the URL that Home Assistant is available on the internet (this must start with `https://`). If you do not use Nabu Casa you must configure your network to allow TCP traffic from the internet to reach the IP address and port of the device running Home Assistant.
## Setup instructions
@@ -98,7 +98,7 @@ The SmartThings integration triggers events for select device capabilities.
### smartthings.button
-The integration will trigger an event when a device with the [button](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability is actuated and can be used to trigger automations within Home Assistant. Below is an example of the data payload:
+The integration will trigger an event when a device with the [button](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability is actuated and can be used to trigger automations within Home Assistant. Below is an example of the data payload:
```json
{
@@ -115,14 +115,14 @@ The integration will trigger an event when a device with the [button](https://de
| `component_id` | Describes which integration of the device triggered the event. `main` represents the parent device. For devices with child-devices, this attribute identifies the child that raised the event. For multi-button devices, the current SmartThings API will no longer pass the ButtonNumber but use a child component_id for each button. The device handler installed on SmartThings must be able to create those child components. |
| `device_id` | The unique id of the device in SmartThings. This can be located in the Home Assistant device registry or in the [SmartThings Developer Workspace](https://smartthings.developer.samsung.com/workspace/). |
| `location_id` | The unique id of the location the device is part of. This can be found in the configuration entry registry or in the [SmartThings Developer Workspace](https://smartthings.developer.samsung.com/workspace/). |
-| `value` | Describes the action taken on the button. See the [button](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability reference for a list of possible values (not all are supported by every device). |
+| `value` | Describes the action taken on the button. See the [button](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability reference for a list of possible values (not all are supported by every device). |
| `name` | The name given to the device in SmartThings. |
Event data payloads are logged at the debug level, see [debugging](#debugging) for more information.
## Platforms
-SmartThings represents devices as a set of [capabilities](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities) and the SmartThings integration maps those to entity platforms in Home Assistant. A single device may be represented by one or more platforms.
+SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference) and the SmartThings integration maps those to entity platforms in Home Assistant. A single device may be represented by one or more platforms.
- [Binary sensor](#binary-sensor)
- [Climate](#climate)
@@ -140,16 +140,16 @@ Support for additional platforms will be added in the future.
The SmartThings binary sensor platform lets you view devices that have binary sensor-related capabilities. A binary sensor entity will be created for each attribute (below) supported by the device.
-| Capability | Attribute | On-Value |
-| ------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ---------- |
-| [`accelerationSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#accelerationSensor) | `acceleration` | `active` |
-| [`contactSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | `contact` | `open` |
-| [`filterStatus`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | `filterStatus` | `replace` |
-| [`motionSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | `motion` | `active` |
-| [`presenceSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | `presence` | `present` |
-| [`tamperAlert`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | `tamper` | `detected` |
-| [`valve`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | `valve` | `open` |
-| [`waterSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | `water` | `wet` |
+| Capability | Attribute | On-Value |
+| ----------------------------------------------------------------------------------------------------------------------------- | -------------- | ---------- |
+| [`accelerationSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#accelerationSensor) | `acceleration` | `active` |
+| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | `contact` | `open` |
+| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | `filterStatus` | `replace` |
+| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | `motion` | `active` |
+| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | `presence` | `present` |
+| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | `tamper` | `detected` |
+| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | `valve` | `open` |
+| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | `water` | `wet` |
### Climate
@@ -159,124 +159,124 @@ The SmartThings Climate platform lets you control devices that have air conditio
For a SmartThings Air Conditioner to be represented by the climate platform, it must have all of the following required capabilities:
-| Capability | Climate Features |
-| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [`airConditionerMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) (required) | `hvac mode`, `hvac action` |
-| [`airConditionerFanMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#airConditionerFanMode) (required) | `fan mode` |
-| [`temperatureMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (required) | `temperature` |
-| [`thermostatCoolingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (required) | `target temp` |
-| [`demandResponseLoadControl`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#demandResponseLoadControl) | `drlc_status_duration` (state attribute), `drlc_status_level` (state attribute), `drlc_status_override` (state attribute), `drlc_status_start` (state attribute) |
+| Capability | Climate Features |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) (required) | `hvac mode`, `hvac action` |
+| [`airConditionerFanMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerFanMode) (required) | `fan mode` |
+| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (required) | `temperature` |
+| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (required) | `target temp` |
+| [`demandResponseLoadControl`](https://developer.smartthings.com/docs/devices/capabilities/proposed#demandResponseLoadControl) | `drlc_status_duration` (state attribute), `drlc_status_level` (state attribute), `drlc_status_override` (state attribute), `drlc_status_start` (state attribute) |
#### Thermostats
For a SmartThings thermostat to be represented by the climate platform, it must have all the capabilities from either "set a" _or_ "set b":
-| Capability | Climate Features |
-| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
-| [`thermostat`](https://developer-preview.smartthings.com/docs/devices/capabilities/deprecated#thermostat) (set a) | `hvac mode`, `hvac action`, `target temp high`, `target temp low` and `fan mode` |
-| [`thermostatMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) (set b) | `hvac mode` |
-| [`thermostatCoolingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (seb b) | `target temp low` |
-| [`thermostatHeatingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) (set b) | `target temp high` |
-| [`temperatureMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (set b) |
-| [`thermostatOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `hvac action` |
-| [`thermostatFanMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `fan mode` |
-| [`relativeHumidityMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` (state attribute) |
+| Capability | Climate Features |
+| --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| [`thermostat`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostat) (set a) | `hvac mode`, `hvac action`, `target temp high`, `target temp low` and `fan mode` |
+| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) (set b) | `hvac mode` |
+| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (seb b) | `target temp low` |
+| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) (set b) | `target temp high` |
+| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (set b) |
+| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `hvac action` |
+| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `fan mode` |
+| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` (state attribute) |
### Cover
The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover platform, it must have one of the capabilities from "set a" below.
-| Capability | Cover Features |
-| ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- |
-| [`doorControl`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) (set a) | `open` and `close` |
-| [`garageDoorControl`](https://developer-preview.smartthings.com/docs/devices/capabilities/deprecated#garageDoorControl) (seb a) | `open` and `close` |
-| [`windowShade`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) (set a) | `open` and `close` |
-| [`switchLevel`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` |
-| [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` |
-| [`battery`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) |
+| Capability | Cover Features |
+| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------- |
+| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) (set a) | `open` and `close` |
+| [`garageDoorControl`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#garageDoorControl) (seb a) | `open` and `close` |
+| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) (set a) | `open` and `close` |
+| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` |
+| [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` |
+| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) |
### Fan
The SmartThings Fan platform lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability.
-| Capability | Fan Features |
-| ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
-| [`fanSpeed`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#fanSpeed) | `speed` (`off`, `low`, `medium`, and `high`) |
+| Capability | Fan Features |
+| --------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
+| [`fanSpeed`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#fanSpeed) | `speed` (`off`, `low`, `medium`, and `high`) |
### Light
The SmartThings Light platform lets you control devices that have light-related capabilities. For a SmartThings device to be represented by the light platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability.
-| Capability | Light Features |
-| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
-| [`switchLevel`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` |
-| [`colorControl`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` |
-| [`colorTemperature`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` |
+| Capability | Light Features |
+| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
+| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` |
+| [`colorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` |
+| [`colorTemperature`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` |
### Lock
-The SmartThings Lock platform lets you control devices that have the [`lock`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands.
+The SmartThings Lock platform lets you control devices that have the [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands.
### Sensor
The SmartThings Sensor platform lets your view devices that have sensor-related capabilities. A Sensor entity is created for each attribute (below) supported by the device.
-| Capability | Attributes |
-| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
-| [`activityLightingMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | `lightingMode` |
-| [`airConditionerMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | `airConditionerMode` |
-| [`airQualitySensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | `airQuality` |
-| [`alarm`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#alarm) | `alarm` |
-| [`audioVolume`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) | `volume` |
-| [`battery`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery` |
-| [`bodyMassIndexMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#bodyMassIndexMeasurement) | `bmiMeasurement` |
-| [`bodyWeightMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | `bodyWeightMeasurement` |
-| [`carbonDioxideMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | `carbonDioxide` |
-| [`carbonMonoxideDetector`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | `carbonMonoxide` |
-| [`carbonMonoxideMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | `carbonMonoxideLevel` |
-| [`dishwasherOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | `machineState`, `dishwasherJobState` and `completionTime` |
-| [`dryerMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | `dryerMode` |
-| [`dryerOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | `machineState`, `dryerJobState` and `completionTime` |
-| [`dustSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | `fineDustLevel` and `dustLevel` |
-| [`energyMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | `energy` |
-| [`equivalentCarbonDioxideMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | `equivalentCarbonDioxideMeasurement` |
-| [`formaldehydeMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | `formaldehydeLevel` |
-| [`gasMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | `gasMeter`, `meterCalorific`, `meterTime`, and `meterVolume` |
-| [`illuminanceMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | `illuminance` |
-| [`infraredLevel`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | `infraredLevel` |
-| [`lock`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) | `lock` |
-| [`mediaInputSource`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | `inputSource` |
-| [`mediaPlaybackRepeat`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | `playbackRepeatMode` |
-| [`mediaPlaybackShuffle`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | `playbackShuffle` |
-| [`mediaPlayback`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | `playbackStatus` |
-| [`odorSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | `odorLevel` |
-| [`ovenMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | `ovenMode` |
-| [`ovenOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | `machineState`, `ovenJobState` and `completionTime` |
-| [`ovenSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | `ovenSetpoint` |
-| [`powerConsumptionReport`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | `deltaEnergy`, `energy`, `energySaved`, `power`, `powerEnergy` |
-| [`powerMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | `power` |
-| [`powerSource`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | `powerSource` |
-| [`refrigerationSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | `refrigerationSetpoint` |
-| [`relativeHumidityMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` |
-| [`robotCleanerCleaningMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | `robotCleanerCleaningMode` |
-| [`robotCleanerMovement`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | `robotCleanerMovement` |
-| [`robotCleanerTurboMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | `robotCleanerTurboMode` |
-| [`signalStrength`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | `lqi` and `rssi` |
-| [`smokeDetector`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | `smoke` |
-| [`temperatureMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | `temperature` |
-| [`thermostatCoolingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | `coolingSetpoint` |
-| [`thermostatFanMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `thermostatFanMode` |
-| [`thermostatHeatingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | `heatingSetpoint` |
-| [`thermostatMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | `thermostatMode` |
-| [`thermostatOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `thermostatOperatingState` |
-| [`thermostatSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | `thermostatSetpoint` |
-| [`threeAxis`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | `threeAxis` (as discrete sensors `X`, `Y` and `Z`) |
-| [`tvChannel`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | `tvChannel` and `tvChannelName` |
-| [`tvocMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | `tvocLevel` |
-| [`ultravioletIndex`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | `ultravioletIndex` |
-| [`voltageMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | `voltage` |
-| [`washerMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#washerMode) | `washerMode` |
-| [`washerOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | `machineState`, `washerJobState` and `completionTime` |
+| Capability | Attributes |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
+| [`activityLightingMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | `lightingMode` |
+| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | `airConditionerMode` |
+| [`airQualitySensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | `airQuality` |
+| [`alarm`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#alarm) | `alarm` |
+| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) | `volume` |
+| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery` |
+| [`bodyMassIndexMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyMassIndexMeasurement) | `bmiMeasurement` |
+| [`bodyWeightMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | `bodyWeightMeasurement` |
+| [`carbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | `carbonDioxide` |
+| [`carbonMonoxideDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | `carbonMonoxide` |
+| [`carbonMonoxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | `carbonMonoxideLevel` |
+| [`dishwasherOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | `machineState`, `dishwasherJobState` and `completionTime` |
+| [`dryerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | `dryerMode` |
+| [`dryerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | `machineState`, `dryerJobState` and `completionTime` |
+| [`dustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | `fineDustLevel` and `dustLevel` |
+| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | `energy` |
+| [`equivalentCarbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | `equivalentCarbonDioxideMeasurement` |
+| [`formaldehydeMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | `formaldehydeLevel` |
+| [`gasMeter`](https://developer.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | `gasMeter`, `meterCalorific`, `meterTime`, and `meterVolume` |
+| [`illuminanceMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | `illuminance` |
+| [`infraredLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | `infraredLevel` |
+| [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) | `lock` |
+| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | `inputSource` |
+| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | `playbackRepeatMode` |
+| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | `playbackShuffle` |
+| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | `playbackStatus` |
+| [`odorSensor`](https://developer.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | `odorLevel` |
+| [`ovenMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | `ovenMode` |
+| [`ovenOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | `machineState`, `ovenJobState` and `completionTime` |
+| [`ovenSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | `ovenSetpoint` |
+| [`powerConsumptionReport`](https://developer.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | `deltaEnergy`, `energy`, `energySaved`, `power`, `powerEnergy` |
+| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | `power` |
+| [`powerSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | `powerSource` |
+| [`refrigerationSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | `refrigerationSetpoint` |
+| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` |
+| [`robotCleanerCleaningMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | `robotCleanerCleaningMode` |
+| [`robotCleanerMovement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | `robotCleanerMovement` |
+| [`robotCleanerTurboMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | `robotCleanerTurboMode` |
+| [`signalStrength`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | `lqi` and `rssi` |
+| [`smokeDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | `smoke` |
+| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | `temperature` |
+| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | `coolingSetpoint` |
+| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `thermostatFanMode` |
+| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | `heatingSetpoint` |
+| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | `thermostatMode` |
+| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `thermostatOperatingState` |
+| [`thermostatSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | `thermostatSetpoint` |
+| [`threeAxis`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | `threeAxis` (as discrete sensors `X`, `Y` and `Z`) |
+| [`tvChannel`](https://developer.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | `tvChannel` and `tvChannelName` |
+| [`tvocMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | `tvocLevel` |
+| [`ultravioletIndex`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | `ultravioletIndex` |
+| [`voltageMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | `voltage` |
+| [`washerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerMode) | `washerMode` |
+| [`washerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | `machineState`, `washerJobState` and `completionTime` |
### Scene
@@ -284,12 +284,12 @@ The SmartThings Scene platform lets you activate scenes defined in SmartThings w
### Switch
-The SmartThings Switch platform lets you control devices that have the [`switch`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. The following optional capabilities will provide energy and power utilization information:
+The SmartThings Switch platform lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. The following optional capabilities will provide energy and power utilization information:
-| Capability | Switch Features |
-| ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
-| [`energyMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | energy consumption (`today_energy_kwh` state attribute) |
-| [`powerMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | power consumption (`current_power_w` state attribute) |
+| Capability | Switch Features |
+| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
+| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | energy consumption (`today_energy_kwh` state attribute) |
+| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | power consumption (`current_power_w` state attribute) |
## Troubleshooting
diff --git a/source/_integrations/sms.markdown b/source/_integrations/sms.markdown
index cb88a588fe74..ea1020b81078 100644
--- a/source/_integrations/sms.markdown
+++ b/source/_integrations/sms.markdown
@@ -185,6 +185,8 @@ Re-plug the USB stick, reboot the device, run `lsusb` again.
The resulting product id now should be different and the brand id should be the same.
And `ls -l /dev/*USB*` should now report your device.
+Note: if you have multiple USB devices, USB number order can change on boot. For this reason, it's preferable to use your device ID and look in `/dev/serial/by-id/*`. For example, `/dev/serial/by-id/usb-HUAWEI_MOBILE_HUAWEI_MOBILE-if00-port0`.
+
If the device is still not recognized, remove the parameter -X from the usb_modeswitch command and reboot again.
## More details:
diff --git a/source/_integrations/smtp.markdown b/source/_integrations/smtp.markdown
index f4256e6e7f15..a6eec4e2f51b 100644
--- a/source/_integrations/smtp.markdown
+++ b/source/_integrations/smtp.markdown
@@ -1,6 +1,6 @@
---
title: SMTP
-description: Instructions on how to add e-mail notifications to Home Assistant.
+description: Instructions on how to add email notifications to Home Assistant.
ha_category:
- Notifications
ha_iot_class: Cloud Push
@@ -11,9 +11,9 @@ ha_platforms:
ha_integration_type: integration
---
-The SMTP platform allows you to deliver notifications from Home Assistant to an e-mail recipient.
+The SMTP platform allows you to deliver notifications from Home Assistant to an email recipient.
-To enable notification by e-mail in your installation, add the following to your `configuration.yaml` file:
+To enable notification by email in your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
@@ -24,7 +24,7 @@ notify:
recipient: "YOUR_RECIPIENT"
```
-Check your e-mail provider configuration or help pages to get the correct SMTP settings.
+Check your email provider configuration or help pages to get the correct SMTP settings. A restart of Home Assistant is required to pick up the configuration changes.
{% configuration %}
name:
@@ -33,11 +33,11 @@ name:
type: string
default: notify
sender:
- description: E-mail address of the sender.
+ description: email address of the sender.
required: true
type: string
recipient:
- description: Default E-mail address of the recipient of the notification. This can be a recipient address or a list of addresses for multiple recipients. This is where you want to send your E-mail notifications by default (when not specifying `target` in the service call). Any E-mail address(es) specified in the service call's `target` field will override this recipient content.
+ description: Default email address of the recipient of the notification. This can be a recipient address or a list of addresses for multiple recipients. This is where you want to send your email notifications by default (when not specifying `target` in the service call). Any email address(es) specified in the service call's `target` field will override this recipient content.
required: true
type: [list, string]
server:
@@ -86,7 +86,28 @@ verify_ssl:
### Usage
-To use the SMTP notification, refer to it in an automation or script like in this example:
+A notify integration will be created using the name without spaces. In the above example, it will be called `notify.NOTIFIER_NAME`. To use the SMTP notification, refer to it in an automation or script like in this example:
+
+```yaml
+- alias: "Send E-Mail Every Morning"
+ description: ""
+ trigger:
+ - platform: time
+ at: "08:00:00"
+ condition: []
+ action:
+ - service: notify.NOTIFIER_NAME
+ data:
+ title: "Good Morning"
+ message: "Rise and shine"
+ target:
+ - "morning@example.com"
+ mode: single
+```
+
+The optional `target` field is used to specify recipient(s) for this specific service call. When `target` field is not used, this message will be sent to default recipient(s), in this example, morning@example.com.
+
+Another example attaching images stored locally in a script:
```yaml
burglar:
@@ -107,15 +128,13 @@ burglar:
- /home/pi/snapshot2.jpg
```
-The optional `target` field is used to specify recipient(s) for this specific service call. When `target` field is not used, this message will be sent to default recipient(s), in this example, my_intruder_alert@example.com.
-
The optional `html` field makes a custom text/HTML multi-part message, allowing total freedom for sending rich HTML emails by defining the HTML content. In them, if you need to include images, you can pass both arguments (`html` and `images`). The images will be attached with the basename of the images, so they can be included in the html page with `src="cid:image_name.ext"`.
The optional `images` field adds image attachments to the email. If `html` is defined, the images need to be added to the message in-line as described above (and as shown in the example below). If `html` is not defined, images will be added as separate attachments.
-When adding images, make sure the folders containing the attachments are added to `allowlist_external_dirs`. See: [Setup basic documentation](/docs/configuration/basic/)
+When adding images, make sure the folders containing the attachments are added to `allowlist_external_dirs`. See: [Setup basic documentation](/integrations/homeassistant/#allowlist_external_dirs)
@@ -184,10 +203,10 @@ burglar:
To learn more about how to use notifications in your automations, please see the [getting started with automation page](/getting-started/automation/).
-## Specific E-Mail Provider Configuration
+## Specific email provider configuration
-Check below some configurations examples for specific e-mail providers.
-If you are in doubt about the SMTP settings required, check your e-mail provider configuration or help pages for more information about its specific SMTP configuration.
+Check below some configurations examples for specific email providers.
+If you are in doubt about the SMTP settings required, check your email provider configuration or help pages for more information about its specific SMTP configuration.
### Google Mail
diff --git a/source/_integrations/smud.markdown b/source/_integrations/smud.markdown
new file mode 100644
index 000000000000..a321ea4cb827
--- /dev/null
+++ b/source/_integrations/smud.markdown
@@ -0,0 +1,20 @@
+---
+title: Sacramento Municipal Utility District (SMUD)
+description: Get energy usage from Sacramento Municipal Utility District (SMUD) using the Opower integration
+ha_category:
+ - Energy
+ - Sensor
+ha_release: 2023.8
+ha_domain: smud
+ha_integration_type: virtual
+ha_supporting_domain: opower
+ha_supporting_integration: Opower
+ha_codeowners:
+ - '@tronikos'
+ha_config_flow: true
+ha_platforms:
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/snmp.markdown b/source/_integrations/snmp.markdown
index 530e1eed838a..b447e6ea7b41 100644
--- a/source/_integrations/snmp.markdown
+++ b/source/_integrations/snmp.markdown
@@ -14,6 +14,8 @@ ha_platforms:
- sensor
- switch
ha_integration_type: integration
+ha_codeowners:
+ - '@nmaggioni'
---
A lot of Wi-Fi access points and Wi-Fi routers support the Simple Network Management Protocol (SNMP). This is a standardized method for monitoring/managing network connected devices. SNMP uses a tree-like hierarchy where each node is an object. Many of these objects contain (live) lists of instances and metrics, like network interfaces, disks and Wi-Fi registrations.
diff --git a/source/_integrations/solaredge.markdown b/source/_integrations/solaredge.markdown
index 84c7d9791d0c..cbd2359d7775 100644
--- a/source/_integrations/solaredge.markdown
+++ b/source/_integrations/solaredge.markdown
@@ -13,6 +13,7 @@ ha_platforms:
- sensor
ha_codeowners:
- '@frenck'
+ - '@bdraco'
ha_integration_type: device
---
diff --git a/source/_integrations/solax.markdown b/source/_integrations/solax.markdown
index a0ef45d337d9..c148a7d2a2dc 100644
--- a/source/_integrations/solax.markdown
+++ b/source/_integrations/solax.markdown
@@ -39,6 +39,14 @@ template:
{% endraw %}
+### Configuring the Energy Dashboard
+
+There are generally at least 3 sensors from your inverter that you need to configure in the energy dashboard:
+
+- The consumption sensor (in kWh) for the **Grid Consumption**.
+- The feed-in sensor (in kWh) for the **Return to grid**, for example, the solar panel energy you do not consume and return to the grid instead.
+- The on-grid yield sensor (in kWh) for the **Solar production**.
+
### Note
Inverter models with newer firmware (and also those using devices like PocketWifi) no longer expose an API when connected to your wireless network, they do however continue to expose it on their own broadcasted SSID. To use this sensor in this case it is necessary to set up a reverse proxy with something like NGINX and use a Raspberry Pi (or similar) with two network connections (one being Wi-Fi that connects to the inverters SSID).
diff --git a/source/_integrations/somfy.markdown b/source/_integrations/somfy.markdown
index d9242f74588a..f76a5fa17a2d 100644
--- a/source/_integrations/somfy.markdown
+++ b/source/_integrations/somfy.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/sonos.markdown b/source/_integrations/sonos.markdown
index 414f99841057..20fb050e83a2 100644
--- a/source/_integrations/sonos.markdown
+++ b/source/_integrations/sonos.markdown
@@ -11,6 +11,7 @@ ha_config_flow: true
ha_domain: sonos
ha_codeowners:
- '@jjlawren'
+ - '@peterager'
ha_ssdp: true
ha_platforms:
- binary_sensor
diff --git a/source/_integrations/sony_projector.markdown b/source/_integrations/sony_projector.markdown
index 27b147a92867..4f1b276a8a7b 100644
--- a/source/_integrations/sony_projector.markdown
+++ b/source/_integrations/sony_projector.markdown
@@ -36,4 +36,6 @@ name:
type: string
{% endconfiguration %}
-You may need to enable/start the PJ Talk service under your projector's web interface Advanced Settings.
+Under your projector's web interface **Advanced Menu**, you may need to:
+- Enable/start the **PJ Talk** service.
+- Add the IP of your Home Assistant server to the **Host Address** field.
diff --git a/source/_integrations/spotify.markdown b/source/_integrations/spotify.markdown
index a86c1b6ef126..71f561e9c998 100644
--- a/source/_integrations/spotify.markdown
+++ b/source/_integrations/spotify.markdown
@@ -43,7 +43,7 @@ to allow you to log in with your Spotify account.
2. Log in to the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard).
-3. Click the [**Create app**](https://developer.spotify.com/dashboard/create) button in the top right.
+3. Select the [**Create app**](https://developer.spotify.com/dashboard/create) button in the top right.
![Spotify Developer Dashboard](/images/integrations/spotify/create-spotify-application.png)
@@ -57,22 +57,24 @@ to allow you to log in with your Spotify account.
![Creating a Spotify Application](/images/integrations/spotify/create-spotify-application.png)
-5. Check the box to agree with the requirements and click the **Save** button
+5. Select Web API.
+
+6. Check the box to agree with the requirements and click the **Save** button
to confirm the application creation.
-6. Spotify will now show the new application you have just created. Click on
+7. Spotify will now show the new application you have just created. Select
the **Settings** button in the top right to configure it.
![Edit the Spotify Application settings](/images/integrations/spotify/edit-settings.png)
-7. Before we can start configuring Home Assistant, we need to grab the application
+8. Before we can start configuring Home Assistant, we need to grab the application
credentials Home Assistant needs.
- Click on the **View client secret** button to reveal the client secret.
+ Select on the **View client secret** button to reveal the client secret.
![Show the client secret of the Spotify Application](/images/integrations/spotify/show-client-secret.png)
-8. The _"Client ID"_ and _"Client secret"_ are the two pieces of information
+9. The _"Client ID"_ and _"Client secret"_ are the two pieces of information
that Home Assistant needs to communicate with Spotify and is what we
call: Application credentials.
@@ -105,7 +107,7 @@ This integration supports multiple Spotify accounts at once. You don't need to
create another Spotify application in the Spotify Developer Portal.
Multiple Spotify accounts can be linked to a _single_ Spotify application.
-You will have to add those accounts into the **Users and Access** section of
+You will have to add those accounts into the **User Management** section of
your application in the Spotify Developer Portal.
To add an additional Spotify account to Home Assistant, go to the Spotify
@@ -119,7 +121,8 @@ To play media Spotify first needs a device selected for audio output known as th
```yaml
# Example code to select an AV receiver as the output device
service: media_player.select_source
-entity_id: media_player.spotify
+target:
+ entity_id: media_player.spotify
data:
source: "Denon AVR-X2000"
```
diff --git a/source/_integrations/sql.markdown b/source/_integrations/sql.markdown
index 831a9f265c23..48f001e33e39 100644
--- a/source/_integrations/sql.markdown
+++ b/source/_integrations/sql.markdown
@@ -122,7 +122,7 @@ See [supported engines](/integrations/recorder/#custom-database-engines) for whi
The SQL integration will connect to the Home Assistant Recorder database if "Database URL" has not been specified.
-There is no explicit configuration required for attributes. The integration will set all additional columns returned by the query as attributes.
+There is no explicit configuration required for attributes. The integration will set all columns returned by the query as attributes.
Note that in all cases only the first row returned will be used.
@@ -222,6 +222,18 @@ Use `state` as column for value.
Keep in mind that, depending on the update frequency of your sensor and other factors, this may not be a 100% accurate reflection of the actual situation you are measuring. Since your database won’t necessarily have a value saved exactly 24 hours ago, use “>=” or “<=” to get one of the closest values.
+#### MariaDB
+
+On MariaDB the following where clause can be used to compare the timestamp:
+
+```sql
+...
+ AND last_updated_ts <= UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY)
+...
+```
+
+Replace `- INTERVAL 1 DAY` with the target offset, for example, `- INTERVAL 1 HOUR`.
+
### Database size
#### Postgres
diff --git a/source/_integrations/ssdp.markdown b/source/_integrations/ssdp.markdown
index d1a2b498c51b..1384463fb9f7 100644
--- a/source/_integrations/ssdp.markdown
+++ b/source/_integrations/ssdp.markdown
@@ -33,6 +33,7 @@ The following integrations are automatically discovered by the SSDP integration:
- [Denon AVR](/integrations/denonavr/)
- [Denon HEOS](/integrations/heos/)
- [DirecTV](/integrations/directv/)
+ - [Frontier Silicon](/integrations/frontier_silicon/)
- [Huawei LTE](/integrations/huawei_lte/)
- [Hyperion](/integrations/hyperion/)
- [Keenetic NDMS2 Router](/integrations/keenetic_ndms2/)
diff --git a/source/_integrations/starline.markdown b/source/_integrations/starline.markdown
index 0976d6acca26..f8be1291e3ce 100644
--- a/source/_integrations/starline.markdown
+++ b/source/_integrations/starline.markdown
@@ -3,12 +3,12 @@ title: StarLine
description: Instructions on how to setup your StarLine account with Home Assistant.
ha_category:
- Binary sensor
+ - Button
- Car
- Lock
- Presence detection
- Sensor
- Switch
- - Button
ha_release: 0.103
ha_iot_class: Cloud Polling
ha_config_flow: true
@@ -17,11 +17,11 @@ ha_codeowners:
ha_domain: starline
ha_platforms:
- binary_sensor
+ - button
- device_tracker
- lock
- sensor
- switch
- - button
ha_integration_type: integration
---
@@ -32,8 +32,8 @@ This integration provides the following platforms:
- Binary sensors: Hand brake, hood, trunk, alarm status, doors lock state, handsfree, neutral and moving ban status.
- Device tracker: The location of your car.
- Lock: Control the lock of your car.
-- Sensors: Battery level, SIM card balance, GSM signal level, fuel volume, mileage, OBD errors, interior temperature and engine temperature.
-- Switches: Start/stop engine, heater (webasto), and additional channel.
+- Sensors: Battery level, SIM card balance, GSM signal level, GPS satellites count, fuel volume, mileage, OBD errors, interior temperature and engine temperature.
+- Switches: Start/stop engine, heater (webasto), additional channel, and service mode.
- Buttons: Sound the horn.
- Services: Update the state, set update frequency. More details can be found [here](#services).
@@ -43,6 +43,7 @@ Create a new application in the [StarLine developer profile](https://my.starline
+The integration makes API calls to StarLine servers to retrieve data. It gets only the latest set of values that are valid for the moment of the API call. This means that the integration does not retrieve or store values, StarLine events, or parameters between the API calls.
You can make up to 1000 API calls per day, which means you could make one approximately every 86 seconds.
By default, the state of integration will be updated every 3 minutes and OBD information will be updated every 3 hours, making 488 calls per day.
It is not recommended to set an update interval of less than 90 seconds.
diff --git a/source/_integrations/starlink.markdown b/source/_integrations/starlink.markdown
index b3f71ab60261..b2f3a251ac2f 100644
--- a/source/_integrations/starlink.markdown
+++ b/source/_integrations/starlink.markdown
@@ -8,6 +8,7 @@ ha_category:
- Network
- Sensor
- Switch
+ - Time
ha_release: 2023.2
ha_iot_class: Local Polling
ha_config_flow: true
@@ -21,6 +22,7 @@ ha_platforms:
- diagnostics
- sensor
- switch
+ - time
ha_integration_type: integration
ha_quality_scale: silver
---
@@ -61,7 +63,13 @@ The Starlink integration allows you to integrate your [Starlink](https://www.sta
### Switch
- Stowed - Controls whether Dishy is stowed
+- Sleep schedule - Controls whether Starlink will enter a power-saving sleep mode at a predefined schedule
### Device tracker
- Device location - Tracks the location of Dishy. Note you need to allow location access on the local network via the Starlink app for this to work. This is disabled by default in the Starlink app and is thus disabled by default in Home Assistant.
+
+### Time
+
+- Sleep start - The time at which Starlink will enter sleep mode, if "Sleep Schedule" is enabled
+- Sleep end - The time at which Starlink will exit sleep mode, if "Sleep Schedule" is enabled
diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown
index b1de8075ae03..1de46f9a0419 100644
--- a/source/_integrations/statistics.markdown
+++ b/source/_integrations/statistics.markdown
@@ -140,6 +140,11 @@ max_age:
description: Maximum age of source sensor measurements stored. Setting this to a time period will cause older values to be discarded. If omitted, the number of considered source sensor measurements is limited by `sampling_size` only. Set both parameters appropriately to create suited limits for your use case. The sensor value will become `unknown` if the source sensor is not updated within the time period. A statistics sensor requires `sampling_size`, `max_age`, or both to be defined.
required: false
type: time
+keep_last_sample:
+ description: Defines whether the most recent sampled value should be preserved regardless of the `max_age` setting.
+ required: false
+ default: false
+ type: boolean
percentile:
description: Only relevant in combination with the `percentile` characteristic. Must be a value between 1 and 99. The value defines the percentile value to consider. The 25th percentile is also known as the first quartile, the 50th percentile as the median.
required: false
diff --git a/source/_integrations/streamlabswater.markdown b/source/_integrations/streamlabswater.markdown
index 54261c6b35d5..a5bc1e8de08a 100644
--- a/source/_integrations/streamlabswater.markdown
+++ b/source/_integrations/streamlabswater.markdown
@@ -7,13 +7,14 @@ ha_category:
ha_release: '0.95'
ha_iot_class: Cloud Polling
ha_domain: streamlabswater
+ha_config_flow: true
ha_platforms:
- binary_sensor
- sensor
ha_integration_type: integration
---
-The `Streamlabs Water` integration platform is used to interact with [StreamLabs water monitoring devices](https://www.streamlabswater.com/) in order to retrieve usage information and manage the away mode of the device. The [StreamLabs Water API](https://developer.streamlabswater.com) is used to retrieve daily, monthly, and yearly water usage along with the current away mode.
+The StreamLabs Water integration is used to interact with [StreamLabs water monitoring devices](https://www.streamlabswater.com/) in order to retrieve usage information and manage the away mode of the device. The [StreamLabs Water API](https://developer.streamlabswater.com) is used to retrieve daily, monthly, and yearly water usage along with the current away mode.
@@ -28,31 +29,13 @@ There is currently support for the following device types within Home Assistant:
In preparation for using this integration you will need to request an API key following the instructions in the [StreamLabs API Getting Started Section](https://developer.streamlabswater.com/docs/getting-started.html). Be sure to request an API key and not an OAuth token.
-## Configuration
-
-Add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-streamlabswater:
- api_key: YOUR_API_KEY
-```
-
-{% configuration %}
-api_key:
- description: Your api_key for the StreamLabs API.
- required: true
- type: string
-location_id:
- description: A specific monitor to use if you have multiple. By default the first found will be used.
- required: false
- type: string
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
## Service `set_away_mode`
You can use the service `streamlabswater.set_away_mode` to set the mode to `home` or `away`. The away mode will only be changed for the configured location.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `away_mode` | no | String, must be `away` or `home`.
+| Service data attribute | Optional | Description |
+|------------------------|----------|------------------------------------------------------------------------------------|
+| `away_mode` | no | String, must be `away` or `home`. |
+| `location_id` | yes | String, location id to change away mode for. Defaults to first available location. |
diff --git a/source/_integrations/supervisord.markdown b/source/_integrations/supervisord.markdown
index 1270b34152d9..838eda1ad433 100644
--- a/source/_integrations/supervisord.markdown
+++ b/source/_integrations/supervisord.markdown
@@ -20,7 +20,7 @@ It required that you enable the HTTP feature in the `/etc/supervisord.conf` conf
port=127.0.0.1:9001
```
-After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as an [iFrame panel](/integrations/panel_iframe/).
+After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as an [webpage dashboard](/dashboards/dashboards/#webpage-dashboard).
diff --git a/source/_integrations/supla.markdown b/source/_integrations/supla.markdown
index 2e5fd22416be..ae0d209bcf6a 100644
--- a/source/_integrations/supla.markdown
+++ b/source/_integrations/supla.markdown
@@ -23,7 +23,7 @@ Currently, only covers (shutters in SUPLA's terminology), gates, garage doors, a
Right now, it's impossible to add a device -- all of them are discovered from SUPLA-CLOUD's servers or yours.
-Devices disabled on SUPLA-CLOUD will not be loaded into Home Assistant.
+For more complete Home Assistant support based on MQTT autodiscovery, consider switching your Supla devices to MQTT (through the setup interface). Or use the MQTT broker provided by [Supla Cloud](https://cloud.supla.org/integrations/mqtt-broker).
## Configuration
@@ -43,7 +43,7 @@ servers:
type: list
keys:
server:
- description: Address of the SUPLA-CLOUD server (either IP address or DNS name); can either be the (cloud hosted)[https://cloud.supla.org] instance, or a (self hosted)[https://github.com/SUPLA/supla-cloud] instance.
+ description: Address of the SUPLA-CLOUD server (either IP address or DNS name); can either be the [cloud hosted](https://cloud.supla.org) instance, or a [self hosted](https://github.com/SUPLA/supla-cloud) instance.
required: true
type: string
access_token:
diff --git a/source/_integrations/swepco.markdown b/source/_integrations/swepco.markdown
index 28a16270c658..521d6c8019c3 100644
--- a/source/_integrations/swepco.markdown
+++ b/source/_integrations/swepco.markdown
@@ -4,7 +4,7 @@ description: Get energy usage from Southwestern Electric Power Company (SWEPCO)
ha_category:
- Energy
- Sensor
-ha_release: 2024.1
+ha_release: 2023.8
ha_domain: swepco
ha_integration_type: virtual
ha_supporting_domain: opower
diff --git a/source/_integrations/swiss_public_transport.markdown b/source/_integrations/swiss_public_transport.markdown
index e336347dad17..34e519329110 100644
--- a/source/_integrations/swiss_public_transport.markdown
+++ b/source/_integrations/swiss_public_transport.markdown
@@ -15,9 +15,9 @@ ha_platforms:
ha_integration_type: integration
---
-The `swiss_public_transport` sensor will give you the next three departure times from a given location to another one in Switzerland.
+The Swiss public transport integration will give you the next three departure times from a given location to another one in Switzerland.
-The [Swiss public transport API](https://transport.opendata.ch/) only allows 1000 requests per 24 hours.
+The [Swiss public transport API](https://transport.opendata.ch/) only allows 1000 requests per 24 hours. The default polling rate is set to `90s`, which is just enough for one connection polling continuously. If more entries are needed, consider [defining a custom polling interval](#defining-a-custom-polling-interval) to reduce the amount of requests.
The [Stationboard](https://transport.opendata.ch/examples/stationboard.html) website can help to determine the exact name of the start and the end station.
@@ -40,3 +40,7 @@ name:
{% endconfiguration %}
The public timetables are coming from [Swiss public transport](https://transport.opendata.ch/).
+
+### Defining a custom polling interval
+
+{% include common-tasks/define_custom_polling.md %}
diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown
index 77b7c13d181d..09f382a74263 100644
--- a/source/_integrations/switch.mqtt.markdown
+++ b/source/_integrations/switch.mqtt.markdown
@@ -18,8 +18,6 @@ When a `state_topic` is not available, the switch will work in optimistic mode.
Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect switch operation.
-
-
To enable this switch in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -103,6 +101,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -119,7 +121,6 @@ device_class:
description: The [type/class](/integrations/switch/#device-class) of the switch to set the icon in the frontend. The `device_class` can be `null`.
required: false
type: device_class
- default: None
enabled_by_default:
description: Flag which defines if the entity should be enabled when first added.
required: false
@@ -134,7 +135,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
diff --git a/source/_integrations/switch.template.markdown b/source/_integrations/switch.template.markdown
index f372081c1769..ce922110ae07 100644
--- a/source/_integrations/switch.template.markdown
+++ b/source/_integrations/switch.template.markdown
@@ -203,7 +203,7 @@ switch:
### Change The Icon
-This example shows how to change the icon based on the day/night cycle.
+This example shows how to change the icon based on the state of the garage door.
{% raw %}
diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown
index 9176f454e187..4308417ac8bb 100644
--- a/source/_integrations/switchbot.markdown
+++ b/source/_integrations/switchbot.markdown
@@ -45,6 +45,8 @@ If you have multiple devices of the same type, you need to get the BTLE MAC addr
Please note, device names configured in the SwitchBot app are not transferred into Home Assistant.
+Some SwitchBot devices need to be configured within the app before being controlled by Home Assistant, such as calibrating the cover open/close limits or pairing two covers to move together.
+
{% include integrations/config_flow.md %}
## Supported devices
@@ -60,7 +62,7 @@ Please note, device names configured in the SwitchBot app are not transferred in
- [Indoor/Outdoor Meter](https://switch-bot.com/pages/switchbot-indoor-outdoor-thermo-hygrometer) (WoIOSensorTH)
- [Motion Sensor (WoPresence)](https://switch-bot.com/pages/switchbot-motion-sensor)
- Plug Mini (WoPlug), both the original (model W1901400) and HomeKit-enabled (model W1901401)
-- [Lock (WoLock)](https://switch-bot.com/pages/switchbot-lock)
+- [Lock (WoLock)](https://switch-bot.com/pages/switchbot-lock) (currently the Pro model is not supported)
- [Blind Tilt (WoBlindTilt)](https://switch-bot.com/pages/switchbot-blind-tilt)
## SwitchBot Entity
diff --git a/source/_integrations/symfonisk.markdown b/source/_integrations/symfonisk.markdown
index 8599c3e9b8aa..69ff1b59b946 100644
--- a/source/_integrations/symfonisk.markdown
+++ b/source/_integrations/symfonisk.markdown
@@ -11,6 +11,7 @@ ha_supporting_domain: sonos
ha_supporting_integration: Sonos
ha_codeowners:
- '@jjlawren'
+ - '@peterager'
ha_config_flow: true
ha_platforms:
- binary_sensor
diff --git a/source/_integrations/synology_srm.markdown b/source/_integrations/synology_srm.markdown
index 801023e4fd8b..9d7456d2f26a 100644
--- a/source/_integrations/synology_srm.markdown
+++ b/source/_integrations/synology_srm.markdown
@@ -58,7 +58,7 @@ verify_ssl:
type: boolean
{% endconfiguration %}
-It's not possible to create another account in SRM with admin permissions. You'll need to use your admin account (or the one you renamed at creation) for this connection.
+For instructions on creating multiple administrators on SRM, please refer to the [Synology Knowledge Center](https://kb.synology.com/en-id/SRM/tutorial/Create_multiple_administrator_accounts_on_Synology_Router).
List of models known to be supported:
diff --git a/source/_integrations/system_bridge.markdown b/source/_integrations/system_bridge.markdown
index e8bf158277d2..3a5ada8f4dbf 100644
--- a/source/_integrations/system_bridge.markdown
+++ b/source/_integrations/system_bridge.markdown
@@ -23,18 +23,30 @@ ha_integration_type: device
---
[System Bridge](https://system-bridge.timmo.dev) is an application that runs on your local machine to share system information via its API/WebSocket. You can also send commands to the device such as opening a URL or sending keyboard keypresses.
+
## Prerequisites
+
### Version
-This integration requires System Bridge 3.1.1 and above. Any older version will not work.
-### API key
-You will need your API key. This can be found following the documentation [here](https://system-bridge.timmo.dev/docs/running).
+
+This integration requires System Bridge 4.0.2 and above. Any older version will not work.
+
+### Token
+
+You will need your token. For instructions on finding your token, follow the steps in the [System Bridge documentation](https://system-bridge.timmo.dev/docs/running).
+
{% include integrations/config_flow.md %}
+
## Binary sensors
+
This integration provides the following binary sensors:
-| Name | Description |
-| --------------------- | ---------------------------------- |
-| Battery Is Charging | Whether the battery is charging |
-| New Version Available | Whether a new version is available |
+
+| Name | Description |
+| --------------------- | ----------------------------------- |
+| Battery Is Charging | Whether the battery is charging |
+| Camera In Use | Whether the camera/webcam is in use |
+| Pending Reboot | Whether a reboot is pending |
+| New Version Available | Whether a new version is available |
+
## Sensors
This integration provides the following sensors:
@@ -151,37 +163,137 @@ Here is an example action that will open a URL in the device's browser:
This is an object containing the `source` and `volume` (0-100). The source must be a URL to a playable audio file (an MP3 for example).
+### Service `system_bridge.get_process_by_id`
+
+Returns a process by its pid.
+
+{% my developer_call_service service="system_bridge.get_process_by_id" title="Show service in your Home Assistant instance." %}
+
+```yaml
+service: system_bridge.get_process_by_id
+data:
+ bridge: "deviceid"
+ id: 17752
+```
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: 17752
+name: steam.exe
+cpu_usage: 0.9
+created: 1698951361.6117153
+memory_usage: 0.23782578821487121
+path: C:\Program Files (x86)\Steam\steam.exe
+status: running
+username: hostname\user
+working_directory: null
+```
+
+### Service `system_bridge.get_processes_by_name`
+
+Returns a count and a list of processes matching the name provided.
+
+{% my developer_call_service service="system_bridge.get_processes_by_name" title="Show service in your Home Assistant instance." %}
+
+```yaml
+service: system_bridge.get_processes_by_name
+data:
+ bridge: "deviceid"
+ name: discord
+```
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+count: 1
+processes:
+ - id: 11196
+ name: Discord.exe
+ cpu_usage: 0.3
+ created: 1698951365.770648
+ memory_usage: 0.07285296297215042
+ path: C:\Users\user\AppData\Local\Discord\app\Discord.exe
+ status: running
+ username: hostname\user
+ working_directory: null
+```
+
### Service `system_bridge.open_path`
Open a URL or file on the server using the default application.
+
{% my developer_call_service service="system_bridge.open_path" title="Show service in your Home Assistant instance." %}
+
```yaml
service: system_bridge.open_path
data:
bridge: "deviceid"
path: "C:\\image.jpg"
```
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: abc123
+type: OPENED
+data:
+ path: C:\image.jpg
+message: Path opened
+```
+
### Service `system_bridge.open_url`
+
Open a URL or file on the server using the default application.
+
{% my developer_call_service service="system_bridge.open_url" title="Show service in your Home Assistant instance." %}
+
```yaml
service: system_bridge.open_url
data:
bridge: "deviceid"
url: "https://home-assistant.io"
```
-### Service `system_bridge.send_keypress`
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: abc123
+type: OPENED
+data:
+ url: https://home-assistant.io
+message: URL opened
+```
+
+### Service`system_bridge.send_keypress`
+
Send a keypress to the server.
+
{% my developer_call_service service="system_bridge.send_keypress" title="Show service in your Home Assistant instance." %}
+
```yaml
service: system_bridge.send_keypress
data:
bridge: "deviceid"
key: "a"
```
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: abc123
+type: KEYBOARD_KEY_PRESSED
+data:
+ key: a
+message: Key pressed
+```
+
### Service `system_bridge.send_text`
+
Sends text for the server to type.
+
{% my developer_call_service service="system_bridge.send_text" title="Show service in your Home Assistant instance." %}
+
```yaml
service: system_bridge.send_text
data:
@@ -189,12 +301,30 @@ data:
text: "Hello"
```
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: abc123
+type: KEYBOARD_TEXT_SENT
+data:
+ text: Hello
+message: Text entered
+```
+
### Service `system_bridge.power_command`
Sends power command to the system.
-{% my developer_call_service service="system_bridge.power_command" title="Show service in your Home Assistant instance." %}
+Supported commands are:
+- `hibernate`
+- `lock`
+- `logout`
+- `restart`
+- `shutdown`
+- `sleep`
+
+{% my developer_call_service service="system_bridge.power_command" title="Show service in your Home Assistant instance." %}
```yaml
service: system_bridge.power_command
@@ -203,11 +333,11 @@ data:
command: "sleep"
```
-Supported commands are:
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
-- `hibernate`
-- `lock`
-- `logout`
-- `restart`
-- `shutdown`
-- `sleep`
+```yaml
+id: abc123
+type: POWER_SLEEPING
+data: {}
+message: Sleeping
+```
diff --git a/source/_integrations/systemmonitor.markdown b/source/_integrations/systemmonitor.markdown
index e0b12b7c057d..9f0a633c0eb8 100644
--- a/source/_integrations/systemmonitor.markdown
+++ b/source/_integrations/systemmonitor.markdown
@@ -6,77 +6,62 @@ ha_category:
ha_release: pre 0.7
ha_iot_class: Local Push
ha_domain: systemmonitor
+ha_config_flow: true
ha_platforms:
+ - binary_sensor
+ - diagnostics
- sensor
ha_integration_type: integration
+ha_codeowners:
+ - '@gjohansson-ST'
---
-The `systemmonitor` sensor platform allows you to monitor disk usage,
+The System monitor integration allows you to monitor disk usage,
memory usage, CPU usage, and running processes.
-To add this platform to your installation,
-add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: systemmonitor
- resources:
- - type: disk_use_percent
- arg: /config
- - type: memory_free
-```
+{% include integrations/config_flow.md %}
-{% configuration %}
-resources:
- description: Contains all entries to display.
- required: true
- type: list
- keys:
- type:
- description: The type of the information to display, please check the table below for details.
- required: true
- arg:
- description: Argument to use, please check the table below for details.
- required: false
-{% endconfiguration %}
-
-After restarting Home Assistant, these sensors will show up and update their
-information every 15 seconds.
-
-The table contains types and their argument to use in your `configuration.yaml`
-file.
-
-| Type (`type:`) | Argument (`arg:`) | Argument mandatory |
-| :--------------------- |:--------------------------|:--------------------------|
-| disk_use_percent | Path, e.g., `/` | no |
-| disk_use | Path, e.g., `/` | no |
-| disk_free | Path, e.g., `/` | no |
-| memory_use_percent | | |
-| memory_use | | |
-| memory_free | | |
-| swap_use_percent | | |
-| swap_use | | |
-| swap_free | | |
-| load_1m | | |
-| load_5m | | |
-| load_15m | | |
-| network_in | Interface, e.g., `eth0` | yes |
-| network_out | Interface, e.g., `eth0` | yes |
-| throughput_network_in | Interface, e.g., `eth0` | yes |
-| throughput_network_out | Interface, e.g., `eth0` | yes |
-| packets_in | Interface, e.g., `eth0` | yes |
-| packets_out | Interface, e.g., `eth0` | yes |
-| ipv4_address | Interface, e.g., `eth0` | yes |
-| ipv6_address | Interface, e.g., `eth0` | yes |
-| processor_use | | |
-| processor_temperature | | |
-| process | Binary, e.g., `octave-cli` | yes |
-| last_boot | | |
+## Sensors
-## Disk usage
+**All entities are disabled by default, you need to enable the entities that you wish to use.**
+
+### Disks
+
+- Disk free - (One per disk/mount point)
+- Disk use - (One per disk/mount point)
+- Disk usage (percent) - (One per disk/mount point)
+
+### Network
+
+- IPv4 address - (One per network interface)
+- IPv6 address - (One per network interface)
+- Network in - (One per network interface)
+- Network out - (One per network interface)
+- Packets in - (One per network interface)
+- Packets out - (One per network interface)
+- Network throughput in - (One per network interface)
+- Network throughput out - (One per network interface)
+
+### Other
+
+- Last boot
+- Load (15m)
+- Load (5m)
+- Load (1m)
+- Memory free
+- Memory use
+- Memory usage (percent)
+- Processor use
+- Processor temperature
+- Swap free
+- Swap use
+- Swap usage (percent)
-If no path is provided via the optional argument, the integration defaults to '/' (root).
+## Add `process` binary sensor
+
+The `process` binary sensor needs to be configured by the config entry options. Go to **{% my integrations title="Settings > Devices & Services" %}**, select the **System Monitor** integration and click **Configure** to select which `process` binary sensors should be created.
+
+## Disk usage
**Note:** The disk usage sensors do not support monitoring folder/directory sizes. Instead, it is only concerned with "disks" (more specifically mount points on Linux).
@@ -89,100 +74,8 @@ tmpfs 934M 0 934M 0% /dev/shm
/dev/mmcblk0p1 253M 54M 199M 22% /boot
```
-Defining a `disk_use` sensor for `/` and `/home/pi` is redundant and will return the same values, since they both belong to the same "disk". However, defining separate sensors for `/dev` and `/dev/shm` is possible and provides different values, since those are treated as separate "disks" by the integration.
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: systemmonitor
- resources:
- - type: disk_use
- arg: /dev
- - type: disk_use
- arg: /dev/shm
-```
-
## Processor temperature
- If no hardware sensor data is available (e.g., because the integration runs in a virtualized environment), the sensor entity will not be created.
- The unit of measurement (Celsius vs. Fahrenheit) will be chosen based on the system configuration.
-- Only the very first processor related hardware sensor is read, i.e., no individual core temperatures (even if the hardware sensor could provide that level of detail).
-
-## Linux specific
-
-To retrieve all available network interfaces on a Linux System, execute the
-`ifconfig` or `ip` command. The command differs based on your operation system and version.
-
-```bash
-ifconfig -a | sed 's/[ \t].*//;/^$/d'
-```
-
-```bash
-ip link show
-```
-
-## Windows specific
-
-When running this platform on Microsoft Windows, Typically,
-the default interface would be called `Local Area Connection`,
-so your configuration might look like:
-
-```yaml
-sensor:
- - platform: systemmonitor
- resources:
- - type: network_in
- arg: "Local Area Connection"
-```
-
-If you need to use some other interface, open a command line prompt and type `ipconfig` to list all interface names. For example a wireless connection output from `ipconfig` might look like:
-
-```bash
-Wireless LAN adapter Wireless Network Connection:
-
- Media State . . . . . . . . . . . : Media disconnected
- Connection-specific DNS Suffix . :
-```
-
-Where the name is `Wireless Network Connection`.
-
-## All available resources
-
-```yaml
-# Example configuration.yaml entry with all entry types (delete/comment out as necessary)
-sensor:
- - platform: systemmonitor
- resources:
- - type: disk_use_percent
- arg: /config
- - type: disk_use
- - type: disk_free
- - type: memory_use_percent
- - type: memory_use
- - type: memory_free
- - type: swap_use_percent
- - type: swap_use
- - type: swap_free
- - type: load_1m
- - type: load_5m
- - type: load_15m
- - type: network_in
- arg: eth0
- - type: network_out
- arg: eth0
- - type: throughput_network_in
- arg: eth0
- - type: throughput_network_out
- arg: eth0
- - type: packets_in
- arg: eth0
- - type: packets_out
- arg: eth0
- - type: ipv4_address
- arg: eth0
- - type: ipv6_address
- arg: eth0
- - type: processor_use
- - type: processor_temperature
- - type: last_boot
-```
+- Only the very first processor related hardware sensor is read, i.e. no individual core temperatures are available (even if the hardware sensor provides that level of detail).
diff --git a/source/_integrations/tado.markdown b/source/_integrations/tado.markdown
index 8f7b487c2a94..fef0583f767b 100644
--- a/source/_integrations/tado.markdown
+++ b/source/_integrations/tado.markdown
@@ -12,8 +12,8 @@ ha_category:
ha_release: 0.41
ha_iot_class: Cloud Polling
ha_codeowners:
- - '@michaelarnauts'
- '@chiefdragon'
+ - '@erwindouna'
ha_domain: tado
ha_config_flow: true
ha_homekit: true
@@ -46,75 +46,16 @@ It currently supports presenting the current temperature, the setting temperatur
## Presence detection
-The `tado` device tracker is using the [Tado Smart Thermostat](https://www.tado.com/) and its support for person presence detection based on smartphone location by geofencing.
+The Tado device tracker is using the [Tado Smart Thermostat](https://www.tado.com/) and its support for person presence detection based on smartphone location by geofencing.
-This tracker uses the Tado API to determine if a mobile device is at home. It tracks all devices in your home that Tado knows about.
+This tracker uses the Tado API to determine if a mobile device is at home.
-To use the Tado platform in your installation, add the following to your `configuration.yaml` file:
+By default the Tado device tracker will track all devices known to Tado associated with your home. The Tado app needs to have the `Geolocation` permission enabled for the device to be tracked.
-```yaml
-# Example configuration.yaml entry for Tado
-device_tracker:
- - platform: tado
- username: YOUR_USERNAME
- password: YOUR_PASSWORD
- home_id: YOUR_HOME_ID
-```
-
-{% configuration %}
-username:
- description: The username for your Tado account.
- required: true
- type: string
-password:
- description: The password for your Tado account.
- required: true
- type: string
-home_id:
- description: The id of your home of which you want to track devices. If provided, the Tado device tracker will track *all* devices known to Tado associated with this home. See below how to find it.
- required: false
- type: integer
-{% endconfiguration %}
-
-After configuration, your device has to be at home at least once before showing up as *home* or *away*.
+Your device has to be at home at least once before showing up as *home* or *away*.
Polling Tado API for presence information will happen at most once every 30 seconds.
-See the [device tracker integration page](/integrations/device_tracker/) for instructions how to configure the people to be tracked. Beware that the Tado (v2) API does not provide GPS location of devices, only a bearing, therefore Home Assistant only uses `home`/`not-home` status.
-
-### Finding your `home_id`
-
-Find your `home_id` by browsing to `https://my.tado.com/api/v2/me?username=YOUR_USERNAME&password=YOUR_PASSWORD`. There you'll see something like the following:
-
-```json
-{
- "name": "Mark",
- "email": "your@email.tld",
- "username": "your@email.tld",
- "homes": [
- {
- "id": 12345,
- "name": "Home Sweet Home"
- }
- ],
- "locale": "en_US",
- "mobileDevices": []
-}
-```
-
-In this example `12345` is the `home_id` you'll need to configure.
-
-### Finding your `home_id` alternative
-
-If the above method returns an unauthorized error. The `home_id` can also be found using Chrome developer tools. Whilst logged into https://my.tado.com/webapp, take the following steps:
-
-- Select the "Network"' tab
-- Filter for "home"
-- Under "Name", select "users"
-- Click on the "Response" tab
-
-The `home_id` appears in the response for users as `"id":12345`
-
-In this example `12345` is the `home_id` you'll need to configure.
+Beware that the Tado (v2) API does not provide GPS location of devices, only a bearing, therefore Home Assistant only uses `home`/`not-home` status.
## Services
@@ -201,3 +142,34 @@ automation:
{{ (-(tado_temp - room_temp) + current_offset)|round(1) }}
```
{% endraw %}
+
+### Service `tado.add_meter_reading`
+
+You can use the service `tado.add_meter_reading` to add your meter readings to Tado Energy IQ. With Energy IQ, you can track your energy consumption and take control of your heating expenses.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------------- |
+| `config_entry` | no | String, Config entry to add meter readings to. |
+| `reading` | no | Integer, Reading in m³ or kWh without decimals. |
+
+Examples:
+
+{% raw %}
+```yaml
+# Example automation add meter readings on a daily basis.
+automation:
+ # Trigger on specified time.
+ trigger:
+ - platform: time
+ at: "00:00:00"
+
+ # Add meter readings from `sensor.gas_consumption` to Tado.
+ # Retrieve your `config_entry` id by setting this automation up in UI mode.
+ # Notice that you may have to convert the reading to integer.
+ action:
+ - service: tado.add_meter_reading
+ data:
+ config_entry: ef2e84b3dfc0aee85ed44ac8e8038ccf
+ reading: "{{ states('sensor.gas_consumption')|int }}"
+```
+{% endraw %}
diff --git a/source/_integrations/tag.mqtt.markdown b/source/_integrations/tag.mqtt.markdown
index eda4f07dc55b..93e6b0a442a6 100644
--- a/source/_integrations/tag.mqtt.markdown
+++ b/source/_integrations/tag.mqtt.markdown
@@ -34,9 +34,9 @@ device:
required: false
type: string
connections:
- description: "A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `'connections': ['mac', '02:5b:26:a8:dc:12']`."
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
- type: [list, map]
+ type: list
hw_version:
description: The hardware version of the device.
required: false
@@ -57,6 +57,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
diff --git a/source/_integrations/tailwind.markdown b/source/_integrations/tailwind.markdown
index b81ae5446c9c..cfba164ecfce 100644
--- a/source/_integrations/tailwind.markdown
+++ b/source/_integrations/tailwind.markdown
@@ -14,8 +14,11 @@ ha_platforms:
- binary_sensor
- button
- cover
+ - diagnostics
- number
ha_integration_type: device
+ha_quality_scale: platinum
+ha_dhcp: true
---
The Tailwind integration integrates [Tailwind](https://gotailwind.com/)
diff --git a/source/_integrations/tami4.markdown b/source/_integrations/tami4.markdown
index 55e543692d11..33e8a8b2cd37 100644
--- a/source/_integrations/tami4.markdown
+++ b/source/_integrations/tami4.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
- '@Guy293'
ha_domain: tami4
ha_platforms:
+ - button
- sensor
ha_integration_type: integration
---
diff --git a/source/_integrations/tankerkoenig.markdown b/source/_integrations/tankerkoenig.markdown
index 5e455bd445c9..2e2c37659d9b 100755
--- a/source/_integrations/tankerkoenig.markdown
+++ b/source/_integrations/tankerkoenig.markdown
@@ -10,11 +10,14 @@ ha_domain: tankerkoenig
ha_codeowners:
- '@guillempages'
- '@mib1185'
+ - '@jpbede'
ha_platforms:
- binary_sensor
+ - diagnostics
- sensor
ha_config_flow: true
ha_integration_type: integration
+ha_quality_scale: platinum
---
The `tankerkoenig` platform allows you to monitor the fuel prices with [tankerkoenig.de](https://www.tankerkoenig.de/) from within Home Assistant and setup automations based on the information.
diff --git a/source/_integrations/technove.markdown b/source/_integrations/technove.markdown
new file mode 100644
index 000000000000..0693a8012166
--- /dev/null
+++ b/source/_integrations/technove.markdown
@@ -0,0 +1,53 @@
+---
+title: TechnoVE
+description: Instructions on how to integrate TechnoVE Smart Charging Station with Home Assistant.
+ha_category:
+ - Car
+ha_release: 2024.2
+ha_iot_class: Local Polling
+ha_domain: technove
+ha_config_flow: true
+ha_zeroconf: true
+ha_codeowners:
+ - '@Moustachauve'
+ha_platforms:
+ - binary_sensor
+ - sensor
+ - switch
+ha_integration_type: device
+---
+
+The TechnoVE integration provides connectivity with TechnoVE Smart Charging Station through the station local API.
+
+{% include integrations/config_flow.md %}
+
+## Binary sensors
+
+The {% term integration %} adds the following binary sensors:
+
+- Battery protected - On / Off
+- Charging - Charging / Not charging
+- Conflict with power sharing mode - On / Off
+- Power sharing mode - On / Off
+- Static IP - Connected / Not Connected
+- Update - Up-to-date / Update available
+
+## Sensors
+
+The {% term integration %} adds the following sensors:
+
+- Input voltage
+- Output voltage
+- Max station current
+- Current
+- Total energy usage
+- Last session energy usage
+- Wi-Fi signal strength
+- Wi-Fi network name
+- Status
+
+## Switch
+
+The {% term integration %} adds the following switch:
+
+- Auto-charge mode
diff --git a/source/_integrations/tedee.markdown b/source/_integrations/tedee.markdown
new file mode 100644
index 000000000000..dcb16e4824d8
--- /dev/null
+++ b/source/_integrations/tedee.markdown
@@ -0,0 +1,52 @@
+---
+title: Tedee
+description: Instructions on how to integrate your Tedee lock with Home Assistant.
+ha_release: 2024.2
+ha_category:
+ - Binary sensor
+ - Lock
+ - Sensor
+ha_iot_class: Local Push
+ha_config_flow: true
+ha_domain: tedee
+ha_platforms:
+ - binary_sensor
+ - diagnostics
+ - lock
+ - sensor
+ha_codeowners:
+ - '@patrickhilker'
+ - '@zweckj'
+ha_integration_type: integration
+---
+
+This integration interacts with your [Tedee](https://tedee.com) locks by communicating with the Tedee bridge through HTTP. The integration will communicate with your lock locally.
+
+## Pre-requisites
+
+- You will need the bridge to add your locks using this integration.
+- You need to have the local API enabled.
+- The bridge firmware needs to be at least version `2.2.18086` for push updates to work without errors.
+
+If you do not own the bridge, you can still add your locks to Home Assistant through the [HomeKit device integration](/integrations/homekit_controller.markdown). Communication will happen over Bluetooth in that case, and features will be limited.
+
+{% include integrations/config_flow.md %}
+
+{% configuration_basic %}
+Host:
+ description: "The IP address of your bridge. You can find it in your router or in the Tedee app under **Bridge Settings** -> **Local API**."
+ required: false
+ type: string
+Local Access Token:
+ description: "The local access token for your bridge. You can find it in the Tedee app under **Bridge Settings** -> **Local API**."
+ required: false
+ type: string
+{% endconfiguration_basic %}
+
+## Binary sensors
+
+We have three binary sensors: One that indicates whether the battery is currently charging, one indicating if the pull spring is enabled, and one indicating whether the lock is in a "semi-locked" position, meaning the lock has been turned manually and between its normal end positions.
+
+## Sensors
+
+The integration currently offers two sensors: A battery sensor, indicating the charge of your lock, and a "pull spring duration" sensor, indicating how long (in seconds) your latch will stay pulled after a pull operation (if supported).
diff --git a/source/_integrations/telegram.markdown b/source/_integrations/telegram.markdown
index 5e192202188c..f4c16d70e2ed 100644
--- a/source/_integrations/telegram.markdown
+++ b/source/_integrations/telegram.markdown
@@ -119,6 +119,10 @@ $ python3
If you want to add new chat IDs then you will need to disable the active configuration to actually see the result with the IDs, otherwise you may only get empty results array.
+
+**Method 4:** You can also get the chat ID from the Home Assistant logs. If you have set up the bot already, you can send a message to your bot from an unauthorized ID and you will see an error entry in the log containing the ID.
+[![Open your Home Assistant instance and show your Home Assistant logs.](https://my.home-assistant.io/badges/logs.svg)](https://my.home-assistant.io/redirect/logs/?)
+
## Configuration
To enable Telegram notifications in your installation, add the following to your `configuration.yaml` file:
@@ -261,7 +265,7 @@ inline_keyboard:
-Since Home Assistant version 0.48 you have to [whitelist the source folder](/docs/configuration/basic/) of the file you want to include in the notification.
+Since Home Assistant version 0.48 you have to [whitelist the source folder](/integrations/homeassistant/#allowlist_external_dirs) of the file you want to include in the notification.
```yaml
configuration.yaml
diff --git a/source/_integrations/telegram_broadcast.markdown b/source/_integrations/telegram_broadcast.markdown
index a73824f85ccd..5b62eeffd2a7 100644
--- a/source/_integrations/telegram_broadcast.markdown
+++ b/source/_integrations/telegram_broadcast.markdown
@@ -40,11 +40,7 @@ parse_mode:
type: string
default: "`markdown`"
proxy_url:
- description: Proxy URL if working behind one (`socks5://proxy_ip:proxy_port`).
- required: false
- type: string
-proxy_params:
- description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.).
+ description: Proxy URL if working behind one, optionally including username and password. (`socks5://username:password@proxy_ip:proxy_port`).
required: false
type: string
{% endconfiguration %}
diff --git a/source/_integrations/telegram_polling.markdown b/source/_integrations/telegram_polling.markdown
index befcd63fd031..cd847e40a465 100644
--- a/source/_integrations/telegram_polling.markdown
+++ b/source/_integrations/telegram_polling.markdown
@@ -42,11 +42,7 @@ parse_mode:
type: string
default: "`markdown`"
proxy_url:
- description: Proxy URL if working behind one (`socks5://proxy_ip:proxy_port`).
- required: false
- type: string
-proxy_params:
- description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.).
+ description: Proxy URL if working behind one, optionally including username and password. (`socks5://username:password@proxy_ip:proxy_port`).
required: false
type: string
{% endconfiguration %}
diff --git a/source/_integrations/telegram_webhooks.markdown b/source/_integrations/telegram_webhooks.markdown
index 3116b7162ab7..befeaa8a0b89 100644
--- a/source/_integrations/telegram_webhooks.markdown
+++ b/source/_integrations/telegram_webhooks.markdown
@@ -10,7 +10,7 @@ ha_domain: telegram_bot
Telegram chatbot webhooks implementation as described in the Telegram [documentation](https://core.telegram.org/bots/webhooks).
-By default this integration sets your bot's webhook URL automatically to `https:///api/telegram_webhooks` with the external_url of your Home Assistant [configuration](/docs/configuration/basic/) using Telegrams `setWebhook` method.
+By default this integration sets your bot's webhook URL automatically to `https:///api/telegram_webhooks` with the external_url of your Home Assistant [configuration](/integrations/homeassistant/#external_url) using Telegrams `setWebhook` method.
This is one of two bot implementations supported by Telegram. Described by Telegram as the preferred implementation but requires your Home Assistant instance to be exposed to the internet.
The other implementation method is [Telegram polling](/integrations/telegram_polling/), for which your Home Assistant instance does not have to be exposed to the internet.
@@ -44,15 +44,11 @@ parse_mode:
default: "`markdown`"
type: string
proxy_url:
- description: Proxy URL if working behind one (`socks5://proxy_ip:proxy_port`).
- required: false
- type: string
-proxy_params:
- description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.).
+ description: Proxy URL if working behind one, optionally including username and password. (`socks5://username:password@proxy_ip:proxy_port`).
required: false
type: string
url:
- description: Allow to overwrite the external URL from the Home Assistant [configuration](/docs/configuration/basic/) for different setups (`https://:`).
+ description: Allow to overwrite the external URL from the Home Assistant [configuration](/integrations/homeassistant/#editing-the-general-settings-in-yaml) for different setups (`https://:`).
required: false
type: string
trusted_networks:
diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown
index 41cbeada74b6..1ed543464058 100644
--- a/source/_integrations/template.markdown
+++ b/source/_integrations/template.markdown
@@ -55,15 +55,15 @@ Button, image, number, and select template entities are defined in your YAML con
_For old sensor/binary sensor configuration format, [see below](#legacy-binary-sensor-configuration-format)._
-# UI configuration
+## UI configuration
Sensor template and binary sensor template can be configured using the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Select the **+ Add helper** button and then select the **{% my config_flow_start domain=page.ha_domain title=page.title %}** helper.
To be able to add **{% my helpers title="Helpers" %}** via the user interface, you should have `default_config:` in your `configuration.yaml`. It should already be there by default unless you removed it.
-# YAML configuration
+## YAML configuration
-## State-based template binary sensors, buttons, images, numbers, selects and sensors
+### State-based template binary sensors, buttons, images, numbers, selects and sensors
Template entities will by default update as soon as any of the referenced data in the template updates.
@@ -86,7 +86,7 @@ template:
{% endraw %}
-## Trigger-based template binary sensors, buttons, images, numbers, selects and sensors
+### Trigger-based template binary sensors, buttons, images, numbers, selects and sensors
If you want more control over when an entity updates, you can define a trigger. Triggers follow the same format and work exactly the same as [triggers in automations][trigger-doc]. This feature is a great way to create entities based on webhook data ([example](#trigger-based-sensor-and-binary-sensor-storing-webhook-information)), or update entities based on a schedule.
@@ -147,6 +147,11 @@ sensor:
required: false
type: string
default: None
+ last_reset:
+ description: "Defines a template that describes when the state of the sensor was last reset. Must render to a valid `datetime`. Only available when `state_class` is set to `total`"
+ required: false
+ type: template
+ default: None
binary_sensor:
description: List of binary sensors
required: true
@@ -400,16 +405,16 @@ template:
[trigger-doc]: /docs/automation/trigger
-### Video tutorial
+#### Video tutorial
This video tutorial explains how to set up a Trigger based template that makes use of an action to retrieve the weather forecast (precipitation).
-## Template and action variables
+### Template and action variables
State-based and trigger-based template entities have the special template variable `this` available in their templates and actions. The `this` variable is the [state object](/docs/configuration/state_object) of the entity and aids [self-referencing](#self-referencing) of an entity's state and attribute in templates and actions. Trigger-based entities also provide [the trigger data](/docs/automation/templating/).
-## Rate limiting updates
+### Rate limiting updates
When there are entities present in the template and no triggers are defined, the template will be re-rendered when one of the entities changes states. To avoid this taking up too many resources in Home Assistant, rate limiting will be automatically applied if too many states are observed.
@@ -450,9 +455,9 @@ template:
If the template accesses every state on the system, a rate limit of one update per minute is applied. If the template accesses all states under a specific domain, a rate limit of one update per second is applied. If the template only accesses specific states, receives update events for specifically referenced entities, or the `homeassistant.update_entity` service is used, no rate limit is applied.
-## Considerations
+### Considerations
-### Startup
+#### Startup
If you are using the state of a platform that might not be available during startup, the Template Sensor may get an `unknown` state. To avoid this, use the `states()` function in your template. For example, you should replace {% raw %}`{{ states.sensor.moon.state }}`{% endraw %} with this equivalent that returns the state and never results in `unknown`: {% raw %}`{{ states('sensor.moon') }}` {% endraw %}.
@@ -779,7 +784,7 @@ template:
- platform: time_pattern
hours: /1
action:
- - service: weather.get_forecast
+ - service: weather.get_forecasts
data:
type: hourly
target:
@@ -790,7 +795,7 @@ template:
unique_id: weather_forecast_hourly
state: "{{ now().isoformat() }}"
attributes:
- forecast: "{{ hourly.forecast }}"
+ forecast: "{{ hourly['weather.home'].forecast }}"
```
{% endraw %}
diff --git a/source/_integrations/teslemetry.markdown b/source/_integrations/teslemetry.markdown
new file mode 100644
index 000000000000..321130c5dee2
--- /dev/null
+++ b/source/_integrations/teslemetry.markdown
@@ -0,0 +1,92 @@
+---
+title: Teslemetry
+description: Instructions on how to integrate Teslemetry within Home Assistant.
+ha_category:
+ - Climate
+ - Sensor
+ha_release: 2024.2
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@Bre77'
+ha_domain: teslemetry
+ha_platforms:
+ - climate
+ - diagnostics
+ - sensor
+ha_integration_type: integration
+---
+
+The Teslemetry integration exposes various commands and sensors from the Tesla vehicles connected to a [Teslemetry](https://teslemetry.com/) subscription.
+
+## Prerequisites
+
+You must have a [Teslemetry](https://teslemetry.com/) account and [access token](https://teslemetry.com/console).
+
+{% include integrations/config_flow.md %}
+
+## Entities
+
+### Climate
+
+The integration will create a climate entity to control the vehicle's climate control system. This entity can:
+
+- Turn on and off
+- Change the set temperature
+- Change to one of the four modes: Off, Keep mode, Dog mode, and Camp mode
+
+### Sensor
+
+The integration will create sensor entities for a variety of metrics that relate to your vehicles, energy sites, and Wall Connectors:
+
+#### Energy sites
+- Battery power
+- Energy left
+- Generator power (disabled by default)
+- Grid power
+- Grid services power
+- Load power
+- Percentage charged
+- Solar power
+- Total pack energy (disabled by default)
+
+#### Vehicles
+- Battery level
+- Battery power
+- Battery range
+- Charge cable
+- Charge energy added
+- Charge rate (disabled by default)
+- Charging
+- Charger power
+- Charger voltage
+- Charger current
+- Destination
+- Distance to arrival
+- Driver temperature setting (disabled by default)
+- Estimate battery range (disabled by default)
+- Fast charger type
+- Ideal battery range (disabled by default)
+- Inside temperature
+- Odometer (disabled by default)
+- Online
+- Outside temperature
+- Passenger temperature setting (disabled by default)
+- Power (disabled by default)
+- Shift state (disabled by default)
+- Speed (disabled by default)
+- State of charge at arrival (disabled by default)
+- Time to arrival
+- Time to full charge
+- Tire pressure front left (disabled by default)
+- Tire pressure front right (disabled by default)
+- Tire pressure rear left (disabled by default)
+- Tire pressure rear right (disabled by default)
+- Traffic delay (disabled by default)
+- Usable battery level (disabled by default)
+
+#### Wall connectors
+- Fault state code (disabled by default)
+- Power
+- State code (disabled by default)
+- Vehicle
diff --git a/source/_integrations/tessie.markdown b/source/_integrations/tessie.markdown
index c79cab3c72dc..c0a63aa8c6a3 100644
--- a/source/_integrations/tessie.markdown
+++ b/source/_integrations/tessie.markdown
@@ -5,10 +5,13 @@ ha_category:
- Binary Sensor
- Button
- Climate
+ - Cover
- Device Tracker
- Lock
+ - Media Player
- Number
- Sensor
+ - Update
ha_release: 2024.1
ha_iot_class: Cloud Polling
ha_config_flow: true
@@ -19,10 +22,15 @@ ha_platforms:
- binary_sensor
- button
- climate
+ - cover
- device_tracker
- lock
+ - media_player
- number
+ - select
- sensor
+ - switch
+ - update
ha_integration_type: integration
---
@@ -36,121 +44,150 @@ You must have a [Tessie](https://my.tessie.com/) account and [access token](http
## Entities
+### Binary sensor
+
+The integration will create binary sensor entities for a variety of metrics related to your vehicles:
+
+#### Charge state
+
+- Battery charging
+- Battery heater
+- Preconditioning enabled
+- Scheduled charging enabled
+- Trip charging enabled
+
+#### Climate state
+
+- Auto seat climate left
+- Auto seat climate right
+- Auto steering Wheel climate
+- Overheat protection enabled
+- Overheat protection running
+
+#### Vehicle state
+
+- Dashcam recording
+- Front driver window
+- Front passenger door
+- Front passenger window
+- Rear driver door
+- Rear driver window
+- Rear passenger door
+- Rear passenger window
+- Tire pressure warning front left
+- Tire pressure warning front right
+- Tire pressure warning rear left
+- Tire pressure warning rear right
+- User present
+
### Button
-The integration will create button entities to control various aspects of the vehicle.
+The integration will create button entities to control various aspects of the vehicle:
-- Wake
- Flash lights
-- Honk horn
- Homelink
+- Honk horn
- Keyless driving
- Play fart
+- Wake
+### Climate
-### Device Tracker
-
-The integration will create device tracker entities for the vehicles current location, and navigation destination.
+The integration will create a climate entity to control the vehicle's climate control system. This entity can:
+- Change the driver's set temperature
+- Change to one of the three keep modes: Keep, Dog, and Camp
+- Turn on and off
-### Select
+The passenger set temperature is shown as a sensor but cannot be changed by Tessie.
-The integration will create a select entity to control each of the seat heaters. It allows you to set each seat heater to Off, Low, Medium, or High.
+### Cover
-- Front Left
-- Front Right
-- Rear Left (if installed)
-- Rear Center (if installed)
-- Rear Right (if installed)
-- Third Row Left (if installed)
-- Third Row Right (if installed)
+The integration will create a cover entity to control various aspects of your vehicles:
-### Binary Sensor
+- Open/Close trunk
+- Open/Close charge port
+- Open frunk
+- Vent/Closing windows
-The integration will create binary sensor entities for a variety of metrics that relate to your vehicles:
+### Device tracker
-#### Charge State
+The integration will create device tracker entities for the vehicle's current location and navigation destination.
-- Battery Heater
-- Battery Charing
-- Preconditioning Enabled
-- Scheduled Charging Enabled
-- Trip Charging Enabled
+### Lock
-#### Climate State
+The integration will create lock entities to lock and unlock the vehicle, and to control:
-- Auto Seat Climate Left
-- Auto Seat Climate Right
-- Auto Steering Wheel Climate
-- Overheat Protection Enabled
-- Overheat Protection Running
+- Charge cable
+- Speed limit
-#### Vehicle State
+### Media Player
-- Dashcam Recording
-- User Present
-- Tire Pressure Warning Front Left
-- Tire Pressure Warning Front Right
-- Tire Pressure Warning Rear Left
-- Tire Pressure Warning Rear Right
+The integration will create media player entities to show what each vehicle is currently playing.
-### Climate
+### Number
-The integration will create a climate entity to control the vehicles climate control system. This entity can:
+The integration will create number entities to control:
-- Turn on and off
-- Change the drivers set temperature
-- Change to one of the three keep modes: Keep, Dog, and Climate
+- Charge current
+- Charge limit
+- Speed limit
-The passenger set temperature is shown as a sensor but cannot be changed by Tessie.
+### Select
-### Lock
+The integration will create a select entity to control each of the seat heaters. It allows you to set each seat heater to Off, Low, Medium, or High.
-The integration will create a lock entity for each vehicle.
+- Front left
+- Front right
+- Rear center (if installed)
+- Rear left (if installed)
+- Rear right (if installed)
+- Third row left (if installed)
+- Third row right (if installed)
### Sensor
-The integration will create sensor entities for a variety of metrics that relate to your vehicles:
+The integration will create sensor entities for a variety of metrics related to your vehicles:
-#### Vehicle State
+#### Charge state
-- Online
-- Odometer
-- Tire Pressure Front Left
-- Tire Pressure Front Right
-- Tire Pressure Rear Left
-- Tire Pressure Rear Right
+- Battery charging
+- Battery level
+- Battery range
+- Battery range estimate (disabled)
+- Battery range ideal (disabled)
+- Charge energy added
+- Charge rate
+- Charger current
+- Charger power
+- Charger voltage
-#### Charge State
+#### Climate state
-- Battery Level
-- Change Energy Added
-- Change Power
-- Charge Voltage
-- Charger Current
-- Change Rate
-- Battery Range
+- Driver temperature setting
+- Inside temperature
+- Outside temperature
+- Passenger temperature setting
-#### Drive State
+#### Drive state
-- Speed
+- Destination
+- Distance to arrival
- Power
-- Shift State
-
-### Climate State
-
-- Inside Temperature
-- Outside Temperature
-- Driver Temperature Setting
-- Passenger Temperature Setting
-
-### Number
+- Shift state
+- Speed
+- State of charge at arrival
+- Time to arrival
+- Traffic delay
-The integration will create number entities to control:
+#### Vehicle state
-- Charge current
-- Charge limit
-- Speed limit
+- Odometer
+- Online
+- Tire pressure front left
+- Tire pressure front right
+- Tire pressure rear left
+- Tire pressure rear right
### Switch
@@ -159,5 +196,9 @@ The integration will create switch entities to control various aspects of your v
- Charge
- Defrost mode
- Sentry mode
-- Valet mode
- Steering wheel heater
+- Valet mode
+
+### Update
+
+The integration will show vehicle software updates and their installation progress. Updates can only be installed from Home Assistant after they have finished downloading.
diff --git a/source/_integrations/text.mqtt.markdown b/source/_integrations/text.mqtt.markdown
index 81f03dc4b62f..06c8b0a8a20b 100644
--- a/source/_integrations/text.mqtt.markdown
+++ b/source/_integrations/text.mqtt.markdown
@@ -76,7 +76,7 @@ device:
required: false
type: string
connections:
- description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
type: list
hw_version:
@@ -99,6 +99,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -125,7 +129,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
json_attributes_template:
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
required: false
diff --git a/source/_integrations/thermopro.markdown b/source/_integrations/thermopro.markdown
index b10d8af1fd10..4a1131ed9ccd 100644
--- a/source/_integrations/thermopro.markdown
+++ b/source/_integrations/thermopro.markdown
@@ -8,6 +8,7 @@ ha_release: 2022.9
ha_iot_class: Local Push
ha_codeowners:
- '@bdraco'
+ - '@h3ss'
ha_domain: thermopro
ha_config_flow: true
ha_platforms:
@@ -23,6 +24,9 @@ Integrates [ThermoPro](https://buythermopro.com/) devices into Home Assistant.
- [TP357](https://buythermopro.com/product/thermopro-tp357-bluetooth-digital-indoor-hygrometer-thermometer/)
- [TP358](https://buythermopro.com/product/tp358/)
- [TP393](https://buythermopro.com/product/tp393/)
+- [TP960](https://buythermopro.com/product/tempspike/)
+- [TP962](https://buythermopro.com/twin-tempspike/)
+- [TP970](https://buythermopro.com/product/tempspike-plus-tp970/)
The ThermoPro integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
diff --git a/source/_integrations/thread.markdown b/source/_integrations/thread.markdown
index 45bd10d434aa..8cf79151132c 100644
--- a/source/_integrations/thread.markdown
+++ b/source/_integrations/thread.markdown
@@ -12,32 +12,233 @@ ha_config_flow: true
ha_platforms:
- diagnostics
ha_zeroconf: true
+related:
+ - docs: /yellow/
+ title: Home Assistant Yellow - hub
+ - docs: /skyconnect/
+ title: Home Assistant SkyConnect - Zigbee/Thread USB stick
+ - docs: /integrations/matter/
+ title: Matter
+ - docs: /integrations/homekit_controller/
+ title: HomeKit
+ - docs: /integrations/matter/#adding-a-matter-device-to-home-assistant
+ title: Adding a Matter device to Home Assistant
+ - docs: /integrations/homekit_controller/#adding-a-homekit-device-through-thread
+ title: Adding an Apple HomeKit device through Thread
+ - url: https://skyconnect.home-assistant.io/procedures/enable-thread/
+ title: Enabling Thread on SkyConnect
+ - url: https://yellow.home-assistant.io/procedures/enable-thread/
+ title: Enabling Thread on Yellow
---
-The Thread integration helps you track the different Thread networks in your home and helps you manage their credentials. It is currently a work in progress.
+The Thread integration helps you track the different Thread networks in your home and store the Thread network credentials (similar to a Wi-Fi password). The Thread integration in Home Assistant is currently still a work in progress.
-Thread-based consumer devices use one of the two Home Automation standards: Matter or HomeKit. To add a thread-based device to Home Assistant, use the respective Home Assistant integration:
+You do not need to install this integration. The Thread integration shows up automatically when Home Assistant detects a [border router](#about-thread-border-routers).
-| Logo | Home Assistant integration |
-| :-------------------------------------------------------------------------: | :--------------------------------:|
-| | [Matter](/integrations/Matter/) |
-| | [HomeKit](/integrations/homekit_controller/) |
+## Logos on Thread-based smart home devices
+If you have a Thread-based consumer device, you will typically see a Thread logo on the packaging.
-## Thread — A communication protocol
+
-Thread is a low-power mesh networking standard that allows users to connect their devices within a home network. Thread allows devices to communicate with each other without the need for a central controller. This makes it ideal for home automation, where a large number of devices may need to be connected. Thread uses the same RF technology as Zigbee but provides IP connectivity similar to Wi-Fi. Unlike Zigbee, Thread does not allow to control devices directly: It is just a communication protocol. A higher-level protocol, such as Matter or HomeKit, is required to control Thread-enabled devices. To see which home automation standard is supported by your device, check the icon on the packaging.
+The "Built on Thread: requires border router" logo means Thread is the only supported network protocol for this device. You cannot use Wi-Fi to communicate with this device.
-## TBRs connect Thread network to Home Assistant
+In addition, you will see a {% term Matter %} or Apple HomeKit logo on the packaging.
-To connect a Thread network to Home Assistant, Thread border routers (TBRs) are used. TBRs are devices that bridge the Thread network to a local Wi-Fi or Ethernet network. To add a TBR to Home Assistant, you can use our [Home Assistant Yellow](/yellow/) hub or the [Home Assistant SkyConnect](/skyconnect/) Zigbee/Thread stick.
+{% term Matter %} and Apple HomeKit are smart home protocols. They are responsible for handling the Thread credentials and connecting your Thread device to the Thread network. A smart home protocol is needed to control your device. Both home automation standards are supported natively by Home Assistant.
-Home Assistant communicates with TBRs over the local network. This means that TBRs do not have to be physically attached to Home Assistant to be used. You might already have a TBR as part of other products in your home, like a Google Nest Hub Gen 2 or Apple HomePod Mini.
+## Adding a Thread-based device to Home Assistant
-### Vendor specific Thread networks
+How a Thread-based device is added to Home Assistant depends on the home automation standard it uses.
-Each vendor forms their own network when you start using their products, so you can end up having a Home Assistant, an Apple, and a Google Thread network in your home. These are all separate networks using different credentials, which prevents devices from roaming between TBRs.
+1. If you see the {% term Matter %} logo on your device packaging, follow the procedure [adding a Matter device to Home Assistant](/integrations/matter/#adding-a-matter-device-to-home-assistant).
-It is possible to align credentials for TBRs from different vendors and have them form a single network together. This allows you to freely move devices between rooms without losing connectivity. To do this, you need to make sure that all TBRs use the same credentials. Currently, this works differently for each TBR vendor.
+
-Home Assistant will sync the Thread credentials with Google when starting to commission a Matter device via the Home Assistant Companion app. For other vendors, if the vendor allows you to see the operational dataset in TLV format, you can import it to Home Assistant from the Thread panel.
+2. If you see the Apple HomeKit logo on your device packaging, follow the procedure [adding a HomeKit device to Home Assistant](/integrations/homekit_controller/#adding-a-homekit-device-through-thread).
+
+
+
+## About Thread
+
+This section introduces the terms *Thread* and *border router* and lists border routers that are supported by Home Assistant.
+
+### A communication protocol for IoT devices
+
+Thread is a low-power mesh networking standard for IoT devices. The low-power aspect is important for battery-powered smart home devices. However, it's also low-bandwidth, making it ideal for applications that don't send a lot of data, like switches or motion sensors.
+
+Thread uses the same RF technology as Zigbee (IEEE 802.15.4) but provides IP connectivity similar to Wi-Fi. Unlike Zigbee, Thread by itself does not allow controlling devices: It is just a communication protocol. To control the Thread devices, a higher-level protocol is required: {% term Matter %} or Apple HomeKit. Thread devices use the IPv6 standard to communicate both inside and outside the mesh network.
+
+### About Thread border routers
+
+The devices use Thread border routers to communicate outside the mesh with any IPv6-capable device. A Thread border router is connected to your network either via Wi-Fi or Ethernet and uses its RF radio to communicate with the Thread mesh network. The TBR routes packets between your local network and the Thread mesh. It does not look at the content of these packets, it just forwards them.
+
+![image](/images/integrations/matter/matter_thread_infographic.png)
+
+Image taken from [the Thread Smart Home Fact Sheet](https://www.threadgroup.org/support#Resources) by the Thread Group. It illustrates the landscape of {% term Matter %}, {% term Thread %}, and Border routers. Instead of Matter, you could also see another protocol here, such as HomeKit.
+
+Unlike other protocols, Thread can use multiple border routers in a single network. This increases wireless coverage and reduces the risk of a single point of failure. Ideal for home automation, with a potentially large number of devices spread over a large area.
+
+#### OpenThread border routers
+
+OpenThread is an open source implementation of Thread, originally released by Google. Almost all commercially available Thread border routers are based on the open source implementation. However, the configuration of TBRs is not part of the Thread standard. This means that Google and Apple TBRs implementation setup and configured by their respective ecosystems.
+
+While Home Assistant can *use* any border router, it can *configure* and *control* only OpenThread border routers built with the REST API available in the open source implementation. The OpenThread Border Router add-on (as well as the OpenThread Border Router bundled in the experimental Silicon Labs Multiprotocol add-on) are built from this open source OpenThread code and have the REST API enabled.
+
+### List of Thread border router devices
+
+Home Assistant can act as a Thread border router. But it also supports third-party border routers. Often, Thread border routing is only an auxiliary functionality of a smart home device. For example, the Nest Hub (2nd gen) is a smart display, a Google Home controller, and a Chromecast target, but also has a Thread border router included.
+
+Currently, the following TBR devices are known to work with Home Assistant.
+These border routers may require an iPhone or Android phone for onboarding. What the exact requirements are, depends on the home automation protocol ({% term Matter %} or Apple HomeKit) that your devices are using. Before buying a border router, check the prerequisites in the corresponding procedures:
+
+- [Adding a Matter device to Home Assistant](/integrations/matter/#adding-a-matter-device-to-home-assistant)
+- [Adding an Apple HomeKit device through Thread](/integrations/homekit_controller/#adding-a-homekit-device-through-thread)
+
+#### Home Assistant
+
+Out of the box, Home Assistant SkyConnect and Yellow run Zigbee, not Thread. Currently, enabling Thread involves manual steps. The integration of the Home Assistant based Thread border router with Matter is work-in-progress.
+
+- If you have a Home Assistant Yellow or SkyConnect, you can use their Thread radio. Follow these steps to [turn Home Assistant into a Thread border router](#turning-home-assistant-into-a-thread-border-router).
+
+#### Google
+
+- **Displays**: Nest Hub (2nd gen), Nest Hub Max
+- **Wi-Fi routers**: Nest Wifi Pro (Wi-Fi 6E), Nest Wifi
+
+#### Apple
+
+- **Speakers**: HomePod (2nd generation), HomePod mini
+- **TVs**: Apple TV 4K (3rd generation) Wi-Fi + Ethernet, Apple TV 4K (2nd generation)
+
+#### Others
+
+There are also other companies that provide devices with border router capability, such as Nanoleaf or Amazon.
+
+## Turning Home Assistant into a Thread border router
+
+Follow these steps if you want to turn Home Assistant into a Thread border router using the Thread radio of Yellow, SkyConnect, or another compatible radio.
+
+Find out if you already have Thread networks:
+
+- Go to {% my integrations title="**Settings** > **Devices & Services**" %}.
+- If you do not see a **Thread** integration, add it.
+- Then, select **Configure** and check if you see any Thread networks on the overview page.
+- Case 1: If you do not have any Thread networks yet, follow [Case 1: Make Home Assistant your first Thread network](#case-1-making-home-assistant-your-first-thread-network)
+- Case 2: If you have existing networks, follow [Case 2: Create a HA border router when there is an existing network](#case-2-creating-a-ha-border-router-when-there-is-an-existing-network)
+
+### Case 1: Making Home Assistant your first Thread network
+
+Follow these steps if you want to turn Home Assistant into a Thread border router using the Thread radio of Yellow, SkyConnect, or another compatible radio and you do not have any third-party Thread networks present yet. This will automatically create a new Thread network with the name `ha-thread-xxxx`. The last for digits are a network-specific identifier (PAN ID).
+
+Note: To add Matter devices to this Thread network, an Android phone is required. Adding Matter devices to this Thread network using an iOS phone is not yet supported.
+
+#### Prerequisites
+
+- Device with a Thread-capable radio, such as Home Assistant Yellow, SkyConnect, or another compatible radio
+- Android phone
+- No third-party Thread networks present
+
+#### To make Home Assistant your first Thread network
+
+1. To enable Thread support on your Home Assistant Yellow or SkyConnect, you need to install the **OpenThread Border Router** add-on. Follow the corresponding procedure:
+ - [Enable Thread on Home Assistant Yellow](https://yellow.home-assistant.io/procedures/enable-thread/).
+ - [Enable Thread on Home Assistant SkyConnect](https://skyconnect.home-assistant.io/procedures/enable-thread/).
+
+2. Make sure the Home Assistant Thread network is defined as preferred network.
+ - This should happen automatically, but check to be sure.
+ - Go to {% my integrations title="**Settings** > **Devices & Services**" %}, select the **Thread** integration.
+ - Then, select **Configure**.
+ - You should see the Home Assistant logo under **Preferred network**.
+
+ ![image](/images/integrations/thread/thread-preferred-network-ha-only.png)
+
+3. Before you can add Matter-based Thread devices, your phone needs to know the credentials of your newly created Thread network.
+ - To share the credentials with your Android phone, open the Home Assistant Companion app.
+ - In the Companion app, go to **Settings** > **Companion app** > **Troubleshooting**, then select **Sync Thread credentials**.
+ - Follow the instructions on screen.
+ - **Result**: You will see a confirmation stating that Thread credentials from Home Assistant have been added to this device.
+4. To add Matter-based Thread devices, follow the steps on [Adding a matter device to Home Assistant](/integrations/matter/#adding-a-matter-device-to-home-assistant).
+
+### Case 2: Creating a HA border router when there is an existing network
+
+Follow these steps if you want to turn Home Assistant into a Thread border router using the Thread radio of Yellow, SkyConnect, or another compatible radio but you already have third-party Thread networks present. These steps will join the Home Assistant Thread border router with the existing Thread network.
+
+![image](/images/integrations/thread/thread-no-preferred-network-but-third-party-present.png)
+
+If you have both Google and Apple Thread networks present, decide which one you would like add the Home Assistant border router to.
+
+#### Prerequisites
+
+- Device with a Thread-capable radio, such as Home Assistant Yellow, SkyConnect, or another compatible radio
+- Third-party Thread network listed
+- Android phone if you have a Google Thread network, iPhone if you have an Apple Thread network
+
+#### To create a HA border router when there is an existing network
+
+Note: the steps and images here show the process with a Google Thread network. But the process is very similar if you have an Apple Thread network with an iPhone.
+
+1. Make sure you have an Android/iPhone phone and your phone is in the same Wi-Fi network as your Google border router.
+2. First you need to import the Thread credentials of your Google thread network.
+ - In the companion app, go to {% my integrations title="**Settings** > **Devices & Services**" %}, select the **Thread** integration.
+ - Then, select **Configure** and **Import Credentials**.
+ - **Result**: You should see a notification that the credentials are imported.
+3. Refresh the screen.
+ - You should now see an icon, indicating that Home Assistant now has the credentials of that network.
+4. Select **Make preferred network**.
+ - **Result**: The selected network now shows as the preferred network.
+
+ ![image](/images/integrations/thread/thread-google-br.png)
+
+5. To enable Thread support on your Home Assistant Yellow or SkyConnect, you need to install the **OpenThread Border Router** add-on. Follow the corresponding procedure:
+ - [Enable Thread on Home Assistant Yellow](https://yellow.home-assistant.io/procedures/enable-thread/).
+ - [Enable Thread on Home Assistant SkyConnect](https://skyconnect.home-assistant.io/procedures/enable-thread/).
+ - **Result**: The network now shows as the preferred network, joined with the third-party network.
+
+ ![image](/images/integrations/thread/thread-ha-preferred.png)
+ - 🎉 You successfully created a Home Assistant Thread network and joined it with a pre-existing third-party network.
+
+## Understanding the Thread configuration page
+
+This section explains why you might see multiple networks on the Thread configuration page and what this means for your network.
+
+### About different Thread networks
+
+Today, each vendor forms their own Thread network when you start using their products. This means you can end up having a Home Assistant, an Apple, and a Google Thread network in your home. The Thread configuration panel lists all Thread border routers and groups them by the Thread network.
+
+
+The Thread configuration page shows three vendor-specific Thread networks.
+
+
+These are all separate networks using different credentials. This means devices can't roam between the Thread networks.
+
+The icon indicates that Home Assistant has the credentials for that network. In this case, only the credentials of the `home assistant` network are known.
+
+Home Assistant discovers all Thread border routers in your network because they send mDNS/DNS-SD announcements. These local announcements don't contain the network credentials. That's why you see the network there, but not the credentials.
+
+#### About the preferred network
+
+The intention of the **Preferred network** in Home Assistant is that it will be used as the default network when adding Thread⁻based devices.
+
+
+
+The **preferred network** function isn't completely implemented yet. In particular, when adding {% term Matter %} devices through the companion apps, the preferred network of the mobile device is being used.
+
+
+
+#### Making a network your preferred network
+
+You can only set a Thread network as preferred if the credentials are known.
+
+1. To import Thread credentials, you need your Android and iOS companion app.
+2. On your companion app, navigate to the Thread configuration page.
+ - You should see an **Import credentials** button in the lower right corner.
+
+
+
+ - Importing the credentials allows a Google- or Apple-created Thread network to be the preferred network of Home Assistant.
+
+
+### Combining Thread networks
+
+In the current implementation, having multiple TBRs from different vendors results in separate networks using different credentials. This prevents devices from roaming between the Thread networks. In theory, it would be better to join all Thread networks into a single network to increase the size of the mesh network. A dense mesh network should lead to better RF coverage and better link quality, which lowers transmission latencies, making communication faster.
diff --git a/source/_integrations/time_date.markdown b/source/_integrations/time_date.markdown
index d3abb4b66eac..cfac87ee2a8b 100644
--- a/source/_integrations/time_date.markdown
+++ b/source/_integrations/time_date.markdown
@@ -6,43 +6,20 @@ ha_category:
ha_iot_class: Local Push
ha_release: pre 0.7
ha_quality_scale: internal
+ha_config_flow: true
ha_codeowners:
- '@fabaff'
ha_domain: time_date
ha_platforms:
- sensor
-ha_integration_type: integration
+ha_integration_type: service
---
The time and date (`time_date`) integration allows one to create sensors for the current date or time in different formats. All values are based on the timezone which is set in "General Configuration".
-To have these sensors available in your installation, add the following to your `configuration.yaml` file (each option creates a separate sensor that contains appropriate data, e.g., `sensor.date` for the `date` option):
+{% include integrations/config_flow.md %}
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: time_date
- display_options:
- - 'time'
- - 'date'
- - 'date_time'
- - 'date_time_utc'
- - 'date_time_iso'
- - 'time_date'
- - 'time_utc'
- - 'beat'
-```
-
-
-{% configuration %}
-display_options:
- description: The sensors to create. The types *date_time*, *date_time_utc*, *time_date*, and *date_time_iso* create combined date and the time sensors. The other types just the time sensor or the date sensor. *beat* creates the [Swatch Internet Time](https://en.wikipedia.org/wiki/Swatch_Internet_Time).
- required: true
- type: list
-{% endconfiguration %}
-
-
-Sensors including the time update every minute, the date sensor updates each day at midnight, and the beat sensor updates with each beat (86.4 seconds).
+Sensors including the time update every minute, the date sensor updates each day at midnight.
diff --git a/source/_integrations/timer.markdown b/source/_integrations/timer.markdown
index 041e4e4f2d2f..60acde7ac076 100644
--- a/source/_integrations/timer.markdown
+++ b/source/_integrations/timer.markdown
@@ -107,7 +107,7 @@ Change an active timer. This changes the duration of the timer with the duration
### Service `timer.pause`
-Pause a running timer. This will retain the remaining duration for later continuation. You can also use `entity_id: all` and all active timers will be paused.
+Pause a running timer. This will retain the remaining duration for later continuation. To resume a timer use the `timer.start` service without passing a duration. You can also use `entity_id: all` and all active timers will be paused.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
diff --git a/source/_integrations/tod.markdown b/source/_integrations/tod.markdown
index caa1cee5830f..d7a193c03b38 100644
--- a/source/_integrations/tod.markdown
+++ b/source/_integrations/tod.markdown
@@ -99,7 +99,7 @@ binary_sensor:
In the above example, the next day `sunrise` is calculated as a time range end.
-## Daylight Savings Time Handling
+## Daylight Saving Time Handling
The ToD sensor handles the following cases where the sensor interval:
- does not exist at all
@@ -111,21 +111,21 @@ To help understand all 3 cases, actual examples are provided below.
### Case 1: Sensor Interval Does Not Exist
Let's make the following assumptions:
-- Daylight Savings starts at 2am
+- Daylight Saving starts at 2am
- On the DST day, the ToD sensor interval is from non-existent 2:30am to non-existent 2:40am.
In this case, the ToD sensor will not trigger since the 2:30am-2:40am interval does not exist on the day when time jumps from 2am to 3am. However, on the following day, the sensor resumed operating normally.
### Case 2: Sensor End Time Does Not Exist
-- Daylight Savings starts at 2am
+- Daylight Saving starts at 2am
- On the DST day, the ToD sensor interval is from 1:50am to non-existent 2:10am.
In this case, the ToD sensor will last 10 minutes starting at 1:50am and stop at 3am (the 2am-3am time is jumped over and does not exist).
### Case 3: Sensor Start Time Does Not Exist
-- Daylight Savings starts at 2am
+- Daylight Saving starts at 2am
- On the DST day, the ToD sensor interval is from non-existent 2:50am to 3:10am.
In this case, the ToD sensor will last 10 minutes, starting at 3:00am and stopping at 3:10am (the 2am-3am time is jumped over and does not exist).
diff --git a/source/_integrations/todo.markdown b/source/_integrations/todo.markdown
index 1351684b0996..8799cfc8e9af 100644
--- a/source/_integrations/todo.markdown
+++ b/source/_integrations/todo.markdown
@@ -9,14 +9,21 @@ ha_quality_scale: internal
ha_codeowners:
- '@home-assistant/core'
ha_integration_type: entity
+related:
+ - docs: /integrations/local_todo
+ title: Local to-do list integration documentation
+ - docs: /dashboards/todo-list/
+ title: To-do list card
---
-The to-do list integration provides to-do list entities, allowing other integrations
-to integrate to-do lists into Home Assistant. To-do lists are shown on the to-do list
+The **To-do list** {% term integration %} provides to-do list {% term entities %}, allowing other integrations
+to integrate to-do lists into Home Assistant. To-do lists are shown on the **To-do lists**
dashboard for tracking items and whether or not they have been completed.
{% include integrations/building_block_integration.md %}
+For example, [Local to-do](/integrations/local_todo/) is a fully local integration to create to-do lists and tasks within your Home Assistant instance, [Shopping list](/integrations/shopping_list) specifically for shopping that can be added to with Assist, or other integrations work with online services providing to-do list data.
+
## Viewing and managing to-do lists
Each to-do list is represented as its own entity in Home Assistant and can be
@@ -28,19 +35,25 @@ in the main sidebar of your Home Assistant instance.
The state of a to-do list entity is a number, which represents the number of
incomplete items in the list.
+## Blueprint to add an item to a dedicated list
+
+This blueprint allows you to create a script to add an
+item to a pre-configured to-do list.
+
+{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/add-to-do-item/699193" %}
+
## Services
Some to-do list integrations allow Home Assistant to manage the to-do items in the list. The
services provided by some to-do list entities are described below or you can read more about [Service Calls](/docs/scripts/service-calls/).
-
### Service `todo.get_items`
Get to-do items from a to-do list. A to-do list `target` is selected with a [target selector](/docs/blueprint/selectors/#target-selector). The `data` payload supports the following fields:
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `status` | yes | Only return to-do items with this status. | `needs_action`, `completed`
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ----------------------------------------- | --------------------------- |
+| `status` | yes | Only return to-do items with this status. | `needs_action`, `completed` |
This is a full example that returns all to-do items that have not been completed:
@@ -57,12 +70,12 @@ data:
Add a new to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields:
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `item` | no | the name of the to-do Item. | Submit income tax return
-| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10
-| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00
-| `description` | yes | A more complete description than the one provided by the summary | Collect all necessary documents and submit the final return.
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ---------------------------------------------------------------- | ------------------------------------------------------------ |
+| `item` | no | the name of the to-do Item. | Submit income tax return |
+| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 |
+| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 |
+| `description` | yes | A more complete description than the one provided by the summary | Collect all necessary documents and submit the final return. |
Only one of `due_date` or `due_datetime` may be specified.
@@ -82,14 +95,14 @@ data:
Update a to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields:
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `item` | no | The name of the to-do Item to update. | Submit income tax return
-| `rename` | yes | The new name of the to-do Item. | Something else
-| `status` | yes | The overall status of the To-do Item. | `needs_action` or `completed`
-| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10
-| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00
-| `description` | yes | A more complete description than the one provided by the summary. | Collect all necessary documents and submit the final return.
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ----------------------------------------------------------------- | ------------------------------------------------------------ |
+| `item` | no | The name of the to-do Item to update. | Submit income tax return |
+| `rename` | yes | The new name of the to-do Item. | Something else |
+| `status` | yes | The overall status of the To-do Item. | `needs_action` or `completed` |
+| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 |
+| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 |
+| `description` | yes | A more complete description than the one provided by the summary. | Collect all necessary documents and submit the final return. |
At least one of `rename` or `status` is required. Only one of `due_date` or `due_datetime` may be specified. This is a full example of a service call that updates the status and the name of a to-do item.
@@ -107,9 +120,9 @@ data:
Removing a to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector), and the `data` payload supports the following fields:
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `item` | no | The name of the to-do item. | Submit income tax return
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | --------------------------- | ------------------------ |
+| `item` | no | The name of the to-do item. | Submit income tax return |
This is a full example of a service call that deletes a to-do Item with the specified name.
diff --git a/source/_integrations/todoist.markdown b/source/_integrations/todoist.markdown
index a76b775331fd..127d94013289 100644
--- a/source/_integrations/todoist.markdown
+++ b/source/_integrations/todoist.markdown
@@ -14,12 +14,25 @@ ha_platforms:
- todo
ha_integration_type: integration
ha_config_flow: true
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - docs: /dashboards/dashboards/
+ title: Dashboards
+ - docs: /integrations/calendar/
+ title: Calendar
+ - url: https://todoist.com
+ title: Todoist projects
---
This platform allows you to connect to your [Todoist projects](https://todoist.com) as [todo](/integrations/todo/) or [calendar](/integrations/calendar/) entities. All tasks get updated roughly every 15 minutes.
-A calendar entity will be `on` if you have a task due in that project. It will be `off` if all the tasks in the project are completed or if the project doesn't have any tasks at all.
+A calendar entity will be `on` if you have a task due in that project. It will be `off` if all the tasks in the project are completed or if the project doesn't have any tasks at all.
## Prerequisites
diff --git a/source/_integrations/tolo.markdown b/source/_integrations/tolo.markdown
index 530775b786da..9c46d58439d0 100644
--- a/source/_integrations/tolo.markdown
+++ b/source/_integrations/tolo.markdown
@@ -1,6 +1,6 @@
---
title: TOLO Sauna
-description: Control your TOLO Sauna and TOLO Steam Bath with Home Assistant.
+description: Control your TOLO Sauna and Steam Bath with Home Assistant.
ha_release: '2021.12'
ha_category:
- Climate
@@ -20,19 +20,111 @@ ha_platforms:
- number
- select
- sensor
+ - switch
ha_dhcp: true
ha_integration_type: integration
---
-The TOLO Sauna integration allows you to control your [TOLO Sauna and TOLO Steam Bath](https://www.tolosauna.com/) with Home Assistant.
+The TOLO integration allows to control [Steamtec TOLO](https://www.tolosauna.com/) devices with Home Assistant.
-The integration allows for:
-- Turning the sauna on and off
-- Setting the target temperature and target humidity
-- Controlling the fan (used for drying and cooling down the sauna)
-- Controlling the sauna lights (on/off, mode selection)
-- Configuring timers for automatic power shutdown, automatic fan shutdown and salt spray activation interval
-- Checking diagnostic information (water level, tank temperature, water in/out valves)
+## Prerequisites
+
+To be able to connect to your TOLO system via Home Assistant, you need to have the TOLO App Control Box, which is also required to be able to control your TOLO system using your mobile phone.
+Connect the TOLO App Control Box to your network.
+For auto detection, your Home Assistant instance needs to be connected to the same network broadcast domain as your TOLO App Control Box (which is usually true for normal home networks).
+However, you can also manually define the IP to which the Home Assistant TOLO integration should connect to.
+Please use your router to find out the IP address of your TOLO App Control Box.
+
+
+## Features
+
+**General notice:**
+A TOLO system can be equipped with many optional accessoires, such as [lights](#light-control), [fans](#fan-control), [aroma oil injectors](#aroma-therapy), [sole nebulizer](#salt-bath) and [descaling pump](#sweeping-and-descaling).
+The TOLO system does not report back which optional accessories are attached. Therefore, the TOLO integration always provides all possible entities even if the features are not available due to missing optional accessories.
+
+
+### Sauna operating mode
+
+The TOLO integration offers a climate entity to control the general operating mode of your TOLO system.
+This can either be *Off*, *Heat*, or *Dry*.
+
+ - *Off*: Energy is shut down, the water boiler is empty (or will be emptied soon, see [Sweeping and Descaling](#sweeping-and-descaling)).
+ - *Heat*: This is the normal operating mode for enjoying your sauna or steam bath.
+ If *Power timer* is set to a value greater than zero, the TOLO system will automatically turn off after the amount of minutes configured in the *Power timer* setting.
+ If *Power timer* is set to zero, the TOLO system will run indefinitely, until it is turned off manually.
+ - *Dry*: In this mode, everything is turned off except the fan.
+ This mode can be used when shutting down the TOLO system to reduce humidity in the room.
+ After the time configured in *Fan timer* (see [Fan Control](#fan-control)) has passed, the fan and the TOLO system will automatically turn to *Off*.
+
+
+### Temperature and humidity
+
+The TOLO system allows setting a target temperature between 35°C and 60°C.
+The TOLO system will heat and continue to produce steam until the room temperature sensor reaches the configured target temperature.
+
+Target humidity can be set between 60% and 99%.
+Once the configured humidity is reached, the steam generator will stop producing steam.
+If then the humidity is below 6% (this value is hardcoded by TOLO systems and cannot be changed by the TOLO integration), the TOLO system will start to produce steam again.
+This setting is only recognized if the TOLO system is equipped with a humidity sensor (not part of the default configuration).
+If no humidity sensor is present, steam production will only depend on the temperature.
+
+
+### Light control
+
+The TOLO system allows to connect RGB LEDs, which can be controlled by the TOLO integration.
+The TOLO system provides two modes for LED operation, *manual* and *automatic*.
+
+ - *Manual*: When turned on, the RGB LEDs will stick to the same color until it is manually changed by pressing the *Next color* button.
+ - *Automatic*: When turned on, the RGB LEDs will slowly fade from one color to another.
+
+
+### Fan control
+
+The TOLO system allows to connect a fan, which can be used to reduce the humidity after the steam generation has been turned off.
+Once activated, the fan will automatically turn off between 1 and 60 minutes, depending on the *Fan timer* setting.
+
+
+### Aroma therapy
+
+The TOLO system allows to connect an aroma oil injector with slots for either one or two aroma flavors.
+When enabled, the aroma pump will work every 5 minutes for 5 seconds each.
+Unfortunately, the TOLO system does not allow to change these intervals.
+For shorter intervals between pump activations, the TOLO manual suggests to manually disable and enable *Aroma therapy*.
+
+
+### Salt bath
+
+The TOLO system allows to connect a sole nebulizer, which can be used to inject salt spray in your sauna or steam bath room to allow for a salt bath.
+Using the *Salt bath timer*, the salt bath feature can be configured to run indefinitely (set *Salt bath timer* to 0) or for a pre-defined time between 1 and 60 minutes.
+
+
+### Sweeping and descaling
+
+The TOLO system has a built-in system for sweeping and descaling.
+This feature is currently not supported by the TOLO integration and will be added in an upcoming release.
+
+
+### Diagnostic information
+
+Beside the controls described above, the TOLO integration provides following diagnostic information:
+ - *Power timer*:
+ The remaining time the TOLO system will produce steam after it has been turned on.
+ - *Fan timer*:
+ The remaining time the fan will be on after it has been turned on.
+ - *Salt bath timer*:
+ The remaining time the salt bath will be active after it has been turned on.
+ - *Tank temperature*:
+ Current temperature of the water in the water tank.
+ Should be close to 100°C when in *Heat* mode.
+ - *Water level*:
+ The current water level in the water tank.
+ This should be 0% when off and 100% when in *Heat* mode.
+ - *Water in/out valves*:
+ Indicates if the TOLO system currently lets water run in or out.
+ When starting up, *Water in valve* should be open while *Water out valve* should be closed.
+ During *Heat* operation, both valves should be normally closed except short moments where consumed water needs to be refilled.
+ When off, the *Water out valve* should remain open.
+
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/totalconnect.markdown b/source/_integrations/totalconnect.markdown
index 4c1f859116c7..80db768bbe4e 100644
--- a/source/_integrations/totalconnect.markdown
+++ b/source/_integrations/totalconnect.markdown
@@ -4,6 +4,7 @@ description: Integrate Resideo Total Connect 2.0-enabled alarm systems into Home
ha_category:
- Alarm
- Binary sensor
+ - Button
ha_release: 0.42
ha_iot_class: Cloud Polling
ha_config_flow: true
@@ -13,6 +14,7 @@ ha_domain: totalconnect
ha_platforms:
- alarm_control_panel
- binary_sensor
+ - button
- diagnostics
ha_integration_type: integration
---
@@ -94,7 +96,11 @@ The integration provides a binary sensor for each Total Connect zone. To see fau
The Total Connect API has limited zone type information. Home Assistant device class `door` is assigned to Total Connect entry/exit, perimeter, and motion zones; along with most alarm panel buttons. The sensor will appear as `True` if the zone is opened (either fault or triggered in Total Connect) and `False` if closed. Device class `smoke` is assigned to Total Connect smoke detectors and alarm panel buttons set to a "Fire No Verification" response type. The sensor will appear as `True` if smoke is detected or the respective button is pressed. Device class `gas` is assigned to Total Connect carbon monoxide detectors. The sensor will appear as `True` if carbon monoxide is detected.
-### Diagnostic Sensors
+## Buttons
+
+The integration provides a bypass button for each zone that can be bypassed. The **Bypass All** button for the alarm panel will bypass all faulted or troubled zones. The **Clear Bypass** button for the alarm panel will clear all bypassed zones.
+
+## Diagnostic Sensors
The following diagnostic sensors are available:
diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown
index 3cd7a9da1f97..6ec871c023e2 100644
--- a/source/_integrations/tplink.markdown
+++ b/source/_integrations/tplink.markdown
@@ -1,5 +1,5 @@
---
-title: TP-Link Kasa Smart
+title: TP-Link Smart Home
description: Instructions on integrating TP-Link Smart Home Devices to Home Assistant.
ha_category:
- Hub
@@ -13,6 +13,7 @@ ha_codeowners:
- '@rytilahti'
- '@thegardenmonkey'
- '@bdraco'
+ - '@sdb9696'
ha_domain: tplink
ha_platforms:
- diagnostics
@@ -24,15 +25,12 @@ ha_quality_scale: platinum
ha_integration_type: integration
---
-The `tplink` integration allows you to control your [TP-Link Smart Home Devices](https://www.tp-link.com/kasa-smart/) such as plugs, power strips, wall switches and bulbs.
+The `tplink` integration allows you to control your [TP-Link Kasa Smart Home Devices](https://www.tp-link.com/kasa-smart/) and [TP-Link Tapo Devices](https://www.tapo.com/) such as plugs, power strips, wall switches and bulbs.
-You need to provision your newly purchased device to connect to your network before it can be added via the integration. This can be done either by using [kasa command-line tool](https://python-kasa.readthedocs.io/en/latest/cli.html#provisioning) or by adding it to the official Kasa app before trying to add them to Home Assistant. If you use the app, do not upgrade the firmware if it presents the option to avoid blocking the local access by potential firmware updates.
+You need to provision your newly purchased device to connect to your network before it can be added via the integration. This can be done either by using [kasa command-line tool](https://python-kasa.readthedocs.io/en/latest/cli.html#provisioning) or by adding it to the official Kasa or Tapo app before trying to add them to Home Assistant.
-There is currently support for the following device types within Home Assistant:
-
-- **Light**
-- **Switch**
-- **Sensor**
+If your device is a newer Kasa or Tapo device it will require your TP-Link cloud username and password to authenticate for local access.
+If you have an older device that does not currently require authentication, you may consider disabling automatic firmware updates to keep it that way.
{% include integrations/config_flow.md %}
@@ -40,9 +38,11 @@ There is currently support for the following device types within Home Assistant:
See [Supported Devices in python-kasa](https://github.com/python-kasa/python-kasa#supported-devices) for an up to date list.
-## Supported devices
+Devices not listed below may work but if you encounter issues submit a bug report to [python-kasa](https://github.com/python-kasa/python-kasa).
+
+### Not requiring authentication
-### Plugs
+#### Plugs
- HS100
- HS103
@@ -55,16 +55,18 @@ See [Supported Devices in python-kasa](https://github.com/python-kasa/python-kas
- KP125
- KP401
- EP10
-- EP25
+- EP25 (Hardware version < 2.6)
-### Power Strips
+#### Power Strips
- EP40
- HS300
- KP303
+- KP200
- KP400
+- KP405
-### Wall switches
+#### Wall switches
- ES20M
- HS200
@@ -74,7 +76,7 @@ See [Supported Devices in python-kasa](https://github.com/python-kasa/python-kas
- KS220M
- KS230
-### Bulbs
+#### Bulbs
- EP40
- LB100
@@ -90,19 +92,45 @@ See [Supported Devices in python-kasa](https://github.com/python-kasa/python-kas
- KL130
- KL135
-### Light strips
+#### Light strips
- KL400
- KL420
- KL430
-Other bulbs may also work, but with limited color temperature range (2700-5000). If you find a bulb isn't reaching the full-color temperature boundaries, submit a bug report to [python-kasa](https://github.com/python-kasa/python-kasa).
+### Requiring authentication
+
+#### Plugs
+
+- EP25 (Hardware version >= 2.6)
+- KP125M
+- P110
+- HS100 (UK Hardware version 4.1 with firmware 1.1.0)
+
+#### Wall switches
+
+- KS205
+- KS225
+
+#### Bulbs
+
+- L510B
+- L530E
+- TL135E
+
+#### Light strips
+
+- L900-5
+- L900-10
+- L920
+
+#### Power Strips
-## Unsupported devices
+- P300
-### Plugs
+## Light strip effects
-- KP125M (supported via [Matter](/integrations/matter/#tp-link-tapo-p125m-power-plug), but without energy monitoring features)
+Light strip effects are currently only supported for the device types not requiring authentication.
### Random Effect - Service `tplink.random_effect`
@@ -153,7 +181,7 @@ data:
random_seed: 80
```
-### Seqeuence Effect - Service `tplink.sequence_effect`
+### Sequence Effect - Service `tplink.sequence_effect`
The light strips allow setting a sequence effect.
diff --git a/source/_integrations/tplink_omada.markdown b/source/_integrations/tplink_omada.markdown
index 5c8bb88ea64e..d81801236fc1 100644
--- a/source/_integrations/tplink_omada.markdown
+++ b/source/_integrations/tplink_omada.markdown
@@ -37,7 +37,7 @@ TP-Link Omada Controller:
- OC200
- OC300
-- Software Controller.
+- Software Controller
Controller versions 5.1.0 and later are supported.
@@ -45,18 +45,17 @@ Controller versions 5.1.0 and later are supported.
### Network Switches
-- Support for enabling/disabling Power over Ethernet on a per-port basis.
-- Firmware Update entities.
+- Support for enabling/disabling Power over Ethernet on a per-port basis
+- Firmware Update
### Access Points
-- Firmware Update entities.
+- Firmware Update
### Internet Gateways
-- Firmware Update entities.
-- WAN/LAN Port connectivity sensor entities.
-
-## Device trackers
-
-- Not currently supported.
+- WAN/LAN Port connectivity sensors
+- WAN Port Online detection sensors
+- WAN Port Connect/Disconnect switches
+- LAN Port PoE activity sensor
+- Firmware Update
diff --git a/source/_integrations/tplink_tapo.markdown b/source/_integrations/tplink_tapo.markdown
new file mode 100644
index 000000000000..b5a64c39ce9b
--- /dev/null
+++ b/source/_integrations/tplink_tapo.markdown
@@ -0,0 +1,29 @@
+---
+title: Tapo
+description: Connect and control your Tapo devices using the TP-Link Smart Home integration
+ha_category:
+ - Hub
+ - Light
+ - Sensor
+ - Switch
+ha_domain: tplink_tapo
+ha_release: 0.89
+ha_integration_type: virtual
+ha_supporting_domain: tplink
+ha_supporting_integration: TP-Link Smart Home
+ha_codeowners:
+ - '@rytilahti'
+ - '@thegardenmonkey'
+ - '@bdraco'
+ - '@sdb9696'
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - light
+ - sensor
+ - switch
+ha_iot_class: Local Polling
+ha_dhcp: true
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/traccar.markdown b/source/_integrations/traccar.markdown
index 829318c8b423..ebbbd02e73e5 100644
--- a/source/_integrations/traccar.markdown
+++ b/source/_integrations/traccar.markdown
@@ -1,11 +1,11 @@
---
-title: Traccar
+title: Traccar Client
description: Instructions how to use Traccar GPS tracker to track devices in Home Assistant.
ha_release: 0.83
ha_category:
- Car
- Presence detection
-ha_iot_class: Local Polling
+ha_iot_class: Cloud Push
ha_config_flow: true
ha_codeowners:
- '@ludeeus'
@@ -15,161 +15,14 @@ ha_platforms:
ha_integration_type: integration
---
-`Traccar` uses GPS for tracking and has support for over 1500 different types of devices. One option is to track the [Traccar Client](https://www.traccar.org/client/) app on a smartphone via `webhook`. The other option is to connect to an existing [Traccar Server](https://www.traccar.org/server/) installation which is also available as Home Assistant add-on.
+`Traccar` uses GPS for tracking and has support for over 1500 different types of devices. You can use the [Traccar Client](https://www.traccar.org/client/) app on a smartphone via `webhook`.
-## Traccar client
+
-To configure Traccar Client, you must set it up via the integrations panel in the configuration screen. This will give you the webhook URL to use during mobile device configuration. This URL has to be set in the Traccar app.
-
-## Traccar server
-
-To integrate Traccar Server in Home Assistant, add the following section to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-device_tracker:
- - platform: traccar
- host: IP_ADDRESS
- username: USERNAME
- password: PASSWORD
-```
+ Looking for documentation on how to communicate with a Traccar Server? See the [Traccar Server](/integrations/traccar_server/) integration documentation.
-{% configuration %}
-host:
- description: The DNS name or IP Address of the server running Traccar.
- required: true
- type: string
-username:
- description: The username for the Traccar server.
- required: true
- type: string
-password:
- description: The password for your given account on the Traccar server.
- required: true
- type: string
-host:
- description: The DNS name or IP Address of the server running Traccar.
- required: true
- type: string
-port:
- description: The port of your Traccar server.
- required: false
- default: 8082
- type: integer
-ssl:
- description: Use HTTPS to connect to Traccar server. *NOTE* A host *cannot* be an IP address when this option is enabled.
- required: false
- default: false
- type: boolean
-verify_ssl:
- description: Verify the certification of the system.
- required: false
- type: boolean
- default: true
-max_accuracy:
- description: Filter positions with higher accuracy than specified.
- required: false
- type: integer
- default: 0
-skip_accuracy_filter_on:
- description: Skip filter position by "max_accuracy filter" if any of specified attributes are present on the traccar message.
- required: false
- type: list
-monitored_conditions:
- description: Additional traccar computed attributes or device-related attributes to include in the scan.
- required: false
- type: list
-event:
- description: "Traccar events to include in the scan and fire within Home Assistant. *NOTE* For more info regarding Traccar events please refer to [Traccar's documentation](https://www.traccar.org/events/)."
- required: false
- type: list
- keys:
- device_moving:
- description: "**deviceMoving** event."
- required: false
- type: string
- command_result:
- description: "**commandResult** event."
- required: false
- type: string
- device_fuel_drop:
- description: "**deviceFuelDrop** event."
- required: false
- type: string
- geofence_enter:
- description: "**geofenceEnter** event."
- required: false
- type: string
- device_offline:
- description: "**deviceOffline** event."
- required: false
- type: string
- driver_changed:
- description: "**driverChanged** event."
- required: false
- type: string
- geofence_exit:
- description: "**geofenceExit** event."
- required: false
- type: string
- device_overspeed:
- description: "**deviceOverspeed** event."
- required: false
- type: string
- device_online:
- description: "**deviceOnline** event."
- required: false
- type: string
- device_stopped:
- description: "**deviceStopped** event"
- required: false
- type: string
- maintenance:
- description: "**maintenance** event."
- required: false
- type: string
- alarm:
- description: "**alarm** event."
- required: false
- type: string
- text_message:
- description: "**textMessage** event."
- required: false
- type: string
- device_unknown:
- description: "**deviceUnknown** event."
- required: false
- type: string
- ignition_off:
- description: "**ignitionOff** event."
- required: false
- type: string
- ignition_on:
- description: "**ignitionOff** event."
- required: false
- type: string
- all_events:
- description: "**allEvents** catchall for all event types."
- required: false
- type: string
-{% endconfiguration %}
+
-The parameter `monitored_conditions` allows you to track non standard attributes from the traccar platform and use them in your Home Assistant. For example if you need to monitor the state of the non standard attribute `alarm` and a custom computed attribute `mycomputedattribute` just fill the configuration with:
-
-```yaml
-device_tracker:
- - platform: traccar
- ...
- monitored_conditions: ['alarm', 'mycomputedattribute']
-```
-
-The parameter `event` allows you to import [events](https://www.traccar.org/events/) from the traccar platform and fire them in your Home Assistant. It accepts a list of events to be monitored and imported and each event must be listed in lowercase snakecase. The events will be fired with the same event name defined in the aforementioned list preceded by the prefix `traccar_`. For example if you need to import the Traccar events `deviceOverspeed` and `deviceFuelDrop` in Home Assistant, you need to fill the `event` parameter with:
+To configure Traccar Client, you must set it up via the integrations panel in the configuration screen. This will give you the webhook URL to use during mobile device configuration. This URL has to be set in the Traccar app.
-```yaml
-device_tracker:
- - platform: traccar
- ...
- event: ['device_overspeed', 'device_fuel_drop']
-```
-and as soon as Home Assistant receives those events from the platform, they will be fired as `traccar_device_overspeed` and `traccar_device_fuel_drop`.
-*NOTE* Specify `all_events` if you want to import all events.
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/traccar_server.markdown b/source/_integrations/traccar_server.markdown
new file mode 100644
index 000000000000..63454beef58b
--- /dev/null
+++ b/source/_integrations/traccar_server.markdown
@@ -0,0 +1,311 @@
+---
+title: Traccar Server
+description: Documentation for the Traccar Server integration.
+ha_release: 2024.2
+ha_category:
+ - Car
+ - Presence detection
+ha_iot_class: Local Push
+ha_config_flow: true
+ha_codeowners:
+ - '@ludeeus'
+ha_domain: traccar_server
+ha_platforms:
+ - binary_sensor
+ - device_tracker
+ - diagnostics
+ - sensor
+ha_integration_type: integration
+---
+
+Traccar uses GPS for tracking and has support for over 1500 different types of devices. You can use the Traccar Server integration to communicate with your own [Traccar Server](https://www.traccar.org/server/), which is also available as [Home Assistant add-on](https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_traccar).
+
+
+
+ Looking for documentation on how to setup the Traccar Client with webhooks in Home Assistant? See the [Traccar Client](/integrations/traccar/) integration documentation.
+
+
+
+{% include integrations/config_flow.md %}
+
+## Events
+
+The Traccar Server integration options allow you to define a list of events you want to listen for. These events will be sent to Home Assistant as [events](/docs/configuration/events/).
+
+All events will be prefixed with `traccar_` followed by a snake_cased version of the event name.
+Examples:
+
+- The `deviceMoving` will be fired in Home Assistant as `traccar_device_moving`.
+- The `geofenceExit` will be fired in Home Assistant as `traccar_geofence_exit`.
+- The `alarm` will be fired in Home Assistant as `traccar_alarm`.
+
+All events will also have the following data:
+
+{% configuration_basic %}
+
+Device ID:
+ description: (`device_traccar_id`) This will be the device ID that the event is related to.
+Device name:
+ description: (`device_name`) This will be the name of the device that the event is related to.
+Type:
+ description: (`type`) This will be the type of the event.
+Server time:
+ description: (`serverTime`) This will be the time the event was received by the Traccar Server.
+Attributes:
+ description: (`attributes`) This will be a dictionary of attributes related to the event.
+
+{% endconfiguration_basic %}
+
+{% details "Example" %}
+
+```json
+{
+ "device_traccar_id": 24,
+ "device_name": "My Device",
+ "type": "alarm",
+ "serverTime": "1970-01-01T00:00:00.000Z",
+ "attributes": {
+ "custom_attribute": "value"
+ },
+}
+```
+
+{% enddetails %}
+
+## Devices
+
+The Traccar Server integration will create devices for each device registered in the Traccar Server with at least one position update.
+
+These device representations in Home Assistant will have [entities](#entities) associated with them, which you can use in [automations](/docs/automation), [scripts](/docs/script), and display on your [dashboard](/docs/dashboard).
+
+## Entities
+
+The traccar server integration will create entities in with the following domains:
+
+- [Binary Sensor](/integrations/binary_sensor)
+- [Device Tracker](/integrations/device_tracker)
+- [Sensor](/integrations/sensor)
+
+For more details about each of these, see the sections below.
+
+### Binary Sensor - Motion
+
+The Traccar Server integration will create a [binary_sensor](/integrations/binary_sensor) entity for each device registered in Traccar Server to show the motion reported by the Traccar Server.
+
+This entity is disabled by default.
+
+{% configuration_basic %}
+Name:
+ description: The name of the sensor will be set to what you have named it in Traccar Server, followed by the term "Motion". If your device is named "Millennium Falcon", this will be "Millennium Falcon Motion".
+Entity ID:
+ description: This will be a slugified version of the name.
+Unique ID:
+ description: This will be the unique ID of the device tracker in Traccar Server followed by `position_attributes_motion`.
+State:
+ description: This will be `Moving` if the Traccar Server reports that the device is moving, if not this will be `Stopped`.
+{% endconfiguration_basic %}
+
+This entity does not have any attributes.
+
+### Binary Sensor - Status
+
+The Traccar Server integration will create a [binary_sensor](/integrations/binary_sensor) entity for each device registered in Traccar Server to show the status reported by the Traccar Server.
+
+This entity is disabled by default.
+
+{% configuration_basic %}
+Name:
+ description: The name of the sensor will be set to what you have named it in Traccar Server followed by the term "Status". If your device is named "Millennium Falcon", this will be "Millennium Falcon Status".
+Entity ID:
+ description: This will be a slugified version of the name.
+Unique ID:
+ description: This will be the unique ID of the device tracker in Traccar Server followed by `device_status`.
+State:
+ description: This will be `Online` if the Traccar Server reports that the device is online. This will be `Offline` if it reports it being offline, or `Unknown` if it is not sure.
+{% endconfiguration_basic %}
+
+This entity does not have any attributes.
+
+### Device Tracker
+
+The Traccar Server integration will create a [device tracker](/integrations/device_tracker) entity for each device registered in Traccar Server.
+
+{% configuration_basic %}
+Name:
+ description: The name of the device tracker will be set to what you have named it in Traccar Server.
+Entity ID:
+ description: This will be a slugified version of the name of the device tracker.
+Unique ID:
+ description: This will be the unique ID of the device tracker in Traccar Server.
+State:
+ description: As a device tracker, the state will be `home` or `not_home`.
+{% endconfiguration_basic %}
+
+{% details "Attributes" %}
+
+In addition to the custom attributes you can define in the Traccar Server integration options, the device tracker entity will have the following attributes:
+
+{% configuration_basic %}
+Category:
+ description: The category of the device in Traccar if defined.
+Traccar ID:
+ description: The ID of the device in Traccar.
+Tracker:
+ description: Just a string that says `traccar_server`.
+{% endconfiguration_basic %}
+
+{% enddetails %}
+
+### Sensor - Address
+
+The Traccar Server integration will create a [sensor](/integrations/sensor) entity for each device registered in Traccar Server to show the address reported by the Traccar Server.
+
+This entity is disabled by default.
+
+{% configuration_basic %}
+Name:
+ description: The name of the sensor will be set to what you have named it in Traccar Server followed by Address. If your device is named "Millennium Falcon", this will be "Millennium Falcon Address".
+Entity ID:
+ description: This will be a slugified version of the name.
+Unique ID:
+ description: This will be the unique ID of the device tracker in Traccar Server followed by `position_address`.
+State:
+ description: This will be the address reported by the Traccar Server, if geo detection is not configured this will be unknown`.
+{% endconfiguration_basic %}
+
+This entity does not have any attributes.
+
+### Sensor - Altitude
+
+The Traccar Server integration will create a [sensor](/integrations/sensor) entity for each device registered in Traccar Server to show the altitude reported by the Traccar Server.
+
+This entity is disabled by default.
+
+{% configuration_basic %}
+Name:
+ description: The name of the sensor will be set to what you have named it in Traccar Server followed by Altitude. If your device is named "Millennium Falcon", this will be "Millennium Falcon Altitude".
+Entity ID:
+ description: This will be a slugified version of the name.
+Unique ID:
+ description: This will be the unique ID of the device tracker in Traccar Server followed by `position_altitude`.
+State:
+ description: This will be the altitude in meters. You can select a different unit in the entity options if you want.
+{% endconfiguration_basic %}
+
+This entity does not have any attributes.
+
+### Sensor - Battery
+
+The Traccar Server integration will create a [sensor](/integrations/sensor) entity for each device registered in Traccar Server to show the remaining battery percentage reported by the Traccar Server.
+
+This entity is disabled by default.
+
+{% configuration_basic %}
+Name:
+ description: The name of the sensor will be set to what you have named it in Traccar Server followed by Battery. If your device is named "Millennium Falcon", this will be "Millennium Falcon Battery".
+Entity ID:
+ description: This will be a slugified version of the name.
+Unique ID:
+ description: This will be the unique ID of the device tracker in Traccar Server followed by `position_attributes.batteryLevel`.
+State:
+ description: This will be the battery percentage (level) as reported by the tracked device, if the device does not have a battery this will be unknown.
+{% endconfiguration_basic %}
+
+This entity does not have any attributes.
+
+### Sensor - Geofence
+
+The Traccar Server integration will create a [sensor](/integrations/sensor) entity for each device registered in Traccar Server to show the geofence reported by the Traccar Server.
+
+This entity is disabled by default.
+
+{% configuration_basic %}
+Name:
+ description: The name of the sensor will be set to what you have named it in Traccar Server followed by Geofence. If your device is named "Millennium Falcon", this will be "Millennium Falcon Geofence".
+Entity ID:
+ description: This will be a slugified version of the name.
+Unique ID:
+ description: This will be the unique ID of the device tracker in Traccar Server followed by `geofence_geofence`.
+State:
+ description: This will be geofence that the device is in, if you have overlapping geofences it will show the first one as reported by the Traccar Server.
+{% endconfiguration_basic %}
+
+This entity does not have any attributes.
+
+### Sensor - Speed
+
+The Traccar Server integration will create a [sensor](/integrations/sensor) entity for each device registered in Traccar Server to show the speed reported by the Traccar Server.
+
+This entity is disabled by default.
+
+{% configuration_basic %}
+Name:
+ description: The name of the sensor will be set to what you have named it in Traccar Server followed by Speed. If your device is named "Millennium Falcon", this will be "Millennium Falcon Speed".
+Entity ID:
+ description: This will be a slugified version of the name.
+Unique ID:
+ description: This will be the unique ID of the device tracker in Traccar Server followed by `position_speed`.
+State:
+ description: This will be the speed of the device in knots. You can select a different unit in the entity options if you want.
+{% endconfiguration_basic %}
+
+This entity does not have any attributes.
+
+## Examples
+
+So you set up the integration and it pulled in all your devices. Now what? Below are some examples of what you can do with the data provided by Traccar Server integration.
+
+### Automations
+
+In this section you will find some example automations that you can use to get started with the Traccar Server integration.
+
+#### Do something when a device enters a geofence
+
+The allows you to do something when the device "Millennium Falcon" enters the defined geofence.
+
+{% my blueprint_import badge blueprint_url="https://www.home-assistant.io/blueprints/integrations/traccar_server_device_enter_geofence.yaml" %}
+
+{% details "Show me the YAML!" %}
+
+```yaml
+trigger:
+ - platform: state
+ entity_id: sensor.millennium_falcon_geofence
+ to: 'Tatooine'
+action:
+ ...
+```
+
+{% enddetails %}
+
+#### Do something when a device are speeding
+
+The allows you to do something when the device "Millennium Falcon" exceeds a defined speed.
+
+{% my blueprint_import badge blueprint_url="https://www.home-assistant.io/blueprints/integrations/traccar_server_device_speed_limit.yaml" %}
+
+{% details "Show me the YAML!" %}
+
+```yaml
+trigger:
+ - platform: numeric_state
+ entity_id: sensor.millennium_falcon_speed
+ above: 1337
+action:
+ ...
+```
+
+If you want to include the speed in a notification, you can use the `{{ trigger.to_state.state }}` template.
+
+Partial example:
+
+```yaml
+trigger:
+ ...
+action:
+ - service: notify.notify
+ data:
+ message: "The current speed of the Millennium falcon is {{ trigger.to_state.state }}!"
+```
+
+{% enddetails %}
diff --git a/source/_integrations/tractive.markdown b/source/_integrations/tractive.markdown
index 93b41dc1a02f..dee5a9b53177 100644
--- a/source/_integrations/tractive.markdown
+++ b/source/_integrations/tractive.markdown
@@ -30,6 +30,10 @@ To use the integration you must be a premium tractive client.
{% include integrations/config_flow.md %}
+
+Due to Tractive API limitations, trackers (pets) that are shared from another account to your account are not visible in Home Assistant. You need to configure all Tractive accounts from which trackers (pets) come from with Home Assistant.
+
+
## Integration entities
The Tractive integration adds one device tracker and several sensors and switches per registered pet:
diff --git a/source/_integrations/trafikverket_train.markdown b/source/_integrations/trafikverket_train.markdown
index 705ab76f91f7..d1e283c026e9 100644
--- a/source/_integrations/trafikverket_train.markdown
+++ b/source/_integrations/trafikverket_train.markdown
@@ -36,6 +36,8 @@ Retrieve train departure information from [Trafikverket](https://www.trafikverke
The next departure is calculated from actual, estimated, and planned to provide the most accurate information about departure.
+If a specific departure time has not been set, the integration will return the 3 next departures.
+
You can filter based on product descriptions such as `SJ Regionaltåg` to only see specific trains between the two stations.
## Prerequisites
diff --git a/source/_integrations/transmission.markdown b/source/_integrations/transmission.markdown
index 81cfaa1d6aeb..f2b88eef5bf4 100644
--- a/source/_integrations/transmission.markdown
+++ b/source/_integrations/transmission.markdown
@@ -63,8 +63,8 @@ Example of an automation that notifies on successful download and removes the to
```yaml
- alias: "Notify and remove completed torrent"
trigger:
- platform: event
- event_type: transmission_downloaded_torrent
+ - platform: event
+ event_type: transmission_downloaded_torrent
action:
- service: notify.telegram_notifier
data:
@@ -84,40 +84,40 @@ All Transmission services require integration `entry_id`. To find it, go to Deve
### Service `add_torrent`
-Adds a new torrent to download. It can either be a URL (HTTP, HTTPS or FTP), magnet link or a local file (make sure that the path is [white listed](/docs/configuration/basic/#allowlist_external_dirs)).
+Adds a new torrent to download. It can either be a URL (HTTP, HTTPS or FTP), magnet link or a local file (make sure that the path is [white listed](/integrations/homeassistant/#allowlist_external_dirs)).
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entry_id` | no | The integration entry_id
-| `torrent` | no | Torrent to download
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------ |
+| `entry_id` | no | The integration entry_id |
+| `torrent` | no | Torrent to download |
### Service `remove_torrent`
Removes a torrent from the client.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entry_id` | no | The integration entry_id
-| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors
-| `delete_data` | yes | Delete torrent data (Default: false)
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
+| `entry_id` | no | The integration entry_id |
+| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors |
+| `delete_data` | yes | Delete torrent data (Default: false) |
### Service `start_torrent`
Starts a torrent.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entry_id` | no | The integration entry_id
-| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
+| `entry_id` | no | The integration entry_id |
+| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors |
### Service `stop_torrent`
Stops a torrent.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entry_id` | no | The integration entry_id
-| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
+| `entry_id` | no | The integration entry_id |
+| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors |
## Templating
diff --git a/source/_integrations/trend.markdown b/source/_integrations/trend.markdown
index f4818ccd3625..776db5da820e 100644
--- a/source/_integrations/trend.markdown
+++ b/source/_integrations/trend.markdown
@@ -3,6 +3,7 @@ title: Trend
description: Instructions on how to integrate Trend binary sensors into Home Assistant.
ha_category:
- Binary sensor
+ - Helper
- Utility
ha_release: 0.28
ha_iot_class: Calculated
@@ -10,7 +11,8 @@ ha_quality_scale: internal
ha_domain: trend
ha_platforms:
- binary_sensor
-ha_integration_type: integration
+ha_config_flow: true
+ha_integration_type: helper
ha_codeowners:
- '@jpbede'
---
@@ -21,7 +23,19 @@ at least two updates of the underlying sensor to establish a trend.
Thus it can take some time to show an accurate state. It can be useful
as part of automations, where you want to base an action on a trend.
-## Configuration
+{% include integrations/config_flow.md %}
+{% configuration_basic %}
+Name:
+ description: The name the sensor should have. You can change it again later.
+Entity that the sensor tracks:
+ description: The sensor entity that is to be tracked and whose trend is to be detected.
+Attribute of the entity that the sensor tracks:
+ description: The attribute of the previous selected sensor entity that this sensor tracks. If no attribute is specified then the sensor will track the state.
+Invert the result:
+ description: Invert the result. A `true` value would mean descending rather than ascending.
+{% endconfiguration_basic %}
+
+### YAML Configuration
To enable Trend binary sensors in your installation,
add the following to your `configuration.yaml` file:
diff --git a/source/_integrations/tts.markdown b/source/_integrations/tts.markdown
index f676fc5e4c24..e0258a107865 100644
--- a/source/_integrations/tts.markdown
+++ b/source/_integrations/tts.markdown
@@ -12,12 +12,25 @@ ha_quality_scale: internal
ha_platforms:
- notify
ha_integration_type: entity
+related:
+ - url: https://www.home-assistant.io/integrations/#text-to-speech
+ title: List of integrations using the TTS integration
+ - url: https://www.nabucasa.com/config/tts/
+ title: TTS with Home Assistant Cloud
+ - url: https://www.home-assistant.io/integrations/google_translate/
+ title: Google Translate TTS
+ - url: https://www.home-assistant.io/integrations/microsoft/
+ title: Microsoft TTS
+ - url: https://www.home-assistant.io/voice_control/
+ title: Home Assistant Assist
---
Text-to-speech (TTS) enables Home Assistant to speak to you.
{% include integrations/building_block_integration.md %}
+See all [TTS integrations](https://www.home-assistant.io/integrations/#text-to-speech) using this building block for ways to use it in your automations. If you are using the Home Assistant voice assistant, [Assist](https://www.home-assistant.io/voice_control/), Assist is using TTS when replying to you. Another way to use TTS is by using [TTS with Home Assistant Cloud](https://www.nabucasa.com/config/tts/).
+
## Services
### Service speak
@@ -120,7 +133,7 @@ $ curl -X POST -H "Authorization: Bearer " \
-Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/docs/configuration/basic/).
+Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/integrations/homeassistant/#external_url).
diff --git a/source/_integrations/tuya.markdown b/source/_integrations/tuya.markdown
index ea359545ff3c..65dc17a3156d 100644
--- a/source/_integrations/tuya.markdown
+++ b/source/_integrations/tuya.markdown
@@ -50,134 +50,23 @@ The Tuya integration integrates all Powered by Tuya devices you have added to th
All Home Assistant platforms are supported by the Tuya integration, except the lock and remote platform.
-## Configuration of the Tuya IoT Platform
+## Prerequisites
-### Prerequisites
+You need to have the Tuya Smart or Smart Life app installed, with an account created and
+at least one device added to that account.
-- Your devices need first to be added in the [Tuya Smart or Smart Life app](https://developer.tuya.com/docs/iot/tuya-smart-app-smart-life-app-advantages?id=K989rqa49rluq#title-1-Download).
-- You will also need to create an account in the [Tuya IoT Platform](https://iot.tuya.com/).
-This is a separate account from the one you made for the app. You cannot log in with your app's credentials.
+### Obtaining User Code for sign-in
-### Create a project
+To sign-in, you will need to get your **User Code** from the Smart Life /
+Tuya Smart app. You can find it by opening the app and:
-1. Log in to the [Tuya IoT Platform](https://iot.tuya.com/).
-2. In the left navigation bar, click `Cloud` > `Development`.
-3. On the page that appears, click `Create Cloud Project`.
-4. In the `Create Cloud Project` dialog box, configure `Project Name`, `Description`, `Industry`, and `Data Center`. For the `Development Method` field, select `Smart Home` from the dropdown list. For the `Data Center` field, select the zone you are located in. Refer to the country/data center mapping list [here](https://github.com/tuya/tuya-home-assistant/blob/main/docs/regions_dataCenters.md) to choose the right data center for the country you are in.
- ![](/images/integrations/tuya/image_001.png)
-5. Click `Create` to continue with the project configuration.
-6. In Configuration Wizard, make sure you add `Industry Basic Service`, `Smart Home Basic Service` and `Device Status Notification` APIs. The list of API should look like this:
- ![](/images/integrations/tuya/image_002new.png)
-7. Click `Authorize`.
-
-### Link devices by app account
-
-1. Navigate to the `Devices` tab.
-2. Click `Link Tuya App Account` > `Add App Account`.
- ![](/images/integrations/tuya/image_003.png)
-3. Scan the QR code that appears using the `Tuya Smart` app or `Smart Life` app using the 'Me' section of the app.
- ![](/images/integrations/tuya/image_004.png)
-4. Click `Confirm` in the app.
-5. To confirm that everything worked, navigate to the `All Devices` tab. Here you should be able to find the devices from the app.
-6. If zero devices are imported, try changing the DataCenter and check the account used is the "Home Owner".
- You can change DataCenter by clicking the Cloud icon on the left menu, then clicking the Edit link in the Operation column for your newly created project. You can change DataCenter in the popup window.
-
-![](/images/integrations/tuya/image_005.png)
-
-### Get authorization key
-
-Click the created project to enter the `Project Overview` page and get the `Authorization Key`. You will need these for setting up the integration. in the next step.
-
-![](/images/integrations/tuya/image_006.png)
+1. On the tab bar, select **Me**.
+2. Select the **⚙️ (gear)** icon in the top-right corner.
+3. Tap **Account and Security**.
+4. At the bottom, **User Code** will be shown; you need to when setting up this integration.
{% include integrations/config_flow.md %}
-{% configuration_basic %}
- Country:
- description: Choose the country you picked when signing up.
-
- "Tuya IoT Access ID":
- description: Go to your cloud project on [Tuya IoT Platform](https://iot.tuya.com/). Find the **Access ID** under [Authorization Key](#get-authorization-key) on the **Project Overview** tab.
-
- "Tuya IoT Access Secret":
- description: Go to your cloud project on [Tuya IoT Platform](https://iot.tuya.com/). Find the **Access Secret** under [Authorization Key](#get-authorization-key) on the **Project Overview** tab.
-
- Account:
- description: Tuya Smart or Smart Life **app** account, not your Tuya IoT platform account.
-
- Password:
- description: The password of your **app** account, not your Tuya IoT platform account.
-
-{% endconfiguration_basic %}
-
-## Error codes and troubleshooting
-
-{% configuration_basic %}
-
-If no devices show up in Home Assistant:
- description: >
- - First, make sure the devices show up in Tuya's cloud portal under the devices tab.
-
- - In the Tuya IoT configuration cloud portal, you must NOT link your non-developer account under the "Users" tab. Doing so will work, and you can even still add the devices under the devices tab, but the API will send 0 devices down to Home Assistant. You must only link the account under the Devices->"Link Tuya App Account". If it shows up on the users tab, be sure to delete it.
-
- - Your region may not be correctly set.
-
- - Make sure your cloud plan does not need to be renewed (see error #28841002 on this page).
-
-
-"1004: sign invalid":
- description: Incorrect Access ID or Access Secret. Please refer to the **Configuration** part above.
-
-"1106: permission deny":
- description: >
- - App account not linked with cloud project: On the [Tuya IoT Platform](https://iot.tuya.com/cloud/), you have linked devices by using Tuya Smart or Smart Life app in your cloud project. For more information, see [Link devices by app account](https://developer.tuya.com/docs/iot/Platform_Configuration_smarthome?id=Kamcgamwoevrx#title-3-Link%20devices%20by%20app%20account).
-
- - Incorrect username or password: Enter the correct account and password of the Tuya Smart or Smart Life app in the **Account** and **Password** fields (social login, which the Tuya Smart app allows, may not work, and thus should be avoided for use with the Home Assistant integration). Note that the app account depends on which app (Tuya Smart or Smart Life) you used to link devices on the [Tuya IoT Platform](https://iot.tuya.com/cloud/).
-
- - Incorrect country. You must select the region of your account of the Tuya Smart app or Smart Life app.
-
-"1100: param is empty":
- description: Empty parameter of username or app. Please fill the parameters refer to the **Configuration** part above.
-
-"2406: skill id invalid":
- description: >
- - Make sure you use the **Tuya Smart** or **SmartLife** app account to log in. Also, choose the right data center endpoint related to your country region. For more details, please check [Country Regions and Data Center](https://github.com/tuya/tuya-home-assistant/blob/main/docs/regions_dataCenters.md).
-
- - Your cloud project on the [Tuya IoT Development Platform](https://iot.tuya.com) should be created after May 25, 2021. Otherwise, you need to create a new project.
-
- - This error can often be resolved by unlinking the app from the project (`Devices` tab > `Link Tuya App Account` > `Unlink`) and [relinking it again](#link-devices-by-app-account).
-
-"28841105: No permissions. This project is not authorized to call this API":
- description: >
- Some APIs are not authorized, please [Subscribe](https://developer.tuya.com/docs/iot/applying-for-api-group-permissions?id=Ka6vf012u6q76#title-2-Subscribe%20to%20APIs) then [Authorize](https://developer.tuya.com/docs/iot/applying-for-api-group-permissions?id=Ka6vf012u6q76#title-3-Grant%20a%20project%20access%20to%20API%20calls). The following APIs must be subscribed for this tutorial:
-
- - Device Status Notification
-
- - Industry Basic Service
-
- - Smart Home Basic Service
-
- - Authorization
-
- - IoT Core
-
- - Smart Home Scene Linkage
-
- - IoT Data Analytics
-
-"28841002: No permissions. Your subscription to cloud development plan has expired":
- description: Your subscription to Tuya cloud development **IoT Core Service** resources has expired, please [extend it](https://iot.tuya.com/cloud/products/detail?abilityId=1442730014117204014) in `Cloud` > `Cloud Services` > `IoT Core` > `My Subscriptions` tab > `Subscribed Resources` > `IoT Core` > `Extend Trial Period`.
-
-{% endconfiguration_basic %}
-
## Scenes
Tuya supports scenes in their app. These allow triggering some of the more complex modes of various devices such as light changing effects. Scenes created in the Tuya app will automatically appear in the Scenes list in Home Assistant the next time the integration updates.
-
-## Related documents
-
-- [Tuya Integration Documentation Page](https://github.com/tuya/tuya-home-assistant)
-- [Supported Tuya Device Category](https://github.com/tuya/tuya-home-assistant/blob/main/docs/supported_devices.md)
-- [Error Code and Troubleshooting](https://github.com/tuya/tuya-home-assistant/blob/main/docs/error_code.md)
-- [Countries/Regions and Tuya Data Center](https://github.com/tuya/tuya-home-assistant/blob/main/docs/regions_dataCenters.md)
-- [FAQs](https://github.com/tuya/tuya-home-assistant/blob/main/docs/faq.md)
diff --git a/source/_integrations/twilio.markdown b/source/_integrations/twilio.markdown
index 1047912769d1..22e8cdf8afef 100644
--- a/source/_integrations/twilio.markdown
+++ b/source/_integrations/twilio.markdown
@@ -41,11 +41,14 @@ auth_token:
After configuring the base Twilio integration, add and configure either or both of the [Twilio SMS](/integrations/twilio_sms) and [Twilio Phone](/integrations/twilio_call) integrations to utilize the notification functionality.
-To be able to receive events from Twilio, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic) in Home Assistant.
+To be able to receive events from Twilio, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/integrations/homeassistant/#external_url) in Home Assistant.
To set it up, go to the integrations page in the configuration screen and find Twilio. Click on configure. Follow the instructions on the screen to configure Twilio.
-You will get a URL of the following format: `https:///api/webhook/9940e99a26fae4dcf6fe0a478124b6b58b578ea4c55c9a584beb1c9f5057bb91`. To generate inbound events, you have to configure your webhooks with [Twilio](https://www.twilio.com/docs/glossary/what-is-a-webhook).
+You will get a URL of the following format: `https:///api/webhook/9940e99a26fae4dcf6fe0a478124b6b58b578ea4c55c9a584beb1c9f5057bb91`. To generate inbound events, you have to configure your [webhooks with Twilio](https://www.twilio.com/docs/glossary/what-is-a-webhook):
+ - Go to your Twilio [console](https://www.twilio.com/console).
+ - Under **phone numbers** > **manage** > **active numbers** > (select number) > **configure**.
+ - Paste your URL in the webhook URL box for **A call comes in** and **A message comes in** and save.
Events coming in from Twilio will be available as events in Home Assistant and are fired as `twilio_data_received`. The data specified by Twilio will be available as the event data. You can use this event to trigger automations.
@@ -68,3 +71,23 @@ automation:
```
The above opens the garage door when the number `+1XXXXXXXXXXX` calls `+1YYYYYYYYYYY` (considering that `+1YYYYYYYYYYY` is one of your numbers registered in Twilio).
+
+An example of an SMS handler:
+
+```yaml
+alias: Twilio incoming
+trigger:
+ - platform: event
+ event_type: twilio_data_received
+action:
+ - variables:
+ sender: |
+ {{ trigger.event.data.From }}
+ message: |
+ {{ trigger.event.data.Body }}
+ - service: notify.persistent_notification
+ data:
+ message: |
+ incoming twilio message from {{sender}}: {{ message }}
+ all event data: {{ trigger.event.data }}
+```
diff --git a/source/_integrations/twitch.markdown b/source/_integrations/twitch.markdown
index 2e07e18c2f48..f6dcd84459ba 100644
--- a/source/_integrations/twitch.markdown
+++ b/source/_integrations/twitch.markdown
@@ -18,6 +18,10 @@ The Twitch integration will allow you to monitor [Twitch](https://www.twitch.tv/
## Get Twitch application credentials
-Create a new app at **Register Your Application** in the [Twitch developer portal](https://dev.twitch.tv/console/apps). Enter `https://my.home-assistant.io/redirect/oauth` in the **OAuth Redirect URL** field. Then, get the **Client ID** and **Client secret** from the new application.
+Create a new app at **Register Your Application** in the [Twitch developer portal](https://dev.twitch.tv/console/apps):
+
+- Enter a **Name** for your app. Note that it needs to be unique all over Twitch.
+- Enter `https://my.home-assistant.io/redirect/oauth` in the **OAuth Redirect URL** field.
+- Get the **Client ID** and **Client secret** from the new application, you need them to complete the integration setup in Home Assistant.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/ubiwizz.markdown b/source/_integrations/ubiwizz.markdown
index bfe5429960b8..f5e618aee617 100644
--- a/source/_integrations/ubiwizz.markdown
+++ b/source/_integrations/ubiwizz.markdown
@@ -27,6 +27,7 @@ ha_codeowners:
- '@vlebourl'
- '@tetienne'
- '@nyroDev'
+ - '@tronix117'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown
index ed2c4ba69c85..fd7752e55a94 100644
--- a/source/_integrations/unifi.markdown
+++ b/source/_integrations/unifi.markdown
@@ -34,6 +34,7 @@ There is currently support for the following device types within Home Assistant:
- [Button](#button)
- [Image](#image)
- [Presence detection](#presence-detection)
+- [Services](#services)
- [Switch](#switch)
- [Sensor](#sensor)
- [Firmware updates](#firmware-updates)
@@ -72,13 +73,16 @@ 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.
## Presence detection
-This platform allows you to detect presence by looking at devices connected to a [Ubiquiti](https://ui.com/) [UniFi Network](https://ui.com/consoles) application. By default devices are marked as away 300 seconds after they were last seen.
+This platform allows you to detect presence by looking at devices connected to a [Ubiquiti](https://ui.com/) [UniFi Network](https://ui.com/cloud-gateways) application. By default devices are marked as away 300 seconds after they were last seen.
### Troubleshooting and Time Synchronization
@@ -152,10 +156,34 @@ Get entities reporting the general temperature of a UniFi Network device.
Get entities reporting the current state of a UniFi Network device.
+### Device CPU
+
+Get entities reporting the current CPU utilization of a UniFi Network device.
+
+### Device memory
+
+Get entities reporting the current memory utilization of a UniFi Network device.
+
+### Port Bandwidth sensor
+
+Get entities reporting receiving and transmitting bandwidth per port. These sensors are disabled by default. To enable the bandwidth sensors, on the UniFi integration page, select **Configure**, go to page 3/3 and enable the bandwidth sensors.
+
## 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.
+
+## Removing a device in Home Assistant
+
+Integration populates both UniFi devices as well as network clients into Home Assistant. In certain edge cases entities are left lingering even if they are not present in UniFi network anymore. This can lead to an accumulation of entries in the device registry.
+
+To manually remove a device entry, go to the Device Info page and select "Delete" from the Device Info menu.
+
+Only clients/devices which are no longer known by UniFi since the startup or reload of the UniFi integration can be removed.
+
+![4d4ca937-17bb-4902-9949-2ea83e3c2c0c](https://github.com/home-assistant/home-assistant.io/assets/21991867/c926f5c7-18af-47b5-b888-30cc8511d76a)
+
+
## Debugging integration
If you have problems with the UniFi Network application or {% term integration %} you can add debug prints to the log.
diff --git a/source/_integrations/unifi_direct.markdown b/source/_integrations/unifi_direct.markdown
index ce42a8a3b380..44b835b7b6bd 100644
--- a/source/_integrations/unifi_direct.markdown
+++ b/source/_integrations/unifi_direct.markdown
@@ -9,6 +9,8 @@ ha_domain: unifi_direct
ha_platforms:
- device_tracker
ha_integration_type: integration
+ha_codeowners:
+ - '@tofuSCHNITZEL'
---
This platform allows you to detect presence by looking at devices connected to a [UniFi AP](https://www.ui.com/products/#unifi). This device tracker differs from [Ubiquiti UniFi](/integrations/unifi) because it doesn't require the UniFi Network application.
diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown
index 5eb34fc687dd..93dfad061be0 100644
--- a/source/_integrations/unifiprotect.markdown
+++ b/source/_integrations/unifiprotect.markdown
@@ -53,11 +53,11 @@ This {% term integration %} supports all UniFi OS Consoles that can run UniFi Pr
- Any UniFi "Dream" device (**[UDMPRO](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/udm-pro)**, **[UDR](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/dream-router)**, or **[UDMSE](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/dream-machine-se)**), _except the base UniFi Dream Machine/UDM_
- UniFi Cloud Key Gen2 Plus (**[UCKP](https://store.ui.com/collections/unifi-protect-nvr/products/unifi-cloudkey-plus)**) firmware version v2.0.24+
-UCKP with Firmware v1.x **do NOT run UniFi OS**, you must upgrade to firmware `[v2.0.24](https://community.ui.com/releases/UniFi-Cloud-Key-Firmware-2-0-24/b6684f1e-8542-4660-bc0b-74e0634448e8)` or newer.
+UCKP with Firmware v1.x **do NOT run UniFi OS**, you must upgrade to firmware [`v2.0.24`](https://community.ui.com/releases/UniFi-Cloud-Key-Firmware-2-0-24/b6684f1e-8542-4660-bc0b-74e0634448e8) or newer.
### Software support
-The absolute **minimal** software version is `[v1.20.0](https://community.ui.com/releases/UniFi-Protect-Application-1-20-0/d43c0905-3fb4-456b-a7ca-73aa830cb011)` for UniFi Protect. If you have an older version, you will get errors trying to set up the integration. However, the general advice is the latest 2 minor versions of UniFi Protect and hardware supported by those are supported.
+The absolute **minimal** software version is [`v1.20.0`](https://community.ui.com/releases/UniFi-Protect-Application-1-20-0/d43c0905-3fb4-456b-a7ca-73aa830cb011) for UniFi Protect. If you have an older version, you will get errors trying to set up the integration. However, the general advice is the latest 2 minor versions of UniFi Protect and hardware supported by those are supported.
@@ -262,6 +262,15 @@ Use to set the paired doorbell(s) with a smart chime.
| `device_id` | No | The device ID of the Chime you want to pair or unpair doorbells to. |
| `doorbells` | Yes | A target selector for any number of doorbells you want to pair to the chime. No value means unpair all. |
+### Service unifiprotect.remove_privacy_zone
+
+Use to remove a privacy zone from a camera.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------- |
+| `device_id` | No | Camera you want to remove privacy zone from. |
+| `name` | No | The name of the zone to remove. |
+
## Views
The {% term integrations %} provides two proxy views to proxy media content from your Home Assistant instance so you can access thumbnails and video clips from within the context of Home Assistant without having to expose your UniFi Protect NVR Console. As with the media identifiers, all IDs are UniFi Protect IDs as they may not map to specific Home Assistant entities depending on how you have configured your {% term integrations %}.
@@ -287,7 +296,7 @@ The default settings on the stream integration will give you a 5-15+ second dela
### Cannot play audio to speakers
-Unlike with many other things, playing audio to your speakers requires your Home Assistant to be able to reach your camera directly. Specifically via port `tcp/7004`. You can [enable debug logging](#enabling-debug-logging) and it will output the full FFmpeg command that will be run and the output from FFmpeg to help you troubleshoot why audio is not playing to the device.
+Unlike with many other things, playing audio to your speakers requires your Home Assistant to be able to reach your camera directly. Specifically via port `tcp/7004`. You can [enable debug logging](/docs/configuration/troubleshooting/#enabling-debug-logging) and it will output the full FFmpeg command that will be run and the output from FFmpeg to help you troubleshoot why audio is not playing to the device.
### Liveview options for viewer missing options or out of date
diff --git a/source/_integrations/universal.markdown b/source/_integrations/universal.markdown
index 5838f0199e36..b2fb1e6959d1 100644
--- a/source/_integrations/universal.markdown
+++ b/source/_integrations/universal.markdown
@@ -327,6 +327,61 @@ media_player:
{% endraw %}
+### Denon AVR & HEOS
+
+This media player combines the media players provided by the [Denon AVR](/integrations/denonavr/) and [HEOS](/integrations/heos/) integrations.
+
+Features:
+- Volume control via Denon entity (might be more fine-granular than HEOS volume control)
+- ON/OFF button via Denon entity (not provided by HEOS media player)
+- Sound mode selector via Denon entity (not provided by HEOS media player)
+- Album art & Metadata via HEOS entity (not provided by Denon media player)
+
+The complete configuration is:
+
+{% raw %}
+
+```yaml
+media_player:
+ - platform: universal
+ name: Denon
+ unique_id: denon_universal_remote
+ device_class: receiver
+ children:
+ - media_player.denon_avr_x2700h # Denon AVR Integration entity
+ - media_player.denon_avr_x2700h_heos # Denon HEOS Integration entity
+ browse_media_entity: media_player.denon_avr_x2700h_heos
+ commands:
+ turn_off:
+ service: media_player.turn_off
+ data:
+ entity_id: media_player.denon_avr_x2700h
+ turn_on:
+ service: media_player.turn_on
+ data:
+ entity_id: media_player.denon_avr_x2700h
+ volume_up:
+ service: media_player.volume_up
+ data:
+ entity_id: media_player.denon_avr_x2700h
+ volume_down:
+ service: media_player.volume_down
+ data:
+ entity_id: media_player.denon_avr_x2700h
+ select_sound_mode:
+ service: media_player.select_sound_mode
+ target:
+ entity_id: media_player.denon_avr_x2700h
+ data:
+ sound_mode: "{{ sound_mode }}"
+ attributes:
+ sound_mode: media_player.denon_avr_x2700h|sound_mode
+ sound_mode_raw: media_player.denon_avr_x2700h|sound_mode_raw
+ sound_mode_list: media_player.denon_avr_x2700h|sound_mode_list
+```
+
+{% endraw %}
+
### Override active children
This example shows how you can use `active_child_template`:
diff --git a/source/_integrations/upcloud.markdown b/source/_integrations/upcloud.markdown
index a2a6bc91deef..19ea4a6ac88f 100644
--- a/source/_integrations/upcloud.markdown
+++ b/source/_integrations/upcloud.markdown
@@ -17,7 +17,7 @@ ha_platforms:
ha_integration_type: integration
---
-The **Upcloud** {% term integration %} allows you to access the information about your [UpCloud](https://upcloud.com/) servers from Home Assistant.
+The **UpCloud** {% term integration %} allows you to access the information about your [UpCloud](https://upcloud.com/) servers from Home Assistant.
There is currently support for the following device types within Home Assistant:
diff --git a/source/_integrations/update.mqtt.markdown b/source/_integrations/update.mqtt.markdown
index db85aca9fe9f..fbc6b8906170 100644
--- a/source/_integrations/update.mqtt.markdown
+++ b/source/_integrations/update.mqtt.markdown
@@ -73,7 +73,7 @@ device:
required: false
type: string
connections:
- description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.'
+ description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.'
required: false
type: list
hw_version:
@@ -96,6 +96,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -110,10 +114,8 @@ device:
type: string
device_class:
description: The [type/class](/integrations/update/#device-classes) of the update to set the icon in the frontend. The `device_class` can be `null`.
- default: None
required: false
type: device_class
- default: None
enabled_by_default:
description: Flag which defines if the entity should be enabled when first added.
required: false
@@ -128,7 +130,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
entity_picture:
description: "Picture URL for the entity."
required: false
diff --git a/source/_integrations/uprise_smart_shades.markdown b/source/_integrations/uprise_smart_shades.markdown
index bb8d689381c7..1cb707f2f8ef 100644
--- a/source/_integrations/uprise_smart_shades.markdown
+++ b/source/_integrations/uprise_smart_shades.markdown
@@ -1,12 +1,12 @@
---
title: Uprise Smart Shades
-description: Connect and control your Uprise Smart Shades devices using the Motion Blinds integration
+description: Connect and control your Uprise Smart Shades devices using the Motionblinds integration
ha_category:
- Cover
ha_domain: uprise_smart_shades
ha_integration_type: virtual
ha_supporting_domain: motion_blinds
-ha_supporting_integration: Motion Blinds
+ha_supporting_integration: Motionblinds
ha_release: 2020.12
ha_codeowners:
- '@starkillerOG'
diff --git a/source/_integrations/utility_meter.markdown b/source/_integrations/utility_meter.markdown
index 12fbb5cf3856..b21a08b20549 100644
--- a/source/_integrations/utility_meter.markdown
+++ b/source/_integrations/utility_meter.markdown
@@ -14,7 +14,6 @@ ha_domain: utility_meter
ha_platforms:
- select
- sensor
-ha_config_flow: true
ha_integration_type: helper
---
@@ -59,6 +58,10 @@ Periodically resetting:
description: >
Enable this if the source sensor state is expected to reset to 0, for example, a smart plug that resets on boot.
When this option is disabled (for example, if the source sensor is a domestic utility meter that never resets during the device's lifetime), the _difference_ between the new value and the last valid value is added to the utility meter, which avoids the loss of a meter reading after the source sensor becomes available after being unavailable.
+Sensor always available:
+ description: >
+ If activated, the sensor will always be available with the last totalized value, even if the source entity is unavailable or unknown.
+ You need to understand that with this option activated, when the source entity becomes unavailable, the utility meter sensor will have the last totalized value and will not change until the source entity returns to a valid state.
{% endconfiguration_basic %}
If the meter reset cycle and reset offsets are to limited for your use case,
@@ -126,6 +129,11 @@ periodically_resetting:
required: false
default: true
type: boolean
+always_available:
+ description: If activated, the sensor will always be available with the last totalized value, even if the source entity is unavailable or unknown.
+ required: false
+ default: false
+ type: boolean
{% endconfiguration %}
diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown
index 32a665054fa3..1a902f5a6f11 100644
--- a/source/_integrations/vacuum.mqtt.markdown
+++ b/source/_integrations/vacuum.mqtt.markdown
@@ -88,6 +88,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -176,11 +180,6 @@ retain:
required: false
type: boolean
default: false
-schema:
- description: The schema to use. Must be `state`.
- required: false
- type: string
- default: legacy
send_command_topic:
description: The MQTT topic to publish custom commands to the vacuum.
required: false
@@ -190,7 +189,7 @@ set_fan_speed_topic:
required: false
type: string
state_topic:
- description: "The MQTT topic subscribed to receive state messages from the vacuum. Messages received on the `state_topic` must be a valid JSON dictionary, with a mandatory `state` key and optionally `battery_level` and `fan_speed` keys as shown in the [example](#state-mqtt-protocol)."
+ description: "The MQTT topic subscribed to receive state messages from the vacuum. Messages received on the `state_topic` must be a valid JSON dictionary, with a mandatory `state` key and optionally `battery_level` and `fan_speed` keys as shown in the [example](#configuration-example)."
required: false
type: string
supported_features:
diff --git a/source/_integrations/vallox.markdown b/source/_integrations/vallox.markdown
index 3e76075e3ece..66479c717028 100644
--- a/source/_integrations/vallox.markdown
+++ b/source/_integrations/vallox.markdown
@@ -11,6 +11,7 @@ ha_iot_class: Local Polling
ha_domain: vallox
ha_platforms:
- binary_sensor
+ - date
- fan
- number
- sensor
@@ -19,20 +20,40 @@ ha_codeowners:
- '@andre-richter'
- '@slovdahl'
- '@viiru-'
+ - '@yozik04'
ha_integration_type: integration
---
The **Vallox** {% term integration %} lets you control any Vallox ventilation unit that is supported by the [vallox_websocket_api](https://github.com/yozik04/vallox_websocket_api) (follow the link for a list of supported units).
-The **fan** platform of this {% term integration %} allows you to turn on/off the complete unit via the toggle switch, control fan speed and select a ventilation profile.
+{% include integrations/config_flow.md %}
-The **sensor** platform exposes a number of relevant metrics like fan speed, various air temperatures, and humidity.
+## Platforms
-The **switch** platform allows locking heat recovery bypass.
+### Fan
-The **number** platform allows to control supply air temperatures.
+The fan platform of this integration allows you to control the entire unit. You can turn the unit on/off using the toggle switch, adjust the fan speed, and select a ventilation profile.
+
+### Sensor
+
+The sensor platform allows you to monitor various metrics such as fan speeds, air temperatures, humidity, remaining filter life, cell state, and more.
+
+### Binary sensor
+
+The binary sensor platform allows you to monitor the status of the post heater.
+
+### Switch
+
+The switch platform allows you to lock the heat recovery bypass.
+
+### Number
+
+The number platform gives you control over the supply air temperatures.
+
+### Date
+
+The date platform allows you to set the filter change date.
-{% include integrations/config_flow.md %}
## Profile switching
diff --git a/source/_integrations/valve.mqtt.markdown b/source/_integrations/valve.mqtt.markdown
index 46caf2e55f53..5c546886b985 100644
--- a/source/_integrations/valve.mqtt.markdown
+++ b/source/_integrations/valve.mqtt.markdown
@@ -134,6 +134,10 @@ device:
description: The name of the device.
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: Suggest an area if the device isn’t in one yet.
required: false
@@ -148,7 +152,6 @@ device:
type: string
device_class:
description: Sets the [class of the device](/integrations/valve/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`.
- default: None
required: false
type: string
enabled_by_default:
@@ -165,7 +168,6 @@ entity_category:
description: "The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity."
required: false
type: string
- default: None
icon:
description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity."
required: false
diff --git a/source/_integrations/velux.markdown b/source/_integrations/velux.markdown
index dbec481400fe..430906870ca8 100644
--- a/source/_integrations/velux.markdown
+++ b/source/_integrations/velux.markdown
@@ -5,9 +5,11 @@ ha_category:
- Cover
- Scene
ha_release: 0.49
+ha_config_flow: true
ha_iot_class: Local Polling
ha_codeowners:
- '@Julius2342'
+ - '@DeerMaximum'
ha_domain: velux
ha_platforms:
- cover
@@ -26,27 +28,14 @@ There is currently support for the following device types within Home Assistant:
- Light
- Scene
-## Configuration
+{% include integrations/config_flow.md %}
-A `velux` section must be present in the `configuration.yaml` file and contain the following options as required:
+During configuration, you will be asked for a hostname and password:
-```yaml
-# Example configuration.yaml entry
-velux:
- host: IP_ADDRESS
- password: VELUX_PASSWORD
-```
+- Hostname: enter the IP address of the KLF 200 gateway.
+- Password: enter the password of the gateway's wireless access point (printed on the underside - **not** the web login password).
-{% configuration %}
-host:
- description: The IP address or hostname of the KLF 200 to use.
- required: true
- type: string
-password:
- description: The password of the KLF 200 interface. Note that this is the same as the Wi-Fi password (in the upper box on the back), *not* the password for the web login.
- required: true
- type: string
-{% endconfiguration %}
+You must complete the configuration within 5 minutes of rebooting the KLF 200 gateway while the access point is still available.
## Services
diff --git a/source/_integrations/verisure.markdown b/source/_integrations/verisure.markdown
index 82bb1bb21313..cb57920dab8f 100644
--- a/source/_integrations/verisure.markdown
+++ b/source/_integrations/verisure.markdown
@@ -82,3 +82,12 @@ automation:
| code | Lock was unlocked by exterior code |
| auto | Lock was locked/unlocked automatically by Verisure rule |
| remote | Lock was locked/unlocked automatically by Verisure App |
+
+## Limitations and known issues
+
+Some users have reported that this integration currently doesn't work in the following countries:
+
+- France
+- Ireland
+- Italy
+- Sweden
diff --git a/source/_integrations/vesync.markdown b/source/_integrations/vesync.markdown
index 20cbc05459e1..4ac1d489d52b 100644
--- a/source/_integrations/vesync.markdown
+++ b/source/_integrations/vesync.markdown
@@ -12,6 +12,7 @@ ha_codeowners:
- '@markperdue'
- '@webdjoe'
- '@thegardenmonkey'
+ - '@cdnninja'
ha_domain: vesync
ha_platforms:
- diagnostics
@@ -61,6 +62,8 @@ This {% term integration %} supports devices controllable by the VeSync App. Th
- Core 300S: Smart True HEPA Air Purifier
- Core 400S: Smart True HEPA Air Purifier
- Core 600S: Smart True HEPA Air Purifier
+- Vital 100S Smart True HEPA Air Purifier (LAP-V102S-WUS)
+- Vital 200S Smart True HEPA Air Purifier (LAP-V201S-WUS)
- LEVOIT Smart Wifi Air Purifier (LV-PUR131S)
## Prerequisite
diff --git a/source/_integrations/vicare.markdown b/source/_integrations/vicare.markdown
index bdd639d6bbfe..43b5a2d53c91 100644
--- a/source/_integrations/vicare.markdown
+++ b/source/_integrations/vicare.markdown
@@ -34,17 +34,16 @@ There is currently support for the following device types within Home Assistant:
{% include integrations/config_flow.md %}
-Set `username`and `password` to your Viessmann Developer Portal login credentials.
-The required Client ID can be obtained as follows:
-1. Register and login in the [Viessmann Developer Portal](https://developer.viessmann.com). Use the same account as the one you registered your device with in ViCare.
-2. In the menu navigate to API Keys.
-3. Create a new OAuth client using the following data:
- ```txt
- Name: PyViCare
- Google reCAPTCHA: Disabled
- Redirect URIs: vicare://oauth-callback/everest
- ```
-4. Copy the Client ID from the Viessmann portal and enter this in the API Key field in Home Assistant.
+Use your ViCare app login credentials for *username* and *password*.
+
+The required *client ID* can be obtained from the [Viessmann Developer Portal](https://app.developer.viessmann.com/):
+1. Log in with **your existing ViCare app username and password**.
+2. On the developer dashboard, select **Add** in the **Clients** section.
+3. Create a new client using the following data:
+ - Name: `HomeAssistant`
+ - Google reCAPTCHA: Disabled
+ - Redirect URIs: `vicare://oauth-callback/everest`
+4. Find the **Client ID** in the **Clients** section on the developer dashboard.
The `heating_type` can either be `auto` to automatically find the most suitable type for your device or one of `gas`, `oil`, `pellets`, `heatpump`, `fuelcell`, `hybrid`.
diff --git a/source/_integrations/vivotek.markdown b/source/_integrations/vivotek.markdown
index f1eb47af9be4..1fade9eb67fc 100644
--- a/source/_integrations/vivotek.markdown
+++ b/source/_integrations/vivotek.markdown
@@ -108,11 +108,11 @@ Available services: `enable_motion_detection`, `disable_motion_detection`, `snap
Play a live stream from a camera to selected media player(s). Requires [`stream`](/integrations/stream) {% term integration %} to be set up.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name of {% term entity %} to fetch stream from, e.g., `camera.front_door_camera`. |
-| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
-| `format` | yes | Stream format supported by `stream` {% term integration %} and selected `media_player`. Default: `hls` |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------ |
+| `entity_id` | no | Name of {% term entity %} to fetch stream from, e.g., `camera.front_door_camera`. |
+| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
+| `format` | yes | Stream format supported by `stream` {% term integration %} and selected `media_player`. Default: `hls` |
For example, the following action in an automation would send an `hls` live stream to your chromecast.
@@ -129,28 +129,28 @@ action:
Enable motion detection in a camera. Currently, this will enable the first event configured on the camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.front_door_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.front_door_camera`. |
#### Service `disable_motion_detection`
Disable the motion detection in a camera. Currently, this will disable the first event configured on the camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.front_door_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.front_door_camera`. |
#### Service `snapshot`
Take a snapshot from a camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.front_door_camera`. |
-| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}`{% endraw %}. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
+| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.front_door_camera`. |
+| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}`{% endraw %}. |
-The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
+The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/integrations/homeassistant/#allowlist_external_dirs) section of your `configuration.yaml` file.
For example, the following action is an automation that would take a snapshot from "front_door_camera" and save it to /tmp with a timestamped filename.
diff --git a/source/_integrations/vodafone_station.markdown b/source/_integrations/vodafone_station.markdown
index a727c3835016..7229ac0e6c32 100644
--- a/source/_integrations/vodafone_station.markdown
+++ b/source/_integrations/vodafone_station.markdown
@@ -2,7 +2,9 @@
title: Vodafone Station
description: Instructions on how to integrate Vodafone Station routers into Home Assistant.
ha_category:
+ - Button
- Presence detection
+ - Sensor
ha_release: 2023.9
ha_domain: vodafone_station
ha_config_flow: true
@@ -14,7 +16,8 @@ ha_platforms:
- button
- device_tracker
- sensor
-ha_integration_type: integration
+ha_integration_type: hub
+ha_quality_scale: silver
---
The **Vodafone Station** {% term integration %} allows you to control your [Vodafone Station](https://www.vodafone.it/privati/area-supporto/assistenza-dispositivi/vodafone-station.html) based router.
diff --git a/source/_integrations/water_heater.mqtt.markdown b/source/_integrations/water_heater.mqtt.markdown
index f22ec09bba55..c7d81b811af8 100644
--- a/source/_integrations/water_heater.mqtt.markdown
+++ b/source/_integrations/water_heater.mqtt.markdown
@@ -12,8 +12,6 @@ The `mqtt` water heater platform lets you control your MQTT enabled water heater
## Configuration
-
-
To enable this water heater platform in your installation, first add the following to your `configuration.yaml` file:
```yaml
@@ -102,6 +100,10 @@ device:
description: 'The name of the device.'
required: false
type: string
+ serial_number:
+ description: "The serial number of the device."
+ required: false
+ type: string
suggested_area:
description: 'Suggest an area if the device isn’t in one yet.'
required: false
@@ -128,7 +130,6 @@ entity_category:
description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity.
required: false
type: string
- default: None
initial:
description: Set the initial target temperature. The default value depends on the temperature unit, and will be 43.3°C or 110°F.
required: false
diff --git a/source/_integrations/weather.markdown b/source/_integrations/weather.markdown
index 5c9fff4f434b..a589f9c0b0e7 100644
--- a/source/_integrations/weather.markdown
+++ b/source/_integrations/weather.markdown
@@ -49,7 +49,6 @@ The `weather` {% term entity %} can provide the conditions listed below as its s
Detailed weather conditions as well as the unit of measurements used for the conditions are indicated by state attributes. A weather {% term entity %} may not support all the state attributes.
-{% raw %}
```yaml
apparent_temperature: 12.0
cloud_coverage: 0
@@ -68,37 +67,29 @@ wind_gust_speed: 51.56
wind_speed: 35.17
wind_speed_unit: km/h
```
-{% endraw %}
-
-## Service `weather.get_forecast`
-
-Weather integrations which support weather forecasts expose the forecast using services. The services provided by weather entities are described below, and you can also read more about [Service Calls](/docs/scripts/service-calls/).
-
-
-Some integrations may not support the `weather.get_forecast` service, but instead expose weather forecasts as a state attribute named `forecast`. This behavior is deprecated and will be removed in a future release of Home Assistant Core.
+## Service `weather.get_forecasts`
-
-
-This service populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data)
-with a weather forecast.
+This service populates [response data](/docs/scripts/service-calls#use-templates-to-handle-response-data)
+with a mapping of weather services and their associated forecasts.
| Service data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
-| `type` | no | The type of forecast, must be one of `daily`, `twice_daily` or `hourly`. | daily
+| `type` | no | The type of forecast, must be one of `daily`, `twice_daily`, or `hourly`. The default is `daily`. | daily
-{% raw %}
```yaml
-service: weather.get_forecast
+service: weather.get_forecasts
target:
- entity_id: weather.home
+ entity_id:
+ - weather.tomorrow_io_home_nowcast
+ - weather.toronto_forecast
data:
- type: daily
+ type: hourly
response_variable: weather_forecast
```
-{% endraw %}
-The response data field `forecast` is a list of forecasted conditions at a given point in time:
+The response data field is a mapping of called target entities, each containing the `forecast` field.
+`forecast` is a list of forecasted conditions at a given point in time:
| Response data | Description | Example |
| ---------------------- | ----------- | -------- |
@@ -112,7 +103,7 @@ The response data field `forecast` is a list of forecasted conditions at a given
| `precipitation_probability` | The probability of precipitation in %. | 0
| `precipitation` | The precipitation amount in the unit indicated by the `precipitation_unit` state attribute. | 0
| `pressure` | The air pressure in the unit indicated by the `pressure_unit` state attribute. | 1019
-| `temperature` | The temperature in the unit indicated by the `temperature_unit` state attribute. If templow is also provided, this is the higher temperature. | 14.2
+| `temperature` | The temperature in the unit indicated by the `temperature_unit` state attribute. If `templow` is also provided, this is the higher temperature. | 14.2
| `templow` | The lower temperature in the unit indicated by the `temperature_unit` state attribute. | 5.0
| `uv_index` | The UV index. | 3
| `wind_bearing` | The wind bearing in azimuth angle (degrees) or 1-3 letter cardinal direction. | 268
@@ -120,34 +111,85 @@ The response data field `forecast` is a list of forecasted conditions at a given
| `wind_speed` | The wind speed in the unit indicated by the `wind_speed_unit` state attribute. | 24.41
-Example forecast:
+## Examples
+
+{% details "Example template sensor using get_forecasts" %}
+
+Example template sensor that contains the hourly forecast
{% raw %}
+
```yaml
-forecast:
- - condition: cloudy
- precipitation_probability: 0
- datetime: '2023-02-17T14:00:00+00:00'
- wind_bearing: 268
- temperature: 14.2
- pressure: 1019
- wind_speed: 24.41
- precipitation: 0
- - condition: cloudy
- precipitation_probability: 0
- datetime: '2023-02-17T15:00:00+00:00'
- wind_bearing: 268
- temperature: 13.8
- pressure: 1019
- wind_speed: 22.61
- precipitation: 0
- - condition: cloudy
- precipitation_probability: 0
- datetime: '2023-02-17T16:00:00+00:00'
- wind_bearing: 265
- temperature: 13.2
- pressure: 1020
- wind_speed: 20.27
- precipitation: 0
+template:
+ - trigger:
+ - platform: time_pattern
+ hours: /1
+ action:
+ - service: weather.get_forecasts
+ data:
+ type: hourly
+ target:
+ entity_id: weather.home
+ response_variable: hourly
+ sensor:
+ - name: Temperature forecast next hour
+ unique_id: temperature_forecast_next_hour
+ state: "{{ hourly['weather.home'].forecast[0].temperature }}"
+ unit_of_measurement: °C
+
```
+
{% endraw %}
+
+{% enddetails %}
+
+
+{% details "Example service response" %}
+
+```yaml
+weather.tomorrow_io_home_nowcast:
+ forecast:
+ - datetime: "2023-12-07T13:00:00+00:00"
+ condition: cloudy
+ precipitation_probability: 0
+ wind_bearing: 241.19
+ temperature: 0.1
+ dew_point: -1.9
+ wind_speed: 16.88
+ precipitation: 0
+ humidity: 86
+ - datetime: "2023-12-07T14:00:00+00:00"
+ condition: cloudy
+ precipitation_probability: 0
+ wind_bearing: 232.41
+ temperature: 0.8
+ dew_point: -2.8
+ wind_speed: 17.82
+ precipitation: 0
+ humidity: 77
+ - datetime: "2023-12-07T15:00:00+00:00"
+ condition: cloudy
+ precipitation_probability: 0
+ wind_bearing: 236.09
+ temperature: 1.1
+ dew_point: -2.6
+ wind_speed: 17.89
+ precipitation: 0
+ humidity: 77
+weather.toronto_forecast:
+ forecast:
+ - datetime: "2023-12-07T14:00:00+00:00"
+ condition: snowy
+ precipitation_probability: 40
+ temperature: 0
+ - datetime: "2023-12-07T15:00:00+00:00"
+ condition: snowy
+ precipitation_probability: 40
+ temperature: 0
+ - datetime: "2023-12-07T16:00:00+00:00"
+ condition: snowy
+ precipitation_probability: 40
+ temperature: 0
+```
+
+{% enddetails %}
diff --git a/source/_integrations/weather.template.markdown b/source/_integrations/weather.template.markdown
index 3787862b5f1c..b5c8c7cb6551 100644
--- a/source/_integrations/weather.template.markdown
+++ b/source/_integrations/weather.template.markdown
@@ -34,7 +34,7 @@ weather:
temperature_template: "{{ states('sensor.temperature') | float }}"
temperature_unit: "°C"
humidity_template: "{{ states('sensor.humidity') | float }}"
- forecast_daily_template: "{{ state_attr('weather.my_region', 'forecast') }}"
+ forecast_daily_template: "{{ state_attr('weather.my_region', 'forecast_data') }}"
```
{% endraw %}
@@ -116,10 +116,6 @@ visibility_unit:
description: Unit for visibility_template output. Valid options are km, mi, ft, m, cm, mm, in, yd.
required: false
type: string
-forecast_template:
- description: Forecast data.
- required: false
- type: template
forecast_daily_template:
description: Daily forecast data.
required: false
diff --git a/source/_integrations/weatherflow.markdown b/source/_integrations/weatherflow.markdown
index 4c264a34466b..9135a8c4a814 100644
--- a/source/_integrations/weatherflow.markdown
+++ b/source/_integrations/weatherflow.markdown
@@ -37,8 +37,8 @@ This {% term integration %} will expose the following sensors:
- Irradiance
- Lightning average distance
- Lightning count
-- Precipitation
-- Precipitation amount
+- Precipitation (accumulated over the previous minute)
+- Precipitation intensity ([extrapolated](https://weatherflow.github.io/Tempest/api/derived-metric-formulas.html#rain-rate) from the accumulation over the previous minute)
- Precipitation type
- Temperature
- UV index
diff --git a/source/_integrations/weatherflow_cloud.markdown b/source/_integrations/weatherflow_cloud.markdown
new file mode 100644
index 000000000000..2ca7803738bc
--- /dev/null
+++ b/source/_integrations/weatherflow_cloud.markdown
@@ -0,0 +1,20 @@
+---
+title: WeatherFlow Cloud
+description: Instructions on the Cloud based WeatherFlow integration
+ha_release: 2024.3
+ha_category:
+ - Environment
+ - Weather
+ha_platforms:
+ - weather
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@jeeftor'
+ha_domain: weatherflow_cloud
+ha_integration_type: integration
+---
+
+The **WeatherFlow Cloud** integration provides access to cloud provided Weather Forecast of a user's Tempest Weather Stations. In order to access the station you will need to configure the integration with an [Api Key](https://weatherflow.github.io/Tempest/api/).
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/webmin.markdown b/source/_integrations/webmin.markdown
new file mode 100644
index 000000000000..24ac6e982dc1
--- /dev/null
+++ b/source/_integrations/webmin.markdown
@@ -0,0 +1,36 @@
+---
+title: Webmin
+description: Instructions on how to set up Webmin with Home Assistant.
+ha_category:
+ - System monitor
+ha_release: 2024.3
+ha_iot_class: Local Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@autinerd'
+ha_domain: webmin
+ha_integration_type: device
+ha_platforms:
+ - diagnostics
+ - sensor
+---
+
+[Webmin](https://webmin.com) is a web-based interface for the system administration of Unix-like servers.
+
+This {% term integration %} provides sensors for monitoring the CPU and memory usage of your server.
+
+{% include integrations/config_flow.md %}
+
+## Sensors
+
+**All entities are disabled by default, you need to enable the entities that you wish to use.**
+
+Following sensors will be added:
+
+- Load (1m)
+- Load (5m)
+- Load (15m)
+- Memory total
+- Memory free
+- Swap total
+- Swap free
diff --git a/source/_integrations/whirlpool.markdown b/source/_integrations/whirlpool.markdown
index 5629b5f13f77..7ef99e50b5dd 100644
--- a/source/_integrations/whirlpool.markdown
+++ b/source/_integrations/whirlpool.markdown
@@ -13,6 +13,7 @@ ha_codeowners:
ha_domain: whirlpool
ha_platforms:
- climate
+ - diagnostics
- sensor
ha_integration_type: hub
---
@@ -27,7 +28,7 @@ There is currently support for the following device types within Home Assistant:
## Supported hardware
-The following air conditioners are confirmed to be working, but other models that use the 6th Sense Live application may also work:
+The following appliances are confirmed to be working, but other models that use the 6th Sense Live application may also work:
Climate:
@@ -37,6 +38,7 @@ Climate:
Washer:
- WTW6120HW2
+- MHW8630HW0
Dryer:
diff --git a/source/_integrations/whisper.markdown b/source/_integrations/whisper.markdown
index 7c497e784608..d60b91aa302e 100644
--- a/source/_integrations/whisper.markdown
+++ b/source/_integrations/whisper.markdown
@@ -13,9 +13,15 @@ ha_codeowners:
- '@synesthesiam'
ha_config_flow: true
ha_platforms:
+ - binary_sensor
+ - number
+ - select
- stt
+ - switch
- tts
+ - wake_word
ha_iot_class: Local Push
+ha_zeroconf: true
---
{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/withings.markdown b/source/_integrations/withings.markdown
index 71a945be4127..2bbf743b617b 100644
--- a/source/_integrations/withings.markdown
+++ b/source/_integrations/withings.markdown
@@ -28,7 +28,7 @@ You must have a developer account to distribute the data. [Create a free develop
Create an application:
1. Ensure you have selected *Withings public cloud* (instead of Withings US medical cloud)
2. Create an application
-3. Application creation: Public creation.
+3. Application creation: Public API integration
- Read and accept the terms if you're happy by pressing **Next**
4. Information:
- Target environment: *Development*
@@ -57,6 +57,8 @@ Withings will validate (with HTTP HEAD) these requirements each time you save yo
{% enddetails %}
+Note: You will only need one developer account; the same account and credentials are used for each Withings configuration.
+
{% include integrations/config_flow.md %}
## Data updates
diff --git a/source/_integrations/wolflink.markdown b/source/_integrations/wolflink.markdown
index 1f3c1c8ac237..3e9231d0de0f 100644
--- a/source/_integrations/wolflink.markdown
+++ b/source/_integrations/wolflink.markdown
@@ -8,6 +8,7 @@ ha_iot_class: Cloud Polling
ha_config_flow: true
ha_codeowners:
- '@adamkrol93'
+ - '@mtielen'
ha_domain: wolflink
ha_platforms:
- sensor
@@ -26,5 +27,6 @@ The {% term integration %} fetches all data based on parameters, that are expose
- Wolf Link Home Pro connected to a FGB-28 device
- Wolf ISM7e / Link Pro connected to a COB-20 device
+- Wolf ISM7 (HW v1.0, SW v2.10.47) connected to a CGB-2-14 device
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/wyoming.markdown b/source/_integrations/wyoming.markdown
index 14f7bfc16a6c..368342419b82 100644
--- a/source/_integrations/wyoming.markdown
+++ b/source/_integrations/wyoming.markdown
@@ -11,10 +11,15 @@ ha_codeowners:
ha_domain: wyoming
ha_integration_type: integration
ha_platforms:
+ - binary_sensor
+ - number
+ - select
- stt
+ - switch
- tts
- wake_word
ha_config_flow: true
+ha_zeroconf: true
---
The **Wyoming** {% term integration %} connects external voice services to Home Assistant using a [small protocol](https://github.com/rhasspy/rhasspy3/blob/master/docs/wyoming.md). This enables [Assist](/voice_control/) to use a variety of local [speech-to-text](/integrations/stt/), [text-to-speech](/integrations/tts/), and [wake-word-detection](/integrations/wake_word/) systems, such as:
@@ -23,8 +28,26 @@ The **Wyoming** {% term integration %} connects external voice services to Home
- Piper {% my supervisor_addon badge addon="core_piper" %}
- openWakeWord {% my supervisor_addon badge addon="core_openwakeword" %}
+### Installing a local voice pipeline
+
+The Wyoming, Piper, and Whisper add-ons are used to create a fully local voice pipeline. To learn how to do this, follow the procedure on [installing a local voice pipeline](/voice_control/voice_remote_local_assistant/).
+
{% include integrations/config_flow.md %}
## Satellites
[Remote voice satellites](https://github.com/rhasspy/wyoming-satellite) can be connected to Home Assistant using the Wyoming protocol. These satellites typically run on Raspberry Pi's, and are automatically discovered by Home Assistant through [Zeroconf](/integrations/zeroconf).
+
+
+### Audio Settings
+
+The following settings control audio processing of a satellite's microphone input:
+
+- Noise suppression
+ - Level of noise suppression (uses [webrtc]). Audio distortion may occur as the level increases.
+- Auto gain
+ - Automatically adjusts volume based on ambient noise (uses [webrtc]). The setting value is the target dBFS.
+- Mic volume
+ - Fixed multiplier applied to microphone audio samples. 2.0 doubles the volume, while 0.5 is halves it. Values above 1.0 may increase noise or cause audio distortion.
+
+[webrtc]: https://github.com/rhasspy/webrtc-noise-gain
diff --git a/source/_integrations/xiaomi_ble.markdown b/source/_integrations/xiaomi_ble.markdown
index a7a470ccaefa..43a3c6fe7b85 100644
--- a/source/_integrations/xiaomi_ble.markdown
+++ b/source/_integrations/xiaomi_ble.markdown
@@ -3,6 +3,7 @@ title: Xiaomi BLE
description: Instructions on how to integrate Xiaomi BLE devices into Home Assistant.
ha_category:
- Binary sensor
+ - Event
- Sensor
ha_bluetooth: true
ha_release: 2022.8
@@ -14,38 +15,17 @@ ha_domain: xiaomi_ble
ha_config_flow: true
ha_platforms:
- binary_sensor
+ - event
- sensor
ha_integration_type: integration
---
-Integrates devices that implement the Xiaomi Mijia BLE MiBeacon protocol and other Xiaomi BLE devices that support passive collection. It listens to Bluetooth broadcasts that the device makes by itself, allowing us to track the latest sensor values without needing to wake it up from deep sleep to poll and conserving its battery power.
+Integrates devices that use the Xiaomi Mijia BLE MiBeacon protocol and the BLE protocols implemented in the MiScales and the MiFora plant sensor. This integration does not support Xiaomi BLE Mesh devices. The integration listens to Bluetooth broadcasts that the device makes by itself, allowing it to track the latest sensor values or events without waking the device up for polling (except HHCCJCY01, see note below). This method conserves battery lifetime.
-The integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
+The integration automatically discovers devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. The entities are added after the values are first received. This means that entities might show up later if the corresponding values are broadcasted at a lower interval (for example, battery).
{% include integrations/config_flow.md %}
-## Supported device classes
-
-It is possible that we detect your device because it uses the MiBeacon protocol but don't yet support any or all of its sensors. We currently actively test devices with the following sensor classes.
-
-- Temperature
-- Humidity
-- Moisture
-- Illumination
-- Conductivity
-- Formaldehyde
-- Consumable
-- Voltage
-- Battery
-
-It also supports the following classes of binary sensors:
-
-- Light
-- Smoke
-- Moisture
-
-The entities for the sensor classes are added after the values are first received. This means entities for values that are broadcasted at a lower interval (e.g., battery) might show up later.
-
## Encryption
Some devices use AES encryption to protect the sensor values they are broadcasting.
@@ -57,8 +37,10 @@ This key is called the bindkey or beaconkey.
There are a few ways to obtain a bindkey for your device:
-- Set your own. The [Telink Flasher](https://atc1441.github.io/TelinkFlasher.html) allows you to generate new bindkeys for devices it supports. The new bind key will work with Home Assistant, but the Mi Home app will not recognize the sensor anymore once the device has been activated by the TeLink flasher application. To use the sensor again with the Xiaomi Mi Home app, the device needs to be removed and then re-added inside the Mi Home app.
- Extract the keys from Xiaomi Cloud using a [token extractor](https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor) tool.
+- Set your own. The [Telink Flasher](https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html) by pvvx allows you to generate new bindkeys for devices it supports (LYWSD03MMC, MJWSD05MMC, MHO-C401, CGG1, and CGDK2). This online flashing tool also allows you to upload alternative firmware, with some improvements compared to the stock firmware, like faster sensor updates. Note that the new bind key works with Home Assistant, but the Mi Home app does not recognize the sensor anymore once the device has been activated by the TeLink flasher application. To use the sensor again with the Xiaomi Mi Home app, the device needs to be removed and then re-added inside the Mi Home app.
+- An alternative [Telink Flasher](https://atc1441.github.io/Temp_universal_mi_activate.html) by atc1441 also allows you to generate new bind keys, and supports even more Xiaomi devices compared to the Telink Flasher by pvvx.
+- Yeelight Remote (YLYK01YL) and dimmers (YLKG07YL and YLKG08YL) can use V2/V3 MiBeacon encryption, although more recent devices seem to be supplied with V4/V5 encryption. For V2/V3 MiBeacon encryption, the bindkey can't be determined with the above methods. Instructions on how to get the bindkey for these devices can be found in the [BLE monitor FAQ](https://custom-components.github.io/ble_monitor/faq#how-to-get-the-mibeacon-v2v3-encryption-key).
## Devices
@@ -77,3 +59,5 @@ Flower Care firmware update steps:
- Wait for the synchronization of the sensor to finish, and a dialog asking for a firmware update should appear (this might take a few minutes)
- The installed and latest firmware version can be verified by selecting the plant -> three-dot menu -> Hardware settings -> Hardware update
- The Flower Care account and app are not required any further for this integration to work
+
+Also note that the battery level of the plant sensor can only be retrieved by connecting to the device (reading characteristics), while the other sensor data is broadcasted passively. To prevent battery drainage, a connection is made only once a day. Connecting to the device also requires that the device has a good signal strength.
diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown
index ea1b227c08d1..436c5e4aca9a 100644
--- a/source/_integrations/xiaomi_miio.markdown
+++ b/source/_integrations/xiaomi_miio.markdown
@@ -2042,7 +2042,7 @@ pip3 install pycryptodome pybase64 requests
python3 token_extractor.py
```
-3. Provide e-mail address or username for Xiaomi's account, password and country of the account (most used: CN - China Mainland, DE - Germany etc.)
+3. Provide email address or username for Xiaomi's account, password and country of the account (most used: CN - China Mainland, DE - Germany etc.)
4. Script will print out all devices connected to the account with their IP address and tokens for use in Home Assistant.
### Xiaomi Home app (Xiaomi Aqara Gateway, Android & iOS)
diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown
index c4e1702ad36c..0cef396796a5 100644
--- a/source/_integrations/yalexs_ble.markdown
+++ b/source/_integrations/yalexs_ble.markdown
@@ -37,6 +37,7 @@ Devices must have a Yale Access module installed to function with this {% term i
- YRD420 (Yale Assure Lock 2)
- YRD450 (Yale Assure Lock 2 Key Free)
- YUR/SSDL/1/SIL (Yale Unity Screen Door Lock - Australia)
+- YUR/DEL/1/SIL (Yale Unity Entrance Lock - Australia)
- IES-D210W-G0 (Yale Smart Safe)
- YRSM-1 (Yale Smart Safe)
- ASL-05 (August WiFi Smart Lock - Gen 4)
@@ -94,3 +95,9 @@ The iOS app will only save the offline key to your device's filesystem if Auto-U
The Android app will only save the offline key to your device's filesystem if Auto-Unlock has been enabled and used at least once. Auto-Unlock can be disabled once the key has been loaded.
Root access is required to read the `key` and `slot` stored in `/data/data/com.august.luna/shared_prefs/PeripheralInfoCache.xml`
+
+### Android - Yale Home
+
+The Android app will only save the offline key to your device's filesystem if Auto-Unlock has been enabled and used at least once. Auto-Unlock can be disabled once the key has been loaded.
+
+Root access is required to copy the `ModelDatabase.sql` from `/data/data/com.assaabloy.yale/databases`. Once copied, you can use [DB Broser for SQLite](https://sqlitebrowser.org/) to open the `ModelDatabase.sql`, navigate to the table `LockData` and find the column `offlineKeys`.There, you will find a JSON that includes the `key` and `slot` properties.
diff --git a/source/_integrations/yardian.markdown b/source/_integrations/yardian.markdown
index fd987dff22aa..5e227b1fc4f3 100644
--- a/source/_integrations/yardian.markdown
+++ b/source/_integrations/yardian.markdown
@@ -19,7 +19,7 @@ The **Yardian** {% term integration %} allows you to control your [Yardian Smart
There is currently support for the following platform within Home Assistant:
-- [Switch](#switch) - Allows you to view the status of zones and control them.
+- Switch - Allows you to view the status of zones and control them.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/yolink.markdown b/source/_integrations/yolink.markdown
index 4acd6d4bdb90..e84ad1c4a671 100644
--- a/source/_integrations/yolink.markdown
+++ b/source/_integrations/yolink.markdown
@@ -7,6 +7,7 @@ ha_category:
- Cover
- Light
- Lock
+ - Number
- Sensor
- Siren
- Switch
@@ -22,9 +23,11 @@ ha_platforms:
- cover
- light
- lock
+ - number
- sensor
- siren
- switch
+ - valve
ha_integration_type: integration
---
@@ -37,25 +40,71 @@ Home Assistant will use account linking provided by Nabu Casa for authenticating
If you want to use separate credentials, please contact to obtain a `client_id` and `client_secret`. Then you can add your credentials via application credentials. Settings > Devices & Services > click the menu (three dots at the top right of the screen) and then **Application Credentials**. Enter your credentials in the pop-up window.
{% enddetails %}
+## Services
+
+### `Play on SpeakerHub`
+
+With this service, you can convert text to speech for playback on SpeakerHub.
+
+Service data attribute | Optional | Description
+-|-|-
+`target_device` | no| SpeakerHub device ID for audio playback.
+`message` | no| Text for speech conversion.
+`tone` | no| Tone before playing audio.
+`volume` | no| Speaker volume during playback.
+`repeat` | no| The number of times the text will be repeated.
+
The integration is tested and verified for the following devices from YoLink:
-- YS6602/4 YS6704 (outlet | plug)
-- YS7103/4/5 (siren)
-- YS7704/7705/7706 (door sensor)
-- YS7707 (Contact Sensor)
-- YS7804/5 (motion sensor)
-- YS7903/4 (leak sensor)
-- YS8003/4/5/6 (temperature/humidity sensor)
-- YS7201 (vibration sensor)
-- YS7606/7 (lock)
-- YS4909 YS5001 (valve controller)
-- YS5705/6 (switch)
-- YS7A01/2 (CO & Smoke Sensor)
-- YS4002/3 (Thermostat)
-- YS4906/8 (Garage Door Sensor/ Garage Door Controller)
-- YS5707 (Dimmer)
-- YS6801/2 (MultiOutlet)
-- YS3604 (FlexFob)
-- YS7106 (PowerFailureAlar)
-- YS4908 (Finger)
-- YS7805 (Outdoor Motion Detector Sensor)
+- YS1603-UC (Hub)
+- YS1604-UC (SpeakerHub)
+- YS3604-UC (YoLink KeyFob)
+- YS3605-UC (YoLink On/OffFob)
+- YS3606-UC (YoLink DimmerFob)
+- YS3607-UC (YoLink SirenFob)
+- YS4002-UC (YoLink Thermostat)
+- YS4003-UC (YoLink Thermostat Heatpump)
+- YS4906-UC + YS7706-UC (Garage Door Kit 1)
+- YS4908-UC + YS7706-UC (Garage Door Kit 2 (Finger))
+- YS4909-UC (Water Valve Controller)
+- YS5001-UC (X3 Water Valve Controller)
+- YS5002-UC (YoLink Motorized Ball Valve)
+- YS5003-UC (Water Valve Controller 2)
+- YS5705-UC (In-Wall Switch)
+- YS5706-UC (YoLink Relay)
+- YS5707-UC (Dimmer Switch)
+- YS5708-UC (In-Wall Switch 2)
+- YS6602-UC (YoLink Energy Plug)
+- YS6604-UC (YoLink Plug Mini)
+- YS6704-UC (In-wall Outlet)
+- YS6801-UC (Smart Power Strip)
+- YS6802-UC (Smart Outdoor Power Strip)
+- YS6803-UC (Outdoor Energy Plug)
+- YS7103-UC (Siren Alarm)
+- YS7104-UC (Outdoor Alarm Controller)
+- YS7105-UC (X3 Outdoor Alarm Controller)
+- YS7106-UC (Power Fail Alarm)
+- YS7107-UC (Outdoor Alarm Controller 2)
+- YS7201-UC (Vibration Sensor)
+- YS7606-UC (YoLink Smart Lock M1)
+- YS7607-UC (YoLink Smart Lock M2)
+- YS7704-UC (Door Sensor)
+- YS7706-UC (Garage Door Sensor)
+- YS7707-UC (Contact Sensor)
+- YS7804-UC (Motion Sensor)
+- YS7805-UC (Outdoor Motion Sensor)
+- YS7903-UC (Water Leak Sensor)
+- YS7904-UC (Water Leak Sensor 2)
+- YS7906-UC (Water Leak Sensor 4)
+- YS7916-UC (Water Leak Sensor 4 MoveAlert)
+- YS7905-UC (WaterDepthSensor)
+- YS7A01-UC (Smart Smoke/CO Alarm)
+- YS8003-UC (Temperature Humidity Sensor)
+- YS8004-UC (Weatherproof Temperature Sensor)
+- YS8005-UC (Weatherproof Temperature & Humidity Sensor)
+- YS8006-UC (X3 Temperature & Humidity Sensor)
+- YS8014-UC (X3 Outdoor Temperature Sensor)
+- YS8015-UC (X3 Outdoor Temperature & Humidity Sensor)
+- YS5006-UC (FlowSmart Control)
+- YS5007-UC (FlowSmart Meter)
+- YS5008-UC (FlowSmart All-in-One)
diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown
index 81bf1a9bd4d6..2a16e3f17617 100644
--- a/source/_integrations/zha.markdown
+++ b/source/_integrations/zha.markdown
@@ -16,6 +16,7 @@ ha_category:
- Sensor
- Siren
- Switch
+ - Update
ha_release: 0.44
ha_iot_class: Local Polling
featured: true
@@ -42,6 +43,7 @@ ha_platforms:
- sensor
- siren
- switch
+ - update
ha_zeroconf: true
ha_integration_type: integration
---
@@ -65,6 +67,7 @@ This {% term integration %} currently supports the following device types within
- [Sensor](/integrations/sensor/)
- [Siren](/integrations/siren/)
- [Switch](/integrations/switch/)
+- [Update](/integrations/update/)
In addition, it has support for "Zigbee groups" that enable native on-device grouping of multiple Zigbee lights, switches, and fans that enable controlling all entities for those devices in those groups with one command. At least two entities must be added to a Zigbee group inside the ZHA {% term integration %} before a group entity is created. There is also support for native on-device Zigbee [binding and unbinding (i.e. bind a remote to a lightbulb or group)](#binding-and-unbinding).
@@ -98,10 +101,12 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl
- [ITead SONOFF Zigbee 3.0 USB Dongle Plus Model "ZBDongle-E" (EFR32MG21 variant)](https://itead.cc/product/zigbee-3-0-usb-dongle/)
- [Elelabs Zigbee USB Adapter](https://elelabs.com/products/elelabs-usb-adapter.html)/POPP ZB-Stick (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility))
- [Elelabs Zigbee Raspberry Pi Shield](https://elelabs.com/products/elelabs-zigbee-shield.html) (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility))
+ - [SMLIGHT SLZB-07](https://smlight.tech/product/slzb-07/) (EFR32MG21-based USB dongle)
- Texas Instruments based radios (via the [zigpy-znp](https://github.com/zigpy/zigpy-znp) library for zigpy)
- [CC2652P/CC2652R/CC2652RB USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/guide/adapters/)
- [CC1352P/CC1352R USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/guide/adapters/)
- dresden elektronik deCONZ based Zigbee radios (via the [zigpy-deconz](https://github.com/zigpy/zigpy-deconz) library for zigpy)
+ - [ConBee III (a.k.a. ConBee 3) USB adapter from dresden elektronik](https://phoscon.de/conbee3)
- [ConBee II (a.k.a. ConBee 2) USB adapter from dresden elektronik](https://phoscon.de/conbee2)
- [RaspBee II (a.k.a. RaspBee 2) Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee2)
@@ -203,6 +208,7 @@ Some devices can be auto-discovered, which can simplify the ZHA setup process. T
| [ConBee III](https://phoscon.de/conbee3) | USB | 0403:6015 |
| [Nortek HUSBZB-1](https://www.nortekcontrol.com/products/2gig/husbzb-1-gocontrol-quickstick-combo/) | USB | 10C4:8A2A |
| [slae.sh CC2652RB development stick](https://slae.sh/projects/cc2652/) | USB | 10C4:EA60 |
+| [SMLIGHT SLZB-07](https://smlight.tech/product/slzb-07/) | USB | 10C4:EA60 |
| [ZigStar Stick (CC2652 + CH340B variant)](https://zig-star.com/projects/zigbee-stick-v4/) | USB | 1A86:7523 |
| [Tube’s EFR32 Pro Ethernet/Serial Coordinator](https://www.tubeszb.com/) | USB | 10C4:EA60 |
| [ZigStar Coordinators](https://zig-star.com/) | USB | 1A86:7523 |
@@ -420,22 +426,22 @@ In practice, you will likely need to add a lot more Zigbee router devices than i
## Binding and unbinding
-ZHA support for binding and unbinding. Binding is an action in Zigbee which defines relations between two Zigbee devices, specific endpoints, and cluster id. It provides a mechanism for attaching an endpoint on one Zigbee node to one or more endpoints on another Zigbee node or Zigbee group (a group of Zigbee devices).
+ZHA supports binding and unbinding. Binding is an action in Zigbee which defines relations between two Zigbee devices, specific endpoints, and cluster id. It provides a mechanism for attaching an endpoint on one Zigbee node to one or more endpoints on another Zigbee node or Zigbee group (a group of Zigbee devices).
Binding is a "target destination" in form of a device address or group ID, endpoint, and cluster. For example, binding a Zigbee device like a remote to a Zigbee lightbulb, switch or group of lightbulbs allows direct control of the "target" device (light, switch, shade) from the "remote" Zigbee device, bypassing ZHA. This means that the remote can control the lightbulb/group of lightbulbs even when the Zigbee coordinator is not available.
-Binding is only supported between the same cluster, for example, "output cluster id 6" (on/off cluster) of a remote, can be only bound to an "input cluster id 6" on the target device -- light, switch.
+Binding is only supported within the same cluster, for example, "output cluster id 6" (on/off cluster) of a remote, can be only bound to an "input cluster id 6" on the target device -- light, switch.
-Note that not all devices support binding as it depends on the Zigbee implementation of the device itself. Also, by default ZHA bind remotes to the coordinator, so the coordinator could receive ZCL commands from the remotes and originate zha_events. However, some remotes, for example, the Philips RWL021 can only be bound to a single destination and it is not possible to make this switch to bind to other destinations like a device or groups unless you first unbind the remote from the coordinator. After you unbind the remote from the ZHA coordinator you can then bind it directly to any other Zigbee device or a group.
+Note that not all devices support binding as it depends on the Zigbee implementation of the device itself. Also, by default ZHA binds remotes to the coordinator, so the coordinator can receive ZCL commands from the remotes and originate zha_events. However, some remotes, for example, the Philips RWL021 can only be bound to a single destination and it is not possible to make this switch to bind to other destinations like a device or groups unless you first unbind the remote from the coordinator. After you unbind the remote from the ZHA coordinator you can then bind it directly to any other Zigbee device or a group.
Binding a remote directly to a bulb or group has the benefit of faster response time and smoother control. This greatly improves user feedback experience functions like dimming as the remote then directly dims the lightbulb and thus does not have to make the software roundtrip via the ZHA coordinator.
## Zigbee backup and restore in ZHA
-Zigbee Home Automation (ZHA) {% term integration %} now features Zigbee network backup, restore/recovery, and migrating between Zigbee coordinators. Backups are taken automatically however, a single backup to a file for easy download can also be manually created from the configuration page under Network Settings.
+Zigbee Home Automation (ZHA) {% term integration %} now features Zigbee network backup, restore/recovery, and migrating between Zigbee coordinators. Backups are taken automatically. However, a single backup to a file for easy download can also be manually created from the configuration page under Network Settings.
After restoring a Home Assistant backup, you can re-configure ZHA and migrate to a new Zigbee Coordinator adapter without any loss of your settings or devices that were connected. This is helpful if your current radio fails or a new radio adapter type and model comes out that you may want to migrate to.
-Within ZHA is possible to use this backup and restore feature to migrate between some different radio types, if the respective radio library supports it. Currently, ZHA supports migrating the Zigbee network between different Zigbee Coordinator adapters based on chips from Silicon Labs, Texas Instruments, or ConBee/RaspBee if the backup was made from inside ZHA.
+Within ZHA it is possible to use this backup and restore feature to migrate between some different radio types, if the respective radio library supports it. Currently, ZHA supports migrating the Zigbee network between different Zigbee Coordinator adapters based on chips from Silicon Labs, Texas Instruments, or ConBee/RaspBee if the backup was made from inside ZHA.
## Migrating to a new Zigbee coordinator adapter inside ZHA
@@ -483,6 +489,8 @@ To help resolve any kinks or compatibility problems, report bugs as issues with
Note that ZHA only supports connecting a single dedicated Zigbee Coordinator radio adapter or module with a single Zigbee network and that the Zigbee Coordinator cannot already be connected or used by any other application. Any devices that are or have previously been connected to another Zigbee implementation will also need to first be reset to their factory default settings before they can be paired/joined to ZHA, please see each device manufacturer's documentation.
+Any Zigbee device can only be connected to a single Zigbee Coordinator (only one Zigbee gateway). This is a limitation in the current (as well as previous) Zigbee protocol specifications, governed by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/). As such, it is a limit that applies to all Zigbee implementations, not just the ZHA implementation.
+
Support for commissioning Zigbee 3.0 devices via "Install Code" or "QR Code" via the 'zha.permit' service has so far only been implemented for 'ezsp' (Silicon Labs EmberZNet) or 'znp' (Texas Instruments) radio type in ZHA. Other radio types are missing support in their respective [radio libraries for zigpy](https://github.com/zigpy/) or manufacturer's firmware commands/APIs.
ZHA does currently not support devices that can only use the ZGP ("Zigbee Green Power") profile which is used in a few batteryless self-powered or energy harvesting devices, (such as for example; Philips Hue Click, Philips Hue Tap, and some "Friends of Hue" partnership switches).
@@ -611,13 +619,17 @@ LQI (Link Quality Index) values can be hard to interpret for Zigbee. This is bec
### Reporting issues
-When reporting issues, please provide the following information in addition to information requested by issue template:
+For more details on where and how to report issues, please refer to the [Reporting issues page](/help/reporting_issues/).
+
+When reporting potential bugs related to the ZHA integration on the issues trackers, please always provide the following ZHA/Zigbee-specific information in addition to the information requested by the standard issue template:
-1. Debug logs for the issue, see [debug logging](#debug-logging)
-2. Model of Zigbee radio being used
+1. Debug logs for the issue, see [debug logging](#debug-logging).
+2. Exact model and firmware of the Zigbee radio (Zigbee Coordinator adapter) being used.
3. If the issue is related to a specific Zigbee device, provide both the **Zigbee Device Signature** and the **Diagnostics** information.
- Both the **Zigbee Device Signature** and the **Diagnostics** information can be found under {% my integrations title="**Settings** > **Devices & Services**" %}. Select the **Zigbee Home Automation** integration. Then, select **Configure** > **Devices** (pick your device). Select **Zigbee Device Signature** and **Download Diagnostics**, respectively.
+Note: Please also make sure you give it your best effort to follow the recommended best practices for avoiding both [pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) and [Zigbee interference](#zigbee-interference-avoidance-and-network-rangecoverage-optimization), (which helps free up time for developers).
+
### Debug logging
To enable debug logging for the ZHA {% term integration %} and radio libraries, add the following [logger](/integrations/logger/) configuration to `configuration.yaml`:
diff --git a/source/_integrations/zondergas.markdown b/source/_integrations/zondergas.markdown
new file mode 100644
index 000000000000..b5c3fc4ccbd7
--- /dev/null
+++ b/source/_integrations/zondergas.markdown
@@ -0,0 +1,20 @@
+---
+title: ZonderGas
+description: Connect and control your ZonderGas devices using the EnergyZero integration
+ha_category:
+ - Energy
+ha_domain: zondergas
+ha_release: 2023.2
+ha_integration_type: virtual
+ha_supporting_domain: energyzero
+ha_supporting_integration: EnergyZero
+ha_codeowners:
+ - '@klaasnicolaas'
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
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/_integrations/zoneminder.markdown b/source/_integrations/zoneminder.markdown
index 79f3debcd5af..4613ab075187 100644
--- a/source/_integrations/zoneminder.markdown
+++ b/source/_integrations/zoneminder.markdown
@@ -11,6 +11,7 @@ ha_release: 0.31
ha_iot_class: Local Polling
ha_codeowners:
- '@rohankapoorcom'
+ - '@nabbi'
ha_domain: zoneminder
ha_platforms:
- binary_sensor
diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown
index 1c8f82fbc06e..307c8723d895 100644
--- a/source/_integrations/zwave_js.markdown
+++ b/source/_integrations/zwave_js.markdown
@@ -59,7 +59,7 @@ To run a Z-Wave network, you need the following elements:
### Setting up a Z-Wave JS server
-If you are running Home Assistant Operating System or Home Assistant Supervised, the easiest way to get started is by using the built-in Z-Wave JS add-on in Home Assistant.
+If you are running {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %}, the easiest way to get started is by using the built-in Z-Wave JS add-on in Home Assistant.
For other ways to setup a Z-Wave server, refer to the [advanced installation instructions](#advanced-installation-instructions).
@@ -726,13 +726,13 @@ The chart below illustrates Options 1 and 2, which are available for Home Assist
**Option 1: The official Z-Wave JS add-on, as described above**
-_This option is only available for Home Assistant OS (the recommended installation type) and Home Assistant Supervised installations._
+_This option is only available for {% term "Home Assistant Operating System" %} (the recommended installation type) and {% term "Home Assistant Supervised" %} installations._
This add-on can only be configured via the built-in Z-Wave control panel in Home Assistant. If you followed the standard [installation procedure](#setting-up-a-z-wave-js-server), this is how you are running the Z-Wave JS server.
**Option 2: The Z-Wave JS UI add-on installed from the community add-on store**
-_This option is only available for Home Assistant OS (the recommended installation type) and Home Assistant Supervised installations._
+_This option is only available for {% term "Home Assistant Operating System" %} (the recommended installation type) and {% term "Home Assistant Supervised" %} installations._
This add-on includes the Z-Wave JS Server as part of the Z-Wave JS UI application. The Z-Wave network can be configured via the built-in Z-Wave control panel in Home Assistant and alternatively via the Z-Wave control panel built into Z-Wave JS UI. It provides you with a full-fledged, attractive, and feature-complete UI to manage your Z-Wave nodes and settings, which may support more advanced use cases as development continues on the Z-Wave control panel.
@@ -845,11 +845,13 @@ Names set in Home Assistant will not import into Z-Wave JS UI.
### Should I use `Secure Inclusion`?
-That depends. There are two generations of Z-Wave security, S0, and S2.
+That depends. There are two generations of Z-Wave encryption, Security S0, and Security S2. Both provide encryption and allow detecting packet corruption.
-S0 security imposes significant additional traffic on your mesh and is recommended only for devices that require security, such as door locks.
+Security S0 imposes significant additional traffic on your mesh and is recommended only for older devices that do not support Security S2 but require encryption to work, such as door locks.
-S2 security does not impose additional network traffic and provides additional benefits, such as detecting packet corruption. By default, Z-Wave attempts S2 security during inclusion if supported, falling back to S0 security only when necessary.
+Security S2 does not impose additional network traffic and provides additional benefits. For example, end devices using S2 require the hub to report whether it has received and understood their reports.
+
+By default, Z-Wave prefers Security S2, if supported. Security S0 is used only when absolutely necessary.
### Where can I see the security keys in the Z-Wave JS add-on?
diff --git a/source/_layouts/page.html b/source/_layouts/page.html
index 7d320b83a069..fb1122d4cff6 100644
--- a/source/_layouts/page.html
+++ b/source/_layouts/page.html
@@ -35,5 +35,6 @@
{% endif %}
{{ content }}
+ {% include related.html %}
{% include feedback.html %}
diff --git a/source/_posts/2021-06-16-power-up-your-esp-projects.markdown b/source/_posts/2021-06-16-power-up-your-esp-projects.markdown
index 44a18e9374a0..0710ff4b37f2 100644
--- a/source/_posts/2021-06-16-power-up-your-esp-projects.markdown
+++ b/source/_posts/2021-06-16-power-up-your-esp-projects.markdown
@@ -96,7 +96,7 @@ If you have an ESP32 or ESP8266 device handy, you can try it out right here:
diff --git a/source/_posts/2021-12-18-ios-multi-server.markdown b/source/_posts/2021-12-18-ios-multi-server.markdown
index 654524282aae..b558f0abd067 100644
--- a/source/_posts/2021-12-18-ios-multi-server.markdown
+++ b/source/_posts/2021-12-18-ios-multi-server.markdown
@@ -5,7 +5,9 @@ date: 2021-12-18 00:00:00
date_formatted: "December 18, 2021"
author: Zac West
author_twitter: zacwest
-categories: Release-Notes
+categories:
+ - Release-Notes
+ - iOS
og_image: /images/blog/2021-12-ios/social.png
---
diff --git a/source/_posts/2022-12-20-year-of-voice.markdown b/source/_posts/2022-12-20-year-of-voice.markdown
index 645046266851..b109e172fd64 100644
--- a/source/_posts/2022-12-20-year-of-voice.markdown
+++ b/source/_posts/2022-12-20-year-of-voice.markdown
@@ -9,6 +9,7 @@ author_twitter: balloob
comments: true
categories:
- Announcements
+- Assist
og_image: /images/blog/2022-12-20-year-of-voice/conversation.png
---
@@ -20,6 +21,8 @@ _**TL;DR**: It is our goal for 2023 to let users control Home Assistant in their
- [Year of the Voice - Chapter 2](/blog/2023/04/27/year-of-the-voice-chapter-2/) (April 27, 2023)
- [Year of the Voice - Chapter 3](/blog/2023/07/20/year-of-the-voice-chapter-3/) (July 20, 2023)
- [Year of the Voice - Chapter 4](/blog/2023/10/12/year-of-the-voice-chapter-4-wakewords/) (October 12, 2023)
+ - [Year of the Voice - Chapter 5](/blog/2023/12/13/year-of-the-voice-chapter-5/) (December 13, 2023)
+ - [Voice - Chapter 6](/blog/2024/02/21/voice-chapter-6/) (February 21, 2024)
diff --git a/source/_posts/2023-12-06-release-202312.markdown b/source/_posts/2023-12-06-release-202312.markdown
index 24b73aa5be86..750f3a8b5474 100644
--- a/source/_posts/2023-12-06-release-202312.markdown
+++ b/source/_posts/2023-12-06-release-202312.markdown
@@ -54,6 +54,10 @@ Happy holidays & enjoy the release!
- [Other noteworthy changes](#other-noteworthy-changes)
- [New integrations](#new-integrations)
- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui)
+- [Release 2023.12.1 - December 8](#release-2023121---december-8)
+- [Release 2023.12.2 - December 13](#release-2023122---december-13)
+- [Release 2023.12.3 - December 14](#release-2023123---december-14)
+- [Release 2023.12.4 - December 27](#release-2023124---december-27)
- [Need help? Join the community!](#need-help-join-the-community)
- [Backward-incompatible changes](#backward-incompatible-changes)
- [Farewell to the following](#farewell-to-the-following)
@@ -66,6 +70,14 @@ Don't forget to [join our release party live stream on YouTube](https://www.yout
## A beautiful new login page
+
+
+This feature has been disabled in Home Assistant 2023.12.3.
+[Read more about it here](/blog/2023/12/14/disabling-new-login-page-functionality/).
+
+
+
+
The login page of Home Assistant has been redesigned to be more modern and
match the [recent redesign of the Home Assistant onboarding](/blog/2023/09/06/release-20239/#onboarding).
@@ -292,7 +304,7 @@ We welcome the following new integrations in this release:
[Devialet]: /integrations/devialet
[V2C]: /integrations/v2c
[Linear Garage Door]: /integrations/linear_garage_door
-[MyPermobil]: /integrations/mypermobil
+[MyPermobil]: /integrations/permobil
[OurGroceries]: /integrations/ourgroceries
## Integrations now available to set up from the UI
@@ -310,6 +322,307 @@ The following integrations are now available via the Home Assistant UI:
[Fast.com]: /integrations/fastdotcom
[Ping]: /integrations/ping
+## Release 2023.12.1 - December 8
+
+- Initialize energy_state without price ([@Excentyl] - [#97031])
+- Bump yolink-api to 0.3.4 ([@matrixd2] - [#105124])
+- Bump apple_weatherkit to 1.1.2 ([@tjhorner] - [#105140])
+- Correct smtp error message string ([@jbouwh] - [#105148])
+- Expose todo entities to Assist by default ([@synesthesiam] - [#105150])
+- Disable scenarios (scenes) for local API in Overkiz ([@iMicknl] - [#105153])
+- Improve LIDL christmas light detection in deCONZ ([@Kane610] - [#105155])
+- Bump reolink_aio to 0.8.2 ([@starkillerOG] - [#105157])
+- Don't return TTS URL in Assist pipeline ([@synesthesiam] - [#105164])
+- Bump Météo-France to 1.3.0 ([@Quentame] - [#105170])
+- Fix ZHA quirk ID custom entities matching all devices ([@TheJulianJES] - [#105184])
+- Fix missing apostrophe in smtp ([@lunmay] - [#105189])
+- Set ping interval to 15 seconds instead of 5 minutes ([@nohn] - [#105191])
+- Increase ping update interval to 30 seconds ([@jpbede] - [#105199])
+- Fix bug in roon incremental volume control. ([@pavoni] - [#105201])
+- fix supportedFanOscillationModes is null ([@haimn] - [#105205])
+- Disable config flow progress in peco config flow ([@emontnemery] - [#105222])
+- Fix Fritzbox light setup ([@flabbamann] - [#105232])
+- Fix check_date service in workday ([@gjohansson-ST] - [#105241])
+- Fix AsusWrt invalid data type with tuple type ([@ollo69] - [#105247])
+- Explicit check for None in Discovergy entity if condition ([@jpbede] - [#105248])
+- Add migration for old HomeWizard sensors ([@DCSBL] - [#105251])
+- Fix update of uncategorized OurGroceries items ([@OnFreund] - [#105255])
+- Bump pyunifiprotect to 4.22.0 ([@bdraco] - [#105265])
+- Set device id and forward errors to Wyoming satellites ([@synesthesiam] - [#105266])
+- Fix mqtt json light state updates using deprecated color handling ([@jbouwh] - [#105283])
+- Always set _attr_current_option in Nobø Hub select entities ([@oyvindwe] - [#105289])
+- Update frontend to 20231208.2 ([@piitaya] - [#105299])
+- Add test for energy cost sensor for late price sensor ([@emontnemery] - [#105312])
+- Use area id for context instead of name ([@synesthesiam] - [#105313])
+- Add workaround for orjson not handling subclasses of str ([@emontnemery] - [#105314])
+- Add rollback on exception that needs rollback in SQL ([@gjohansson-ST] - [#104948])
+- Workaround `to_json` template filter in parsing dict key ([@jbouwh] - [#105327])
+- Bump plugwise to v0.34.5 ([@bouwew] - [#105330])
+
+[#104948]: https://github.com/home-assistant/core/pull/104948
+[#105124]: https://github.com/home-assistant/core/pull/105124
+[#105135]: https://github.com/home-assistant/core/pull/105135
+[#105140]: https://github.com/home-assistant/core/pull/105140
+[#105148]: https://github.com/home-assistant/core/pull/105148
+[#105150]: https://github.com/home-assistant/core/pull/105150
+[#105153]: https://github.com/home-assistant/core/pull/105153
+[#105155]: https://github.com/home-assistant/core/pull/105155
+[#105157]: https://github.com/home-assistant/core/pull/105157
+[#105164]: https://github.com/home-assistant/core/pull/105164
+[#105170]: https://github.com/home-assistant/core/pull/105170
+[#105184]: https://github.com/home-assistant/core/pull/105184
+[#105189]: https://github.com/home-assistant/core/pull/105189
+[#105191]: https://github.com/home-assistant/core/pull/105191
+[#105199]: https://github.com/home-assistant/core/pull/105199
+[#105201]: https://github.com/home-assistant/core/pull/105201
+[#105205]: https://github.com/home-assistant/core/pull/105205
+[#105222]: https://github.com/home-assistant/core/pull/105222
+[#105232]: https://github.com/home-assistant/core/pull/105232
+[#105241]: https://github.com/home-assistant/core/pull/105241
+[#105247]: https://github.com/home-assistant/core/pull/105247
+[#105248]: https://github.com/home-assistant/core/pull/105248
+[#105251]: https://github.com/home-assistant/core/pull/105251
+[#105255]: https://github.com/home-assistant/core/pull/105255
+[#105265]: https://github.com/home-assistant/core/pull/105265
+[#105266]: https://github.com/home-assistant/core/pull/105266
+[#105283]: https://github.com/home-assistant/core/pull/105283
+[#105289]: https://github.com/home-assistant/core/pull/105289
+[#105299]: https://github.com/home-assistant/core/pull/105299
+[#105312]: https://github.com/home-assistant/core/pull/105312
+[#105313]: https://github.com/home-assistant/core/pull/105313
+[#105314]: https://github.com/home-assistant/core/pull/105314
+[#105327]: https://github.com/home-assistant/core/pull/105327
+[#105330]: https://github.com/home-assistant/core/pull/105330
+[#97031]: https://github.com/home-assistant/core/pull/97031
+[@DCSBL]: https://github.com/DCSBL
+[@Excentyl]: https://github.com/Excentyl
+[@Kane610]: https://github.com/Kane610
+[@OnFreund]: https://github.com/OnFreund
+[@Quentame]: https://github.com/Quentame
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@bdraco]: https://github.com/bdraco
+[@bouwew]: https://github.com/bouwew
+[@emontnemery]: https://github.com/emontnemery
+[@flabbamann]: https://github.com/flabbamann
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@haimn]: https://github.com/haimn
+[@iMicknl]: https://github.com/iMicknl
+[@jbouwh]: https://github.com/jbouwh
+[@jpbede]: https://github.com/jpbede
+[@lunmay]: https://github.com/lunmay
+[@matrixd2]: https://github.com/matrixd2
+[@nohn]: https://github.com/nohn
+[@ollo69]: https://github.com/ollo69
+[@oyvindwe]: https://github.com/oyvindwe
+[@pavoni]: https://github.com/pavoni
+[@piitaya]: https://github.com/piitaya
+[@starkillerOG]: https://github.com/starkillerOG
+[@synesthesiam]: https://github.com/synesthesiam
+[@tjhorner]: https://github.com/tjhorner
+
+## Release 2023.12.2 - December 13
+
+- Fix Lyric LCC thermostats auto mode ([@apt-itude] - [#104853])
+- Bump zeroconf to 0.128.0 ([@bdraco] - [#104936])
+- Fix CI test_invalid_rrule_fix test by freezing the time ([@jbouwh] - [#105294])
+- Add missing configuration for services.yaml in blink ([@mkmer] - [#105310])
+- Bump pyschlage to 2023.12.0 ([@dknowles2] - [#105349])
+- Fix preset modes error in Smartthings ([@gjohansson-ST] - [#105375])
+- Fix service missing key in Blink ([@mkmer] - [#105387])
+- Fix adding/updating todo items with due date in CalDAV integration ([@DerFlob] - [#105435])
+- Check if heat area exists when setting up valve opening and battery sensors in moehlenhoff alpha2 ([@j-a-n] - [#105437])
+- Bump hatasmota to 0.8.0 ([@emontnemery] - [#105440])
+- Bump plugwise to v0.35.3 ([@bouwew] - [#105442])
+- Fix alexa calling not featured cover services ([@jbouwh] - [#105444])
+- Fix fitbit oauth reauth debug logging ([@allenporter] - [#105450])
+- Write Enphase Envoy data to log when in debug mode ([@catsmanac] - [#105456])
+- Bump ical to 6.1.1 ([@allenporter] - [#105462])
+- Bump zeroconf to 0.128.4 ([@bdraco] - [#105465])
+- Remove Aftership import issue when entry already exists ([@joostlek] - [#105476])
+- Disconnect before reconnecting to satellite ([@synesthesiam] - [#105500])
+- Bump caldav to 1.3.8 ([@FrnchFrgg] - [#105508])
+- Bump pyhiveapi to v0.5.16 ([@KJonline] - [#105513])
+- Fix setup Fast.com ([@gjohansson-ST] - [#105580])
+- Add name slot to HassClimateGetTemperature intent ([@synesthesiam] - [#105585])
+- Skip TTS events entirely with empty text ([@synesthesiam] - [#105617])
+- Rename "satellite enabled" to "mute" ([@synesthesiam] - [#105619])
+- Fix timing issue in Withings ([@joostlek] - [#105203])
+- Update pylint to 3.0.3 ([@cdce8p] - [#105491])
+- Reload ZHA integration on any error, not just recoverable ones ([@puddly] - [#105659])
+- Bump ZHA dependencies ([@puddly] - [#105661])
+
+[#104853]: https://github.com/home-assistant/core/pull/104853
+[#104936]: https://github.com/home-assistant/core/pull/104936
+[#105135]: https://github.com/home-assistant/core/pull/105135
+[#105203]: https://github.com/home-assistant/core/pull/105203
+[#105294]: https://github.com/home-assistant/core/pull/105294
+[#105310]: https://github.com/home-assistant/core/pull/105310
+[#105324]: https://github.com/home-assistant/core/pull/105324
+[#105349]: https://github.com/home-assistant/core/pull/105349
+[#105375]: https://github.com/home-assistant/core/pull/105375
+[#105387]: https://github.com/home-assistant/core/pull/105387
+[#105435]: https://github.com/home-assistant/core/pull/105435
+[#105437]: https://github.com/home-assistant/core/pull/105437
+[#105440]: https://github.com/home-assistant/core/pull/105440
+[#105442]: https://github.com/home-assistant/core/pull/105442
+[#105444]: https://github.com/home-assistant/core/pull/105444
+[#105450]: https://github.com/home-assistant/core/pull/105450
+[#105456]: https://github.com/home-assistant/core/pull/105456
+[#105462]: https://github.com/home-assistant/core/pull/105462
+[#105465]: https://github.com/home-assistant/core/pull/105465
+[#105476]: https://github.com/home-assistant/core/pull/105476
+[#105491]: https://github.com/home-assistant/core/pull/105491
+[#105500]: https://github.com/home-assistant/core/pull/105500
+[#105508]: https://github.com/home-assistant/core/pull/105508
+[#105513]: https://github.com/home-assistant/core/pull/105513
+[#105580]: https://github.com/home-assistant/core/pull/105580
+[#105585]: https://github.com/home-assistant/core/pull/105585
+[#105617]: https://github.com/home-assistant/core/pull/105617
+[#105619]: https://github.com/home-assistant/core/pull/105619
+[#105659]: https://github.com/home-assistant/core/pull/105659
+[#105661]: https://github.com/home-assistant/core/pull/105661
+[@DerFlob]: https://github.com/DerFlob
+[@FrnchFrgg]: https://github.com/FrnchFrgg
+[@KJonline]: https://github.com/KJonline
+[@allenporter]: https://github.com/allenporter
+[@apt-itude]: https://github.com/apt-itude
+[@bdraco]: https://github.com/bdraco
+[@bouwew]: https://github.com/bouwew
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@dknowles2]: https://github.com/dknowles2
+[@emontnemery]: https://github.com/emontnemery
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@j-a-n]: https://github.com/j-a-n
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@mkmer]: https://github.com/mkmer
+[@puddly]: https://github.com/puddly
+[@synesthesiam]: https://github.com/synesthesiam
+
+## Release 2023.12.3 - December 14
+
+- Ensure platform setup for all AVM FRITZ!SmartHome devices ([@mib1185] - [#105515])
+- Update AEMET-OpenData to v0.4.7 ([@Noltari] - [#105676])
+- Fix restoring UniFi clients with old unique id ([@Kane610] - [#105691])
+- Bump zeroconf to 0.128.5 ([@bdraco] - [#105694])
+- Add missing rest_command reload service to services.yaml ([@jpbede] - [#105714])
+- Fix issue clearing renault schedules ([@epenet] - [#105719])
+- Fix Fully Kiosk Browser MQTT event callbacks with non-standard event topics ([@cgarwood] - [#105735])
+- Disable user profiles on login screen ([@frenck] - [#105749])
+
+[#105135]: https://github.com/home-assistant/core/pull/105135
+[#105324]: https://github.com/home-assistant/core/pull/105324
+[#105515]: https://github.com/home-assistant/core/pull/105515
+[#105655]: https://github.com/home-assistant/core/pull/105655
+[#105676]: https://github.com/home-assistant/core/pull/105676
+[#105691]: https://github.com/home-assistant/core/pull/105691
+[#105694]: https://github.com/home-assistant/core/pull/105694
+[#105714]: https://github.com/home-assistant/core/pull/105714
+[#105719]: https://github.com/home-assistant/core/pull/105719
+[#105735]: https://github.com/home-assistant/core/pull/105735
+[#105749]: https://github.com/home-assistant/core/pull/105749
+[@Kane610]: https://github.com/Kane610
+[@Noltari]: https://github.com/Noltari
+[@bdraco]: https://github.com/bdraco
+[@cgarwood]: https://github.com/cgarwood
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@jpbede]: https://github.com/jpbede
+[@mib1185]: https://github.com/mib1185
+
+## Release 2023.12.4 - December 27
+
+- Pass timeout to httpx in RESTful Switch ([@vexofp] - [#105364])
+- Add Raspberry Pi 5 specific container image ([@agners] - [#105488])
+- Set todo item status in intent ([@synesthesiam] - [#105743])
+- Bump aioairzone to v0.7.0 ([@Noltari] - [#105807])
+- Update aioairzone to v0.7.2 ([@Noltari] - [#105811])
+- Fix HVAC mode duplication for Shelly Gen2 climate platform ([@bieniu] - [#105812])
+- Fix Airzone temperature range on new climate card ([@Noltari] - [#105830])
+- Bump pyunifiprotect to 4.22.3 ([@bdraco] - [#105833])
+- Address late review comments on AVM FRITZ!SmartHome ([@mib1185] - [#105860])
+- Set WiFi QR code entity to unknown when Fritzbox is not available ([@mib1185] - [#105870])
+- Bump reolink_aio to 0.8.3 ([@starkillerOG] - [#105489])
+- Bump reolink_aio to 0.8.4 ([@starkillerOG] - [#105946])
+- Bump motionblinds to 0.6.19 ([@starkillerOG] - [#105951])
+- Fix unreachable Netatmo sensor returning false values ([@cgtobi] - [#105954])
+- Add Raspberry Pi 5 to version and hardware integration ([@agners] - [#105992])
+- Bump blinkpy 0.22.4 ([@mkmer] - [#105993])
+- Don't fetch unchanged OurGroceries lists ([@OnFreund] - [#105998])
+- Bump pyatmo to 8.0.1 ([@cgtobi] - [#106094])
+- Bump surepy to 0.9.0 ([@benleb] - [#106101])
+- Bump pyenphase to 1.15.2 ([@bdraco] - [#106134])
+- Bump ZHA dependencies ([@puddly] - [#106147])
+- Bump life360 to 6.0.1 ([@pnbruckner] - [#106149])
+- Fix bug with non-existent Notion bridge IDs ([@bachya] - [#106152])
+- Fix Netatmo light switching states by assuming state until next update ([@cgtobi] - [#106162])
+- Bump Devialet to 1.4.4 ([@fwestenberg] - [#106171])
+- Bump ring-doorbell to 0.8.5 ([@sdb9696] - [#106178])
+- Bump Devialet to 1.4.5 ([@fwestenberg] - [#106184])
+- Bump aiopulse to 0.4.4 ([@atmurray] - [#106239])
+- Fix Shelly consumption_types ([@emontnemery] - [#106273])
+- Missing exception on relogin in Honeywell ([@mkmer] - [#106324])
+- Redact unique id from diagnostics in blink ([@mkmer] - [#106413])
+
+[#105135]: https://github.com/home-assistant/core/pull/105135
+[#105324]: https://github.com/home-assistant/core/pull/105324
+[#105364]: https://github.com/home-assistant/core/pull/105364
+[#105488]: https://github.com/home-assistant/core/pull/105488
+[#105489]: https://github.com/home-assistant/core/pull/105489
+[#105655]: https://github.com/home-assistant/core/pull/105655
+[#105743]: https://github.com/home-assistant/core/pull/105743
+[#105757]: https://github.com/home-assistant/core/pull/105757
+[#105807]: https://github.com/home-assistant/core/pull/105807
+[#105811]: https://github.com/home-assistant/core/pull/105811
+[#105812]: https://github.com/home-assistant/core/pull/105812
+[#105830]: https://github.com/home-assistant/core/pull/105830
+[#105833]: https://github.com/home-assistant/core/pull/105833
+[#105860]: https://github.com/home-assistant/core/pull/105860
+[#105870]: https://github.com/home-assistant/core/pull/105870
+[#105946]: https://github.com/home-assistant/core/pull/105946
+[#105951]: https://github.com/home-assistant/core/pull/105951
+[#105954]: https://github.com/home-assistant/core/pull/105954
+[#105992]: https://github.com/home-assistant/core/pull/105992
+[#105993]: https://github.com/home-assistant/core/pull/105993
+[#105998]: https://github.com/home-assistant/core/pull/105998
+[#106094]: https://github.com/home-assistant/core/pull/106094
+[#106101]: https://github.com/home-assistant/core/pull/106101
+[#106134]: https://github.com/home-assistant/core/pull/106134
+[#106147]: https://github.com/home-assistant/core/pull/106147
+[#106149]: https://github.com/home-assistant/core/pull/106149
+[#106152]: https://github.com/home-assistant/core/pull/106152
+[#106162]: https://github.com/home-assistant/core/pull/106162
+[#106171]: https://github.com/home-assistant/core/pull/106171
+[#106178]: https://github.com/home-assistant/core/pull/106178
+[#106184]: https://github.com/home-assistant/core/pull/106184
+[#106239]: https://github.com/home-assistant/core/pull/106239
+[#106273]: https://github.com/home-assistant/core/pull/106273
+[#106324]: https://github.com/home-assistant/core/pull/106324
+[#106413]: https://github.com/home-assistant/core/pull/106413
+[@Noltari]: https://github.com/Noltari
+[@OnFreund]: https://github.com/OnFreund
+[@agners]: https://github.com/agners
+[@atmurray]: https://github.com/atmurray
+[@bachya]: https://github.com/bachya
+[@bdraco]: https://github.com/bdraco
+[@benleb]: https://github.com/benleb
+[@bieniu]: https://github.com/bieniu
+[@cgtobi]: https://github.com/cgtobi
+[@emontnemery]: https://github.com/emontnemery
+[@frenck]: https://github.com/frenck
+[@fwestenberg]: https://github.com/fwestenberg
+[@mib1185]: https://github.com/mib1185
+[@mkmer]: https://github.com/mkmer
+[@pnbruckner]: https://github.com/pnbruckner
+[@puddly]: https://github.com/puddly
+[@sdb9696]: https://github.com/sdb9696
+[@starkillerOG]: https://github.com/starkillerOG
+[@synesthesiam]: https://github.com/synesthesiam
+[@vexofp]: https://github.com/vexofp
+
## Need help? Join the community!
Home Assistant has a great community of users who are all more than willing
diff --git a/source/_posts/2023-12-07-homewizard-joins-works-with-home-assistant-program.markdown b/source/_posts/2023-12-07-homewizard-joins-works-with-home-assistant-program.markdown
new file mode 100644
index 000000000000..42deaa5f44c8
--- /dev/null
+++ b/source/_posts/2023-12-07-homewizard-joins-works-with-home-assistant-program.markdown
@@ -0,0 +1,32 @@
+---
+layout: post
+title: "HomeWizard joins Works With Home Assistant program"
+description: "HomeWizard makes Wi-Fi devices that give insight into electricity, water, and gas consumption. The devices integrate locally into Home Assistant."
+date: 2023-12-07 00:00:02
+date_formatted: "December 7, 2023"
+author: Guy Sie
+comments: true
+categories: Announcements
+og_image: /images/blog/2023-12-homewizard/homewizard-wwha-og.png
+---
+
+We’re delighted to announce that HomeWizard has joined the Works With Home Assistant program under the *‘Works Locally With Home Assistant’* badge and is committed to ensuring their products work well in Home Assistant. This Dutch company creates Wi-Fi devices that give households insight into their electricity, water, and gas consumption. They want to make people aware of their energy consumption and help them save on energy - not just because it’s good for their wallet, but also good for the world. A mission that matches our [Open Home values](/blog/2021/12/23/the-open-home/) perfectly. They will also be the first company to use our updated Works With Home Assistant badge, featuring the new Home Assistant logo!
+
+![HomeWizard works locally with Home Assistant](/images/blog/2023-12-homewizard/homewizard-wwha.png)
+
+
+HomeWizard’s journey to becoming a partner started with an engineer working on their energy meters, who developed a custom Home Assistant integration in his spare time. This custom integration grew and became part of Home Assistant core in release 2022.2, and its popularity with HomeWizard customers has led to HomeWizard adopting it and becoming an official partner today!
+
+As a result, the [HomeWizard Energy integration](/integrations/homewizard/) has been developed by listening to the Home Assistant community. Features like a local API in their products and the ability to disable cloud communication were added in response. Currently, the integration supports the following products:
+
+Wi-Fi P1 Meter (model: HWE-P1): Sensors for power import/export, energy consumption (single or three phases), information about your smart meter, and gas.
+
+Wi-Fi Energy Socket (model: HWE-SKT): Sensors for power import/export, energy consumption, and switches for controlling the outlet.
+
+Wi-Fi Watermeter (model: HWE-WTR): Sensors for active and total water usage.
+
+Wi-Fi kWh Meter (models: SDM230-wifi, SDM630-wifi): Sensors for power import/export and energy consumption.
+
+While HomeWizard is a Dutch company, their products work in many countries. For example, the P1 Meter works on [most modern meters that have a P1 port](https://helpdesk.homewizard.com/en/articles/5935311-is-my-smart-meter-compatible), the Water meter on [analog water meters with Itron, Elster, or Sensus mounting holes](https://helpdesk.homewizard.com/en/articles/6287701-is-my-analog-watermeter-compatible), and the kWh Meters can be mounted on DIN rails. All of them can be purchased from [HomeWizard’s webshop](https://www.homewizard.com/shop/).
+
+We’re very excited about this news, and we love the journey that the HomeWizard integration has taken from one engineer’s hobby to an official partnership. Check out [our original announcement](/blog/2022/07/12/partner-program/) for more information about the Works with Home Assistant partner program.
diff --git a/source/_posts/2023-12-12-silicon-labs-official-partnership-nabu-casa.markdown b/source/_posts/2023-12-12-silicon-labs-official-partnership-nabu-casa.markdown
new file mode 100644
index 000000000000..f61a30f0a2a0
--- /dev/null
+++ b/source/_posts/2023-12-12-silicon-labs-official-partnership-nabu-casa.markdown
@@ -0,0 +1,21 @@
+---
+layout: post
+title: "Silicon Labs partners with Nabu Casa to support Open Source"
+description: "Silicon Labs, the company behind Z-Wave and designer of chips used in Z-Wave, Zigbee, Thread, and more, has entered an official partnership with Nabu Casa. Our work is fundamental to the growth of the Z-Wave ecosystem, and we are happy to see this get acknowledged by Silicon Labs with this partnership. As a partner, we are now able to collaborate with Silicon Labs to report bugs and get our issues fixed with priority."
+date: 2023-12-12 00:00:02
+date_formatted: "December 12, 2023"
+author: Guy Sie
+comments: true
+categories: Announcements
+og_image: /images/blog/2023-12-siliconlabs/siliconlabs-og.png
+---
+
+[Silicon Labs](https://www.silabs.com/) has entered an official partnership with [Nabu Casa](https://www.nabucasa.com/) to offer support for our open-source and hardware efforts.
+
+![Silicon Labs and Nabu Casa](/images/blog/2023-12-siliconlabs/siliconlabs-og.png)
+
+Silicon Labs is the company behind Z-Wave and designs chips for Z-Wave, Zigbee, Thread, and more standards. Their chips provide connectivity to many devices, including Philips Hue, Ring, IKEA TRÅDFRI, and our own [Home Assistant Yellow](/yellow) and [Home Assistant SkyConnect](/skyconnect) products. In fact, every Z-Wave chip in a Z-Wave product ever made came from Silicon Labs.
+
+We love open standards because they live up to our [Open Home values](https://www.home-assistant.io/blog/2021/12/23/the-open-home/) for the smart home: privacy, choice, and sustainability. This is why Nabu Casa, with the revenue received from Home Assistant Cloud subscribers, invests heavily in integrating these open standards, which involves working on a daily basis with Silicon Labs technologies. For example, we employ [Dominic](https://github.com/alcalzone) to work full-time on [Z-Wave JS](https://github.com/zwave-js) and [Nikita](https://github.com/puddly) to work full-time on [Zigpy](https://github.com/zigpy/zigpy), the library powering Zigbee in Home Assistant. Other developers are dedicated to making sure the Silicon Labs chips inside our own hardware work perfectly in Home Assistant.
+
+Z-Wave JS is the only open-source implementation of Z-Wave, powering an increasing number of Z-Wave platforms beyond Home Assistant. Our work is fundamental to the growth of the Z-Wave ecosystem, and we are happy to see this get acknowledged by Silicon Labs with this partnership. With Home Assistant, we are exposed to many different devices running Z-Wave, Zigbee, and Thread. And as a partner, we are now able to collaborate with Silicon Labs to report bugs and get our issues fixed with priority.
diff --git a/source/_posts/2023-12-13-year-of-the-voice-chapter-5.markdown b/source/_posts/2023-12-13-year-of-the-voice-chapter-5.markdown
index 72852f10d088..c20093b7da3a 100644
--- a/source/_posts/2023-12-13-year-of-the-voice-chapter-5.markdown
+++ b/source/_posts/2023-12-13-year-of-the-voice-chapter-5.markdown
@@ -22,7 +22,7 @@ At the start of 2023, Home Assistant had basic text-based control for some devic
Home Assistant users can now create multiple voice assistants by mixing and matching components of a voice "pipeline". Home Assistant Cloud subscribers automatically gain access to high-quality voice components in over 130 languages and dialects. Fully local components are available as well, such as our [Piper] text-to-speech system, allowing for 100% offline voice control.
-In [Chapter 4], we added wake word processing directly into Home Assistant by leveraging the [openWakeWord] project. This allowed tiny voice satellites such as the [M5 ATOM Echo Development Kit][m5-tutorial] to offload wake word detection by streaming audio to a Home Assistant server. The community has been hard at work training a variety of [custom wake words](community-wake-words) that everyone can use to make their voice experience unique.
+In [Chapter 4], we added wake word processing directly into Home Assistant by leveraging the [openWakeWord] project. This allowed tiny voice satellites such as the [M5 ATOM Echo Development Kit][m5-tutorial] to offload wake word detection by streaming audio to a Home Assistant server. The community has been hard at work training a variety of [custom wake words][community-wake-words] that everyone can use to make their voice experience unique.
For the final chapter of 2023, we have expanded the available types of voice commands to include weather, temperature, and to-do lists. Voice satellites are now aware of which area they're in, and more hardware/software options are available too.
@@ -30,7 +30,7 @@ Happy holidays!
-Assist running on the ESP32-S3-BOX-3.
+Assist running on the ESP32-S3-BOX.
@@ -40,8 +40,8 @@ Assist running on the ESP32-S3-BOX-3.
Espressif recently released the [ESP32-S3-BOX-3], an update of the discontinued ESP32-S3-BOX (and "lite" variant). This "AIoT" development kit contains an ESP32-S3 chip, dual microphones, a small speaker, and a screen. Several docks are available in the box, which expose a USB-C power connector and GPIO pins for expanding the device.
-
-Assist running on the ESP32-S3-BOX-3 with custom artwork.
+
+Assist running on the ESP32-S3-BOX with custom artwork.
The [ESPHome] team has been hard at work adding support for the S3-BOX-3, including the ability to customize the display! Check out the [S3-BOX-3 tutorial][s3-box-tutorial] to get started.
@@ -58,7 +58,7 @@ Starting all the way back in [Chapter 1], we added voice commands for:
- Turning lights and other devices on and off
- Opening and closing doors, windows, etc.
- Setting the brightness and color of lights
-- Adding items to a shopping list
+- Adding items to a shopping list
- Asking questions, such as which windows are open in an area
For Chapter 5, we've extended this list to include:
@@ -80,7 +80,7 @@ Voice satellites can be placed all around the house, and it's important to keep
Voice satellites make use of the area they're in.
-This is a small start to satellites being aware of their *context*, and adjusting behavior accordingly.
+This is a small start to satellites being aware of their *context*, and adjusting behavior accordingly.
## Improved Raspberry Pi satellites
@@ -120,22 +120,22 @@ Thanks to our language leaders for extending the sentence support to all the var
-[Year of the Voice]: https://www.home-assistant.io/blog/2022/12/20/year-of-voice/
-[Chapter 1]: https://www.home-assistant.io/blog/2023/01/26/year-of-the-voice-chapter-1/
-[Chapter 4]: https://www.home-assistant.io/blog/2023/10/20/year-of-the-voice-chapter-4/
-[Assist]: https://www.home-assistant.io/voice_control/
-[exposed]: https://www.home-assistant.io/voice_control/voice_remote_expose_devices/
-[alias]: https://www.home-assistant.io/voice_control/aliases
+[Year of the Voice]: /blog/2022/12/20/year-of-voice/
+[Chapter 1]: /blog/2023/01/26/year-of-the-voice-chapter-1/
+[Chapter 4]: /blog/2023/10/20/year-of-the-voice-chapter-4/
+[Assist]: /voice_control/
+[exposed]: /voice_control/voice_remote_expose_devices/
+[alias]: /voice_control/aliases
[wyoming]: https://github.com/rhasspy/wyoming
[openWakeWord]: https://github.com/dscripka/openWakeWord
[Piper]: https://github.com/rhasspy/piper/
[community-wake-words]: https://github.com/fwartner/home-assistant-wakewords-collection
[ESP32-S3-BOX-3]: https://www.espressif.com/en/news/ESP32-S3-BOX-3
-[wyoming]: https://www.home-assistant.io/integrations/wyoming
+[wyoming]: /integrations/wyoming
[wyoming-satellite]: https://github.com/rhasspy/wyoming-satellite
[rpi-zero-2w]: https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/
-[s3-box-tutorial]: https://www.home-assistant.io/voice_control/s3_box_voice_assistant/
+[s3-box-tutorial]: /voice_control/s3_box_voice_assistant/
[ESPHome]: https://esphome.io
[nabucasa]: https://www.nabucasa.com
[phone-tutorial]: https://www.home-assistant.io/voice_control/worlds-most-private-voice-assistant/
-[m5-tutorial]: http://localhost:4000/voice_control/thirteen-usd-voice-remote/
+[m5-tutorial]: /voice_control/thirteen-usd-voice-remote/
diff --git a/source/_posts/2023-12-14-disabling new login page functionality.markdown b/source/_posts/2023-12-14-disabling new login page functionality.markdown
new file mode 100644
index 000000000000..f5c2ce3b5d6f
--- /dev/null
+++ b/source/_posts/2023-12-14-disabling new login page functionality.markdown
@@ -0,0 +1,25 @@
+---
+layout: post
+title: "Disabling new login page functionality"
+description: "Why we are removing the redesigned login page introduced in release 2023.12 in patch 2023.12.3."
+date: 2023-12-14 00:00:00
+date_formatted: "December 14, 2023"
+author: Paulus Schoutsen
+author_twitter: balloob
+comments: true
+categories: Public-Service-Announcement
+---
+
+In [release 2023.12](https://www.home-assistant.io/blog/2023/12/06/release-202312/) we added a redesigned login page to Home Assistant. It detects when you are accessing Home Assistant via your local home network, and if so, presents a redesigned login experience that shows your user profiles. If you access Home Assistant from outside your home network, the login page still asks for your username and password, like before.
+
+We have heard the concerns from the community that this functionality can open up your Home Assistant instance to a user enumeration attack from within the local network. A malicious actor with access to your local network could get the names and pictures of all Home Assistant users. They could use this information to make attacking your Home Assistant instance easier.
+
+A security issue was filed for this on December 10, we have accepted and published the corresponding [GitHub Security Advisory](https://github.com/home-assistant/core/security/advisories/GHSA-jqpc-rc7g-vf83), and have disabled the redesigned login page functionality in patch 2023.12.3 released on December 14.
+
+While researching the feedback we received, we were troubled to discover that the users who experienced problems with the new login page often used misconfigured reverse proxies. When the reverse proxy is not configured correctly, Home Assistant is no longer able to discern between traffic from your local home network or a public network. These users would see the redesigned login page when accessing Home Assistant from outside their home network.
+
+To improve the network security of these users, we are researching how we can use Home Assistant to detect more variations of misconfigured proxies and inform them about it.
+
+We redesigned the login page because we believed the local home network is within the privacy of your own home and a trusted environment for showing the people in it. We assumed that users attempting to log in on the local network are also trusted and allowed to see other user profiles, similar to what Microsoft, Apple, Netflix, and other companies assume in their products.
+
+That said, we do hear you and take your feedback, and the potential security risk to users with misconfigured reverse proxies, seriously. Thank you for bringing this to our attention and being open about your concerns.
diff --git a/source/_posts/2023-12-27-companion-app-for-ios-202312-lets-go.markdown b/source/_posts/2023-12-27-companion-app-for-ios-202312-lets-go.markdown
new file mode 100644
index 000000000000..dafa8987f274
--- /dev/null
+++ b/source/_posts/2023-12-27-companion-app-for-ios-202312-lets-go.markdown
@@ -0,0 +1,53 @@
+---
+layout: post
+title: "Companion app for iOS 2023.12: Let’s go!"
+description: "Bruno Pantaleão has joined Nabu Casa as an iOS engineer and will work on improving the experience of the Companion App for iOS users. 2023.12 brings us Apple Thread credentials sharing, a new WatchOS icon, a **Select All** scene toggle, and a **What’s New** link."
+date: 2023-12-27 00:00:02
+date_formatted: "December 27, 2023"
+author: Bruno Pantaleão
+comments: true
+categories: iOS Release-Notes
+og_image: /images/blog/2023-12-ios-lets-go/ios-og.png
+---
+
+We have good news for those hoping for more features and faster development of the iOS Companion App! I, Bruno Pantaleão, have joined Nabu Casa as an iOS engineer (of course, also working on watchOS, iPadOS, and macOS apps), and am planning to continue the great work done by Robbie Trencheny, Zac West, and the community, giving the iOS app the attention that it deserves. So let’s talk about this month’s 2023.12 release of the app!
+
+![Companion App for iOS 2023.12](/images/blog/2023-12-ios-lets-go/ios-og.png)
+
+
+
+## Apple Thread network credentials sharing
+
+If you have HomePods or Apple TVs and you also have a Thread border router in Home Assistant, you may want to take advantage of Apple’s network to control devices in your home. You can now import your Apple Thread credentials into Home Assistant and then make Apple the preferred Thread network.
+
+![Apple Thread network credentials sharing](/images/blog/2023-12-ios-lets-go/1.png)
+
+## New watchOS App Icon
+
+We updated the Apple Watch App Icon with the new Home Assistant logo.
+
+![New watchOS App Icon](/images/blog/2023-12-ios-lets-go/2.png)
+
+## Toggle all scenes for watchOS
+
+Previously, you would have to disable scenes one by one to hide them on your Apple Watch. If you, like me, have a Philips Hue bridge, you would probably see several auto-generated scenes (like ‘Bathroom concentrate’ and ‘Bathroom Arctic aurora’ below :D ) that are not always relevant to see on your watch. We added a button to quickly toggle between all scenes now in the iOS companion app.
+
+![Toggle all scenes for watchOS](/images/blog/2023-12-ios-lets-go/3.png)
+
+## Keep up with “What’s new” in the App
+
+We have added a **What’s new?** link in companion App settings so you can quickly access the latest App release notes.
+
+![Keep up with Whats new in the App](/images/blog/2023-12-ios-lets-go/4.jpeg)
+
+## Support for iOS 12, 13, and 14 in 2024.01
+
+In the new year, we will do some housecleaning to make sure that the iOS Companion App is prepared for the future. To do so, we will stop supporting iOS 12, 13, and 14 in release 2024.01 of the Companion App. We know our users are repurposing older phones and tablets into dashboards and controls for their homes, which aligns with our focus on sustainability. It's why we try to keep our apps running on older devices for as long as we can.
+
+Currently, less than 1% of our users (according to the App Store analytics provided by users who gave permission to share their data with Apple) are still on these three iOS versions. Supporting them makes the codebase hard to maintain and blocks us from using newer iOS features. This change will make it easier for new contributors to feel comfortable contributing to the iOS codebase, which is also one of my goals. With a more modern codebase, we can give more attention to PRs and help other contributors have everything they need to feel comfortable submitting PRs.
+
+This does not mean your iOS 12, 13, or 14 devices have become unusable. You can still access your Home Assistant using the browser if you have a device that can't update past iOS 12, such as the 2014 iPhone 6 or iPad Mini 3. All other devices currently capable of running iOS 13 or 14 can be updated to iOS 15 or higher and use the new versions of the iOS Companion App.
+
+## On the roadmap
+
+Wondering what we have on the roadmap for our Apple apps? We’re still working on it, but you can expect further developments to make Home Assistant on the Apple ecosystem more integrated, bringing shared features between iPhone, Apple Watch, iPad, and Mac - and I’m looking forward to getting my hands on Apple Vision Pro and seeing the possibilities it brings to the Open Home. We’re also planning on improvements to Siri shortcuts widgets and as many new sensors as possible. Another feature that is on our radar is Assist; in 2023, we completed the Year of the Voice. Android users benefitted from some extra functions compared to iOS users, and we want to make sure we catch up and bring these features to iPhones as well!
\ No newline at end of file
diff --git a/source/_posts/2024-01-03-release-20241.markdown b/source/_posts/2024-01-03-release-20241.markdown
new file mode 100644
index 000000000000..13c0cc350f12
--- /dev/null
+++ b/source/_posts/2024-01-03-release-20241.markdown
@@ -0,0 +1,975 @@
+---
+layout: post
+title: "2024.1: Happy automating!"
+description: "Happy New Year! 🥂 2024.1 starts with many UI improvements to our automation editor, due date and description support for to-do items, a brand new valve entity, and more card features!"
+date: 2024-01-03 00:00:00
+date_formatted: "January 3, 2024"
+author: Franck Nijhof
+author_twitter: frenck
+comments: true
+categories:
+ - Release-Notes
+ - Core
+og_image: /images/blog/2024-01/social.png
+---
+
+
+
+Happy New Year! 🍾
+
+We wish you, and all the loved ones around you, all the best for 2024! 🥂
+
+I cannot think of a better way to start the new year: Home Assistant Core 2024.1! 🎉
+
+This release is fairly small, as expected; we are just coming out of the holiday
+season. However, it does contain some nice improvements and
+features to be excited about and a stunning total of 13 new integrations!
+
+My favorite: the automation editor changes. It had quite a bunch of user
+interface tweaks. Most are focused on making it friendlier and easier to use
+for new and long-term users, making it quicker to find the right trigger,
+condition, or action.
+
+I greatly like this improved experience, and I hope you do too!
+
+Enjoy the release!
+
+../Frenck
+
+
+
+- [Automation editor improvements](#automation-editor-improvements)
+ - [Improved empty automations dashboard](#improved-empty-automations-dashboard)
+ - [Guidance when creating a new automation](#guidance-when-creating-a-new-automation)
+ - [Building blocks](#building-blocks)
+ - [Improved trigger, condition \& action buttons](#improved-trigger-condition--action-buttons)
+ - [Unified actions](#unified-actions)
+- [Description \& due date support for to-do list items](#description--due-date-support-for-to-do-list-items)
+- [New entity type: Valve](#new-entity-type-valve)
+- [Swappable current/target on thermostat \& humidifier cards](#swappable-currenttarget-on-thermostat--humidifier-cards)
+- [New card features](#new-card-features)
+- [Other noteworthy changes](#other-noteworthy-changes)
+- [New integrations](#new-integrations)
+- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui)
+- [Release 2024.1.1 - January 5](#release-202411---january-5)
+- [Release 2024.1.2 - January 6](#release-202412---january-6)
+- [Release 2024.1.3 - January 12](#release-202413---january-12)
+- [Release 2024.1.4 - January 19](#release-202414---january-19)
+- [Release 2024.1.5 - January 20](#release-202415---january-20)
+- [Release 2024.1.6 - January 30](#release-202416---january-30)
+- [Need help? Join the community!](#need-help-join-the-community)
+- [Backward-incompatible changes](#backward-incompatible-changes)
+- [All changes](#all-changes)
+
+Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=dRwzSkKYIDs)
+3 January 2024, at 12:00 PST / 21:00 CET!
+
+
+
+## Automation editor improvements
+
+The automation editor got some love for this release, with many small
+improvements to make it easier for both new and long-time users.
+
+As there are many small improvements, let’s go over them individually.
+
+PS: One quick note: all changes are UI changes, meaning that these changes
+do not affect the underlying automation configuration. All your existing
+automations will continue to work as they did before.
+
+### Improved empty automations dashboard
+
+If you start with Home Assistant, visiting the automations dashboard would
+result in an empty page. That is not very helpful if you see this for the
+first time. So, we’ve improved that!
+
+You are now greeted by the little automation robot that explains what an
+automation is and references to the documentation that can help you get started.
+
+
+
+A small but effective improvement to help new users get started. We have also
+applied this same improvement to the scripts and scenes dashboards.
+
+### Guidance when creating a new automation
+
+When starting a new automation from scratch, you used to be greeted by some,
+possibly, new terminology and almost a blank page with some buttons to
+add triggers, conditions or actions. As a new user, this immediately imposes
+a challenge: what do I need to do?
+
+You guessed it: We have slightly improved that. We have changed the big headers
+to be more descriptive and less technical. We have also added some help text to
+explain each section, including examples of what they can be used for.
+
+
+
+Don’t worry; we’ll hide the explanation once you add elements to the sections
+to keep the overview of existing automations as clean as possible.
+
+### Building blocks
+
+You might have noticed in the screenshots above the conditions and actions have
+a new button next to them: **+ Add building block**.
+
+Selecting these new buttons allows you to add logical elements to your
+automation or scripts, like **And**, **Or**, **If-then**, **Choose**, etc.
+
+These used to be mixed in with the conditions and actions but now have their
+own dedicated button. It makes it easier to find them and declutters the
+list of conditions and actions.
+
+
+
+Notice how this now opens up a dialog? A dialog gives us more space to describe
+what each building block does and room for a search box to find the one you need.
+
+### Improved trigger, condition & action buttons
+
+The bigger change can be found in the buttons to add a trigger, conditions,
+or actions to your automation. This change was not just aimed at new users
+but also long-time users.
+
+All these buttons are used to give a dropdown that allows you to select the
+type of trigger, condition, or action you want to add. This dropdown has been
+replaced by a new dialog similar to the one we just saw for the building blocks.
+
+Like the building block, it describes what each trigger, condition,
+or action does. These descriptions are important, as they help you understand
+what they do.
+
+
+
+If you add an element, we will first show you the most used
+triggers/conditions/actions by our community. We now have all others neatly
+grouped. For actions, we took it a step further and unified them with
+service calls.
+
+### Unified actions
+
+If you have been using Home Assistant for a while, you are probably familiar
+with the “service call”-action that you can add to your automation. But,
+honestly, what is a “service call”? It is a bit of a technical term that is
+especially confusing for newer users. You just want to turn on a light, right?
+
+This release unifies those “service calls” with all other actions, meaning
+there is no “service call” anymore; that layer has been refactored from the UI.
+Instead, you add an action and select the action you want to take, for example,
+turn on a light.
+
+
+
+This means that if you add an action, you see all actions (including all
+service calls), categorized, with description, and searchable! Being able
+to search through all available actions is a huge improvement.
+
+
+
+By default, just like with the triggers and conditions, we show you the most
+used actions first and the actions for the entities you have on your system.
+All others are neatly grouped by integration in the **Other actions** section.
+
+
+
+## Description & due date support for to-do list items
+
+The to-do list integration keeps getting better and better. This release adds
+support for descriptions and due dates!
+
+If the integration you are using supports it, you can now add descriptions to
+each task on your list. It fully supports the Markdown markup to add links,
+bold text, etc. If due dates (or due date + time) are supported, you can
+set these.
+
+
+
+As shown in the screenshot above, there is a whole new dialog to adjust
+your to-do item. But this is not the only change. The list itself has been
+improved as well.
+
+
+
+It is much cleaner, all big text boxes are gone, and each item is nicely
+formatted, including an excerpt of the description and the due date. If the due
+date is overdue, it will be highlighted.
+
+## New entity type: Valve
+
+A brand new entity type has been added to Home Assistant: Valve!
+
+Integrations can use this entity type to expose valves, such as a valve on
+a radiator, pool, sprinkler system, and main house gas or water line.
+
+
+
+Currently, the [Shelly integration] supports it and now provides a `valve` entity
+for the Valve addon for Shelly Gas. Additionally, support for it has been
+added to [MQTT], and the valve entities also work with Amazon Alexa
+and Google Assistant.
+
+Tip: Do you have a switch entity that controls a valve? You can now change the
+entity type to valve in the entity settings.
+
+[Shelly integration]: /integrations/shelly
+[MQTT]: integrations/valve.mqtt
+
+## Swappable current/target on thermostat & humidifier cards
+
+By popular demand, the thermostat and humidifier cards now support setting
+current temperature/humidity as the primary information to show on the
+card.
+
+You can enable the **show current temperature as primary information** option
+in the card, which will result in the target temperature being swapped with the
+current temperature in the card.
+
+
+
+## New card features
+
+Last year, we saw many new features added to the cards, so let's start
+the new year with some more!
+
+[@Quentame] added the climate fan mode card feature. This feature can be
+used with both the thermostat and the tile card:
+
+
+
+Also new is the update actions card feature. This addition by [@piitaya] allows
+you to add buttons to a card to trigger update actions when pressed.
+
+
+
+[@piitaya]: https://github.com/piitaya
+[@Quentame]: https://github.com/Quentame
+
+## Other noteworthy changes
+
+There are many more improvements in this release; here are some of the other
+noteworthy changes this release:
+
+- Two brand new [template functions] have been added this release: `median` and
+ `statistical_mode`. Thanks, [@TheFes]!
+- [@bieniu] added support for the brand new Shelly 3rd generation devices to
+ the [Shelly] integration. Nice!
+- A long-time shutdown bug has been fixed: You can now run automations triggered
+ when Home Assistant shuts down. This could, for example, be used to send
+ yourself a notification when that happens. Thanks, [@tetele]!
+- Created your own fan controller using [ESPHome]? You can now add preset modes
+ to it! Thanks, [@mill1000]!
+- The [ping] integration now has the option to configure the number of seconds
+ that must elapse before considering a disconnected device "not at home".
+ Awesome, [@jpbede]!
+- Looking for the ZAMG integration? It has been renamed to [GeoSphere Austria].
+ Thanks, [@killer0071234]!
+- Got one of those Sonos amps? [@jjlawren] added support for the subwoofer
+ crossover setting to the [Sonos] integration. Nice!
+- [@tkdrob] added support for the new calendar entity to the [Radarr] integration.
+ So you can see the release schedules straight from Home Assistant. Awesome!
+- You can now configure the minimal number of samples the [trend] helper uses.
+ It allows you to make it less sensitive when there is not that much data.
+ Thanks, [@jpbede]!
+- Got cold toes in bed? [@kbickar] to the rescue! He added support for
+ foot warmers to the [SleepIQ] integration. Nice!
+
+[@bieniu]: https://github.com/bieniu
+[@jjlawren]: https://github.com/jjlawren
+[@jpbede]: https://github.com/jpbede
+[@kbickar]: https://github.com/kbickar
+[@killer0071234]: https://github.com/killer0071234
+[@mill1000]: https://github.com/mill1000
+[@tetele]: https://github.com/tetele
+[@TheFes]: https://github.com/TheFes
+[@tkdrob]: https://github.com/tkdrob
+[ESPHome]: /integrations/esphome
+[GeoSphere Austria]: /integrations/zamg
+[ping]: /integrations/ping
+[Radarr]: /integrations/radarr
+[Shelly]: /integrations/shelly
+[SleepIQ]: /integrations/sleepiq
+[Sonos]: /integrations/sonos
+[template functions]: /docs/configuration/templating/#numeric-functions-and-filters
+[trend]: /integrations/trend
+
+## New integrations
+
+We welcome the following new integrations in this release:
+
+- **[A. O. Smith]**, added by [@bdr99]
+ Integrate and control your A. O. Smith water heater.
+- **[Blue Current]**, added by [@Floris272]
+ Monitor your Blue Current EV charger charge point(s).
+- **[DROP]**, added by [@pfrazer]
+ Manage your DROP Smart Water System with Home Assistant.
+- **[Flexit Nordic (BACnet)]**, added by [@lellky]
+ Control and monitor your Flexit Nordic series air handling units.
+- **[Holiday]**, added by [@jrieger]
+ Add holiday calendars to Home Assistant for powering automations.
+- **[Midea CCM15 AC Controller]**, added by [@ocalvo]
+ Use your AC connected to a Midea CCM15 AC Controller.
+- **[OSO Energy]**, added by [@osohotwateriot]
+ Use your OSO Energy water heater with Home Assistant.
+- **[Sun WEG]**, added by [@rokam]
+ Collect and monitor energy production data from your Sun WEG inverter.
+- **[Tailwind]**, added by [@frenck]
+ Operate your garage door openers connected to a Tailwind smart garage door controller.
+- **[Tessie]**, added by [@Bre77]
+ Integrate, monitor and control your Tesla vehicle connected to the Tessie platform.
+- **[Refoss]**, added by [@ashionky]
+ Use your Refoss smart devices directly with Home Assistant.
+- **[Valve]**, added by [@cibernox]
+ An entity type for valves, which can be used by integrations to expose valves.
+- **[Vogel's MotionMount]**, added by [@RJPoelstra]
+ Control the position of your Vogel's MotionMount TV mount.
+
+[@ashionky]: https://github.com/ashionky
+[@bdr99]: https://github.com/bdr99
+[@Bre77]: https://github.com/Bre77
+[@cibernox]: https://github.com/cibernox
+[@Floris272]: https://github.com/Floris272
+[@frenck]: https://github.com/frenck
+[@jrieger]: https://github.com/jrieger
+[@lellky]: https://github.com/lellky
+[@ocalvo]: https://github.com/ocalvo
+[@osohotwateriot]: https://github.com/osohotwateriot
+[@pfrazer]: https://github.com/pfrazer
+[@RJPoelstra]: https://github.com/RJPoelstra
+[@rokam]: https://github.com/rokam
+[A. O. Smith]: /integrations/aosmith
+[Blue Current]: /integrations/blue_current
+[DROP]: /integrations/drop_connect
+[Flexit Nordic (BACnet)]: /integrations/flexit_bacnet
+[Holiday]: /integrations/holiday
+[Midea CCM15 AC Controller]: /integrations/ccm15
+[OSO Energy]: /integrations/osoenergy
+[Refoss]: /integrations/refoss
+[Sun WEG]: /integrations/sunweg
+[Tailwind]: /integrations/tailwind
+[Tessie]: /integrations/tessie
+[Valve]: /integrations/valve
+[Vogel's MotionMount]: /integrations/motionmount
+
+This release also has a new virtual integration. Virtual integrations are stubs
+that are handled by other (existing) integrations to help with findability.
+The following virtual integrations have been added:
+
+- **[AEP Ohio]**, provided by [Opower]
+- **[AEP Texas]**, provided by [Opower]
+- **[Appalachian Power]**, provided by [Opower]
+- **[Fujitsu anywAIR]**, provided by [Advantage Air]
+- **[Indiana Michigan Power]**, provided by [Opower]
+- **[Kentucky Power]**, provided by [Opower]
+- **[Public Service Company of Oklahoma (PSO)]**, provided by [Opower]
+- **[Seattle City Light]**, provided by [Opower]
+- **[Southwestern Electric Power Company (SWEPCO)]**, provided by [Opower]
+
+[Advantage Air]: /integrations/advantage_air
+[AEP Ohio]: /integrations/aep_ohio
+[AEP Texas]: /integrations/aep_texas
+[Appalachian Power]: /integrations/appalachianpower
+[Fujitsu anywAIR]: /integrations/fujitsu_anywair
+[Indiana Michigan Power]: /integrations/indianamichiganpower
+[Kentucky Power]: /integrations/kentuckypower
+[Opower]: /integrations/opower
+[Public Service Company of Oklahoma (PSO)]: /integrations/psoklahoma
+[Seattle City Light]: /integrations/scl
+[Southwestern Electric Power Company (SWEPCO)]: /integrations/swepco
+
+## Integrations now available to set up from the UI
+
+The following integrations are now available via the Home Assistant UI:
+
+- **[Netgear LTE]**, done by [@tkdrob]
+- **[StreamLabs]**, done by [@joostlek]
+- **[Suez Water]**, done by [@joostlek]
+- **[Swiss public transport]**, done by [@miaucl]
+- **[System Monitor]**, done by [@gjohansson-ST]
+- **[Trend]**, done by [@jpbede]
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@miaucl]: https://github.com/miaucl
+[@tkdrob]: https://github.com/tkdrob
+[Netgear LTE]: /integrations/netgear_lte
+[StreamLabs]: /integrations/streamlabswater
+[Suez Water]: /integrations/suez_water
+[Swiss public transport]: /integrations/swiss_public_transport
+[System Monitor]: /integrations/systemmonitor
+[Trend]: /integrations/trend
+
+## Release 2024.1.1 - January 5
+
+- Enable strict typing for airthings_ble ([@cdce8p] - [#106815])
+- Fix qBittorrent torrent count when empty ([@finder39] - [#106903])
+- Bump dropmqttapi to 1.0.2 ([@pfrazer] - [#106978])
+- bump openwebifpy to 4.0.3 ([@autinerd] - [#106593])
+- Close stale connections (Airthings BLE) ([@LaStrada] - [#106748])
+- Bump openwebifpy to 4.0.4 ([@autinerd] - [#107000])
+- Get Shelly RPC device `gen` from config entry data ([@bieniu] - [#107019])
+- Fix missing backwards compatiblity layer for humidifier supported_features ([@bdraco] - [#107026])
+- Use async_register in streamlabswater ([@joostlek] - [#107060])
+- Fix data access in streamlabs water ([@joostlek] - [#107062])
+- Fix mobile_app cloudhook creation ([@edenhaus] - [#107068])
+- Deduplicate handling of duplicated constants ([@emontnemery] - [#107074])
+- Fix missing backwards compatibility layer for water_heater supported_features ([@bdraco] - [#107091])
+- Bump habluetooth to 2.0.2 ([@bdraco] - [#107097])
+- Include deprecated constants in wildcard imports ([@emontnemery] - [#107114])
+- Update frontend to 20240104.0 ([@bramkragten] - [#107155])
+- Bump Orvibo to 1.1.2 ([@emericklaw] - [#107162])
+- Bump aiohomekit to 3.1.2 ([@bdraco] - [#107177])
+- Bump to PyTado 0.17.3 ([@erwindouna] - [#107181])
+- Fix switch states in AVM FRITZ!Box Tools ([@mib1185] - [#107183])
+- Hotfix cache logic bug in Tessie ([@Bre77] - [#107187])
+- Disable IPv6 in the opower integration to fix AEP utilities ([@tronikos] - [#107203])
+- Fix entity property cache creation arguments ([@ppetru] - [#107221])
+- Use supported_features_compat in update.install service ([@ludeeus] - [#107224])
+- Bump zwave-js-server-python to 0.55.3 ([@raman325] - [#107225])
+
+[#106593]: https://github.com/home-assistant/core/pull/106593
+[#106748]: https://github.com/home-assistant/core/pull/106748
+[#106815]: https://github.com/home-assistant/core/pull/106815
+[#106903]: https://github.com/home-assistant/core/pull/106903
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#106978]: https://github.com/home-assistant/core/pull/106978
+[#107000]: https://github.com/home-assistant/core/pull/107000
+[#107019]: https://github.com/home-assistant/core/pull/107019
+[#107026]: https://github.com/home-assistant/core/pull/107026
+[#107060]: https://github.com/home-assistant/core/pull/107060
+[#107062]: https://github.com/home-assistant/core/pull/107062
+[#107068]: https://github.com/home-assistant/core/pull/107068
+[#107074]: https://github.com/home-assistant/core/pull/107074
+[#107091]: https://github.com/home-assistant/core/pull/107091
+[#107097]: https://github.com/home-assistant/core/pull/107097
+[#107114]: https://github.com/home-assistant/core/pull/107114
+[#107155]: https://github.com/home-assistant/core/pull/107155
+[#107162]: https://github.com/home-assistant/core/pull/107162
+[#107177]: https://github.com/home-assistant/core/pull/107177
+[#107181]: https://github.com/home-assistant/core/pull/107181
+[#107183]: https://github.com/home-assistant/core/pull/107183
+[#107187]: https://github.com/home-assistant/core/pull/107187
+[#107203]: https://github.com/home-assistant/core/pull/107203
+[#107221]: https://github.com/home-assistant/core/pull/107221
+[#107224]: https://github.com/home-assistant/core/pull/107224
+[#107225]: https://github.com/home-assistant/core/pull/107225
+[@Bre77]: https://github.com/Bre77
+[@LaStrada]: https://github.com/LaStrada
+[@autinerd]: https://github.com/autinerd
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@cdce8p]: https://github.com/cdce8p
+[@edenhaus]: https://github.com/edenhaus
+[@emericklaw]: https://github.com/emericklaw
+[@emontnemery]: https://github.com/emontnemery
+[@erwindouna]: https://github.com/erwindouna
+[@finder39]: https://github.com/finder39
+[@frenck]: https://github.com/frenck
+[@joostlek]: https://github.com/joostlek
+[@ludeeus]: https://github.com/ludeeus
+[@mib1185]: https://github.com/mib1185
+[@pfrazer]: https://github.com/pfrazer
+[@ppetru]: https://github.com/ppetru
+[@raman325]: https://github.com/raman325
+[@tronikos]: https://github.com/tronikos
+
+## Release 2024.1.2 - January 6
+
+- Fix support for play/pause functionality in System Bridge ([@timmo001] - [#103423])
+- Fix passing correct location id to streamlabs water ([@joostlek] - [#107291])
+- Fix Shelly missing Gen value for older devices ([@thecode] - [#107294])
+- enigma2: fix exception when device in deep sleep, fix previous track ([@autinerd] - [#107296])
+- Fix assertion error when unloading ZHA with pollable entities ([@dmulcahey] - [#107311])
+
+[#103423]: https://github.com/home-assistant/core/pull/103423
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#107239]: https://github.com/home-assistant/core/pull/107239
+[#107291]: https://github.com/home-assistant/core/pull/107291
+[#107294]: https://github.com/home-assistant/core/pull/107294
+[#107296]: https://github.com/home-assistant/core/pull/107296
+[#107311]: https://github.com/home-assistant/core/pull/107311
+[@autinerd]: https://github.com/autinerd
+[@dmulcahey]: https://github.com/dmulcahey
+[@frenck]: https://github.com/frenck
+[@joostlek]: https://github.com/joostlek
+[@thecode]: https://github.com/thecode
+[@timmo001]: https://github.com/timmo001
+
+## Release 2024.1.3 - January 12
+
+- Add diagnostics to A. O. Smith integration ([@bdr99] - [#106343])
+- Catch missing inverter in Enphase Envoy ([@catsmanac] - [#106730])
+- Prevent toggle from calling stop on covers which do not support it ([@vexofp] - [#106848])
+- Fix missing unique_id for spt integration ([@miaucl] - [#107087])
+- Add support for the Spotify DJ ([@BTMorton] - [#107268])
+- Fix evohome high_precision temps not retreived consistently ([@zxdavb] - [#107366])
+- Reduce polling rate in Blink ([@mkmer] - [#107386])
+- Fix KNX telegram device trigger not firing after integration reload ([@farmio] - [#107388])
+- Fix language flavors in holiday ([@gjohansson-ST] - [#107392])
+- Handle OSError during setup for System Monitor ([@gjohansson-ST] - [#107396])
+- Remove name from faa_delays ([@joostlek] - [#107418])
+- Fix Swiss public transport initial data for attributes ([@miaucl] - [#107452])
+- Fix reauth flow for Comelit VEDO ([@chemelli74] - [#107461])
+- Fix asyncio.gather call ([@cdce8p] - [#107500])
+- Fix Luftdaten sensor id string ([@mrueg] - [#107506])
+- Bump zm-py version to v0.5.3 for zoneminder ([@nabbi] - [#107331])
+- Retry zoneminder connection setup ([@nabbi] - [#107519])
+- Don't include position in binary valve attributes ([@emontnemery] - [#107531])
+- Bump blinkpy to 0.22.5 ([@mkmer] - [#107537])
+- Bump reolink_aio to 0.8.6 ([@starkillerOG] - [#107541])
+- Bump mcstatus to v11.1.1 ([@elmurato] - [#107546])
+- Bump aioshelly to 7.1.0 ([@thecode] - [#107593])
+- Fix Tado unique mobile device dispatcher ([@erwindouna] - [#107631])
+- Fix tplink_lte setup ([@cdce8p] - [#107642])
+- Prevent overriding cached attribute as property ([@emontnemery] - [#107657])
+- Set max and min temp for flexit_bacnet climate entity ([@lellky] - [#107665])
+- Fix duplicated resource issue in System Monitor ([@gjohansson-ST] - [#107671])
+- Fix invalid alexa climate or water_heater state report with double listed targetSetpoint ([@jbouwh] - [#107673])
+- Redact sensitive data in alexa debug logging ([@jbouwh] - [#107676])
+- Fix `device_class` type for Shelly Gen1 sleeping sensors ([@bieniu] - [#107683])
+- Clamp tplink color temp to valid range ([@bdraco] - [#107695])
+- Fix cloud tts loading ([@MartinHjelmare] - [#107714])
+- Allow configuration of min_gradient from UI to be negative in Trend ([@jpbede] - [#107720])
+- Bump aioswitcher to 3.4.1 ([@YogevBokobza] - [#107730])
+- Fix mqtt text text min max config params can not be equal ([@jbouwh] - [#107738])
+- Fix "not-logged" edge cases for Comelit VEDO ([@chemelli74] - [#107741])
+- Fix Mac address check in kef integration ([@eugenet8k] - [#107746])
+- Fix ld2410_ble not being able to setup because it has a stale connection ([@bdraco] - [#107754])
+- Bump pyunifiprotect to 4.23.1 ([@AngellusMortis] - [#107758])
+- Bump pyunifiprotect to 4.23.2 ([@AngellusMortis] - [#107769])
+- Rework events for UniFi Protect ([@AngellusMortis] - [#107771])
+- Fix switcher kis logging incorrect property for device's name ([@idofl] - [#107775])
+- Bump bluetooth deps ([@bdraco] - [#107816])
+- Fix Tailwind cover stuck in closing state ([@frenck] - [#107827])
+- Fix for exception in screenlogic.set_color_mode ([@dieselrabbit] - [#107850])
+- Bump aio_geojson_generic_client to 0.4 ([@exxamalte] - [#107866])
+
+[#106343]: https://github.com/home-assistant/core/pull/106343
+[#106730]: https://github.com/home-assistant/core/pull/106730
+[#106848]: https://github.com/home-assistant/core/pull/106848
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#107087]: https://github.com/home-assistant/core/pull/107087
+[#107239]: https://github.com/home-assistant/core/pull/107239
+[#107268]: https://github.com/home-assistant/core/pull/107268
+[#107331]: https://github.com/home-assistant/core/pull/107331
+[#107365]: https://github.com/home-assistant/core/pull/107365
+[#107366]: https://github.com/home-assistant/core/pull/107366
+[#107386]: https://github.com/home-assistant/core/pull/107386
+[#107388]: https://github.com/home-assistant/core/pull/107388
+[#107392]: https://github.com/home-assistant/core/pull/107392
+[#107396]: https://github.com/home-assistant/core/pull/107396
+[#107418]: https://github.com/home-assistant/core/pull/107418
+[#107452]: https://github.com/home-assistant/core/pull/107452
+[#107461]: https://github.com/home-assistant/core/pull/107461
+[#107500]: https://github.com/home-assistant/core/pull/107500
+[#107506]: https://github.com/home-assistant/core/pull/107506
+[#107519]: https://github.com/home-assistant/core/pull/107519
+[#107531]: https://github.com/home-assistant/core/pull/107531
+[#107537]: https://github.com/home-assistant/core/pull/107537
+[#107541]: https://github.com/home-assistant/core/pull/107541
+[#107546]: https://github.com/home-assistant/core/pull/107546
+[#107593]: https://github.com/home-assistant/core/pull/107593
+[#107631]: https://github.com/home-assistant/core/pull/107631
+[#107642]: https://github.com/home-assistant/core/pull/107642
+[#107657]: https://github.com/home-assistant/core/pull/107657
+[#107665]: https://github.com/home-assistant/core/pull/107665
+[#107671]: https://github.com/home-assistant/core/pull/107671
+[#107673]: https://github.com/home-assistant/core/pull/107673
+[#107676]: https://github.com/home-assistant/core/pull/107676
+[#107683]: https://github.com/home-assistant/core/pull/107683
+[#107695]: https://github.com/home-assistant/core/pull/107695
+[#107714]: https://github.com/home-assistant/core/pull/107714
+[#107720]: https://github.com/home-assistant/core/pull/107720
+[#107730]: https://github.com/home-assistant/core/pull/107730
+[#107738]: https://github.com/home-assistant/core/pull/107738
+[#107741]: https://github.com/home-assistant/core/pull/107741
+[#107746]: https://github.com/home-assistant/core/pull/107746
+[#107754]: https://github.com/home-assistant/core/pull/107754
+[#107758]: https://github.com/home-assistant/core/pull/107758
+[#107769]: https://github.com/home-assistant/core/pull/107769
+[#107771]: https://github.com/home-assistant/core/pull/107771
+[#107775]: https://github.com/home-assistant/core/pull/107775
+[#107816]: https://github.com/home-assistant/core/pull/107816
+[#107827]: https://github.com/home-assistant/core/pull/107827
+[#107850]: https://github.com/home-assistant/core/pull/107850
+[#107866]: https://github.com/home-assistant/core/pull/107866
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@BTMorton]: https://github.com/BTMorton
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@YogevBokobza]: https://github.com/YogevBokobza
+[@bdr99]: https://github.com/bdr99
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@dieselrabbit]: https://github.com/dieselrabbit
+[@elmurato]: https://github.com/elmurato
+[@emontnemery]: https://github.com/emontnemery
+[@erwindouna]: https://github.com/erwindouna
+[@eugenet8k]: https://github.com/eugenet8k
+[@exxamalte]: https://github.com/exxamalte
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@idofl]: https://github.com/idofl
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@lellky]: https://github.com/lellky
+[@miaucl]: https://github.com/miaucl
+[@mkmer]: https://github.com/mkmer
+[@mrueg]: https://github.com/mrueg
+[@nabbi]: https://github.com/nabbi
+[@starkillerOG]: https://github.com/starkillerOG
+[@thecode]: https://github.com/thecode
+[@vexofp]: https://github.com/vexofp
+[@zxdavb]: https://github.com/zxdavb
+
+## Release 2024.1.4 - January 19
+
+- Fix MatrixBot not resolving room aliases per-command ([@PaarthShah] - [#106347])
+- Bump Pyenphase to 1.16.0 ([@catsmanac] - [#107719])
+- Fix loading empty yaml files with include_dir_named ([@pedrolamas] - [#107853])
+- Bump openwebifpy to 4.2.1 ([@autinerd] - [#107894])
+- Bump aiohomekit to 3.1.3 ([@bdraco] - [#107929])
+- Skip disk types in System Monitor ([@gjohansson-ST] - [#107943])
+- Fix duplicate unique id in System Monitor (again) ([@gjohansson-ST] - [#107947])
+- Bump pyenphase to 1.17.0 ([@catsmanac] - [#107950])
+- Update sleep period for Shelly devices with buggy fw ([@chemelli74] - [#107961])
+- Reload ZHA only a single time when the connection is lost multiple times ([@puddly] - [#107963])
+- Don't load entities for docker virtual ethernet interfaces in System Monitor ([@gjohansson-ST] - [#107966])
+- Improve coordinator logic in Tessie to allow sleep ([@Bre77] - [#107988])
+- Fix Shelly Gen1 entity description restore ([@thecode] - [#108052])
+- Fix malformed user input error on MJPEG config flow ([@codyc1515] - [#108058])
+- Fix turning on the light with a specific color ([@marcelveldt] - [#108080])
+- Bump Jinja2 to 3.1.3 ([@edenhaus] - [#108082])
+- Use compat for supported features in media player ([@joostlek] - [#108102])
+- Speed up ZHA initialization and improve startup responsiveness ([@puddly] - [#108103])
+- Bump `aioridwell` to 2024.01.0 ([@bachya] - [#108126])
+- Bump flipr-api to 1.5.1 ([@cnico] - [#108130])
+- Send target temp to Shelly TRV in F when needed ([@jra3] - [#108188])
+- Use cache update for WIFI blinds ([@starkillerOG] - [#108224])
+- Bump reolink_aio to 0.8.7 ([@starkillerOG] - [#108248])
+- Bump PyTado to 0.17.4 ([@erwindouna] - [#108255])
+- Bump aiounifi to v69 to improve websocket logging ([@Kane610] - [#108265])
+- Bump ZHA dependency zigpy to 0.60.6 ([@puddly] - [#108266])
+
+[#106347]: https://github.com/home-assistant/core/pull/106347
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#107239]: https://github.com/home-assistant/core/pull/107239
+[#107365]: https://github.com/home-assistant/core/pull/107365
+[#107719]: https://github.com/home-assistant/core/pull/107719
+[#107853]: https://github.com/home-assistant/core/pull/107853
+[#107883]: https://github.com/home-assistant/core/pull/107883
+[#107894]: https://github.com/home-assistant/core/pull/107894
+[#107929]: https://github.com/home-assistant/core/pull/107929
+[#107943]: https://github.com/home-assistant/core/pull/107943
+[#107947]: https://github.com/home-assistant/core/pull/107947
+[#107950]: https://github.com/home-assistant/core/pull/107950
+[#107961]: https://github.com/home-assistant/core/pull/107961
+[#107963]: https://github.com/home-assistant/core/pull/107963
+[#107966]: https://github.com/home-assistant/core/pull/107966
+[#107988]: https://github.com/home-assistant/core/pull/107988
+[#108052]: https://github.com/home-assistant/core/pull/108052
+[#108058]: https://github.com/home-assistant/core/pull/108058
+[#108080]: https://github.com/home-assistant/core/pull/108080
+[#108082]: https://github.com/home-assistant/core/pull/108082
+[#108102]: https://github.com/home-assistant/core/pull/108102
+[#108103]: https://github.com/home-assistant/core/pull/108103
+[#108126]: https://github.com/home-assistant/core/pull/108126
+[#108130]: https://github.com/home-assistant/core/pull/108130
+[#108134]: https://github.com/home-assistant/core/pull/108134
+[#108188]: https://github.com/home-assistant/core/pull/108188
+[#108224]: https://github.com/home-assistant/core/pull/108224
+[#108248]: https://github.com/home-assistant/core/pull/108248
+[#108255]: https://github.com/home-assistant/core/pull/108255
+[#108265]: https://github.com/home-assistant/core/pull/108265
+[#108266]: https://github.com/home-assistant/core/pull/108266
+[@Bre77]: https://github.com/Bre77
+[@Kane610]: https://github.com/Kane610
+[@PaarthShah]: https://github.com/PaarthShah
+[@allenporter]: https://github.com/allenporter
+[@autinerd]: https://github.com/autinerd
+[@bachya]: https://github.com/bachya
+[@bdraco]: https://github.com/bdraco
+[@catsmanac]: https://github.com/catsmanac
+[@chemelli74]: https://github.com/chemelli74
+[@cnico]: https://github.com/cnico
+[@codyc1515]: https://github.com/codyc1515
+[@edenhaus]: https://github.com/edenhaus
+[@erwindouna]: https://github.com/erwindouna
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@joostlek]: https://github.com/joostlek
+[@jra3]: https://github.com/jra3
+[@marcelveldt]: https://github.com/marcelveldt
+[@pedrolamas]: https://github.com/pedrolamas
+[@puddly]: https://github.com/puddly
+[@starkillerOG]: https://github.com/starkillerOG
+[@thecode]: https://github.com/thecode
+
+## Release 2024.1.5 - January 20
+
+- Bump async-upnp-client to 0.38.1 ([@StevenLooman] - [#108382])
+- Fix empty files included by !include_dir_named ([@emontnemery] - [#108489])
+- Pin pandas to 2.1.4 ([@frenck] - [#108509])
+
+[#108382]: https://github.com/home-assistant/core/pull/108382
+[#108489]: https://github.com/home-assistant/core/pull/108489
+[#108509]: https://github.com/home-assistant/core/pull/108509
+[@StevenLooman]: https://github.com/StevenLooman
+[@emontnemery]: https://github.com/emontnemery
+[@frenck]: https://github.com/frenck
+
+## Release 2024.1.6 - January 30
+
+- Pass default SSLContext instances to Octoprint custom HTTP sessions ([@vexofp] - [#105351])
+- Reduce overhead for google calendar state updates ([@allenporter] - [#108133])
+- Fix SleepIQ setting FootWarmer timer ([@jmwaldrip] - [#108433])
+- Fix zha illuminance measured value mapping ([@floriankisser] - [#108547])
+- Bump yolink-api to 0.3.6 fix aiomqtt breaking changes ([@matrixd2] - [#108555])
+- Update openerz-api to 0.3.0 ([@misialq] - [#108575])
+- Bump aiovodafone to 0.5.4 ([@chemelli74] - [#108592])
+- Bump airthings-ble to 0.6.0 ([@LaStrada] - [#108612])
+- Fix alexa fails reporting the state in specific cases ([@jbouwh] - [#108743])
+- Reduce log level of ZHA endpoint handler init ([@puddly] - [#108749])
+- Fix google_assistant climate modes might be None ([@jbouwh] - [#108793])
+- Fix unhandled exception on humidifier intent when available_modes is None ([@jbouwh] - [#108802])
+- Fix processing supported color modes for emulated_hue ([@jbouwh] - [#108803])
+- Reduce log level for creating ZHA cluster handler ([@TheJulianJES] - [#108809])
+- Fix stalls in config flow of APCUPSD ([@yuxincs] - [#108931])
+- Add strings to Sensirion BLE ([@joostlek] - [#109001])
+- Fix entity naming for heatpump heatings in ViCare ([@CFenner] - [#109013])
+- Bump aiohttp to 3.9.3 ([@bdraco] - [#109025])
+- Bump ZHA dependency zigpy to 0.60.7 ([@puddly] - [#109082])
+- Add missing abort message for Spotify ([@joostlek] - [#109102])
+
+[#105351]: https://github.com/home-assistant/core/pull/105351
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#107239]: https://github.com/home-assistant/core/pull/107239
+[#107365]: https://github.com/home-assistant/core/pull/107365
+[#107883]: https://github.com/home-assistant/core/pull/107883
+[#108133]: https://github.com/home-assistant/core/pull/108133
+[#108379]: https://github.com/home-assistant/core/pull/108379
+[#108433]: https://github.com/home-assistant/core/pull/108433
+[#108502]: https://github.com/home-assistant/core/pull/108502
+[#108547]: https://github.com/home-assistant/core/pull/108547
+[#108555]: https://github.com/home-assistant/core/pull/108555
+[#108575]: https://github.com/home-assistant/core/pull/108575
+[#108592]: https://github.com/home-assistant/core/pull/108592
+[#108612]: https://github.com/home-assistant/core/pull/108612
+[#108743]: https://github.com/home-assistant/core/pull/108743
+[#108749]: https://github.com/home-assistant/core/pull/108749
+[#108793]: https://github.com/home-assistant/core/pull/108793
+[#108802]: https://github.com/home-assistant/core/pull/108802
+[#108803]: https://github.com/home-assistant/core/pull/108803
+[#108809]: https://github.com/home-assistant/core/pull/108809
+[#108931]: https://github.com/home-assistant/core/pull/108931
+[#109001]: https://github.com/home-assistant/core/pull/109001
+[#109013]: https://github.com/home-assistant/core/pull/109013
+[#109025]: https://github.com/home-assistant/core/pull/109025
+[#109082]: https://github.com/home-assistant/core/pull/109082
+[#109102]: https://github.com/home-assistant/core/pull/109102
+[@CFenner]: https://github.com/CFenner
+[@LaStrada]: https://github.com/LaStrada
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@allenporter]: https://github.com/allenporter
+[@bdraco]: https://github.com/bdraco
+[@chemelli74]: https://github.com/chemelli74
+[@floriankisser]: https://github.com/floriankisser
+[@frenck]: https://github.com/frenck
+[@jbouwh]: https://github.com/jbouwh
+[@jmwaldrip]: https://github.com/jmwaldrip
+[@joostlek]: https://github.com/joostlek
+[@matrixd2]: https://github.com/matrixd2
+[@misialq]: https://github.com/misialq
+[@puddly]: https://github.com/puddly
+[@vexofp]: https://github.com/vexofp
+[@yuxincs]: https://github.com/yuxincs
+
+## Need help? Join the community!
+
+Home Assistant has a great community of users who are all more than willing
+to help each other out. So, join us!
+
+Our very active [Discord chat server](/join-chat) is an excellent place to be
+at, and don't forget to join our amazing [forums](https://community.home-assistant.io/).
+
+Found a bug or issue? Please report it in our [issue tracker](https://github.com/home-assistant/core/issues),
+to get it fixed! Or, check [our help page](/help) for guidance for more
+places you can go.
+
+Are you more into email? [Sign-up for our Building the Open Home Newsletter](/newsletter)
+to get the latest news about features, things happening in our community and
+other news about building an Open Home; straight into your inbox.
+
+## Backward-incompatible changes
+
+{% details "Blink" %}
+
+The service calls of Blink have been adjusted. This affects
+`blink.trigger_camera`, `blink.save_video` and `blink.save_recent_clips`.
+
+This change will require these service calls to be updated with a `target` for
+the camera and by removing `name` from `data` of the blink service calls.
+
+For example, service call before 2023.11:
+
+```yaml
+service: blink.save_video
+data:
+ name: Front door
+ filename: test.mp4
+```
+
+Service call after 2023.11 and before 2024.1:
+
+```yaml
+service: blink.save_video
+data:
+ device_id: 87dc3b85c18ee84f8c322a95e8230eb2
+ name: Front door
+ filename: test.mp4
+```
+
+New service call:
+```yaml
+service: blink.save_video
+target:
+ entity_id:
+ - camera.front_door
+data:
+ filename: test.mp4
+```
+
+---
+
+The `blink.send_pin` service now uses an integration/configuration entry selector:
+
+Example service call before 2023.11:
+
+```yaml
+service: blink.send_pin
+data:
+ pin: "1234"
+```
+
+Service call after 2023.11 and before 2024.1:
+
+```yaml
+service: blink.send_pin
+data:
+ pin: "1234"
+ device_id: 87dc3b85c18ee84f8c322a95e8230eb2
+```
+
+ New service call:
+
+```yaml
+service: blink.send_pin
+data:
+ config_entry_id: a1bee602deade2b09bc522749bbce48e
+ pin: "1234"
+```
+
+---
+
+The `blink.blink_update` service is deprecated and will be removed in 2024.7.0.
+Use the `homeassistant.update_entity` service instead.
+
+([@mkmer] - [#105413]) ([documentation](/integrations/blink))
+
+[@mkmer]: https://github.com/mkmer
+[#105413]: https://github.com/home-assistant/core/pull/105413
+
+{% enddetails %}
+
+{% details "Home Assistant shutdown event" %}
+
+The event key in the (undocumented) trigger data for the `homeassistant` trigger
+platform is now the string `shutdown` for a `homeassistant` trigger configured
+to fire on shutdown instead of an `Event` object.
+
+([@tetele] - [#91165]) ([documentation](/integrations/homeassistant))
+
+[@tetele]: https://github.com/tetele
+[#91165]: https://github.com/home-assistant/core/pull/91165
+
+{% enddetails %}
+
+{% details "Modbus" %}
+
+Setting `swap: none` has been removed from the Modbus configuration.
+It is identical to omitting it: `swap:`.
+
+([@janiversen] - [#104713]) ([documentation](/integrations/modbus))
+
+[@janiversen]: https://github.com/janiversen
+[#104713]: https://github.com/home-assistant/core/pull/104713
+
+{% enddetails %}
+
+{% details "PrusaLink" %}
+
+- The printer state now contains several new statuses, most importantly
+ "attention", which always needs your intervention.
+- Firmware 4.7.0 is now the minimum version for Prusa XL and MK4.
+- Firmware 5.1.0 is now the minimum version for Prusa Mini since 4.7.x and 5.0.x
+ aren't available for the Mini.
+
+([@Skaronator] - [#103396]) ([documentation](/integrations/prusalink))
+
+[@Skaronator]: https://github.com/Skaronator
+[#103396]: https://github.com/home-assistant/core/pull/103396
+
+{% enddetails %}
+
+{% details "Reolink" %}
+
+The Reolink `Infrared lights in night mode` entity has been migrated from
+the `light` to the `switch` domain.
+
+This means the entity ID also changed, and automations and dashboards may need
+to be adjusted to use the new entity ID.
+
+If you want to go back to the light domain, use the
+[switch_as_x "Show as" option](/integrations/switch_as_x/#change-device-type-of-a-switch-from-the-existing-entity)
+on the new `Infrared lights in night mode` switch entity and select light.
+
+([@starkillerOG] - [#105916]) ([documentation](/integrations/reolink))
+
+[@starkillerOG]: https://github.com/starkillerOG
+[#105916]: https://github.com/home-assistant/core/pull/105916
+
+{% enddetails %}
+
+{% details "Shelly" %}
+
+The minimum supported firmware version for generation 1 devices is 1.11.0 (2021-07-15).
+The minimum supported firmware version for generation 2 devices is 1.0.0 (2023-08-03).
+
+You must update your devices to the firmware versions listed or newer.
+
+([@bieniu] - [#105384]) ([documentation](/integrations/shelly))
+
+[@bieniu]: https://github.com/bieniu
+[#105384]: https://github.com/home-assistant/core/pull/105384
+
+{% enddetails %}
+
+If you are a custom integration developer and want to learn about breaking
+changes and new features available for your integration: Be sure to follow our
+[developer blog][devblog]. The following are the most notable for this release:
+
+- [Changes to EntityDescription data classes](https://developers.home-assistant.io/blog/2023/12/11/entity-description-changes/)
+- [Config entry now supports minor versions](https://developers.home-assistant.io/blog/2023/12/18/config-entry-minor-version/)
+- [Deprecated constants create a log entry](https://developers.home-assistant.io/blog/2023/12/19/constant-deprecation/)
+- [Deprecating all magic numbers for supported features](https://developers.home-assistant.io/blog/2023/12/28/support-feature-magic-numbers-deprecation/)
+
+[devblog]: https://developers.home-assistant.io/blog/
+
+## All changes
+
+Of course, there is a lot more in this release. You can find a list of
+all changes made here: [Full changelog for Home Assistant Core 2024.1](/changelogs/core-2024.1)
diff --git a/source/_posts/2024-01-05-matter-livestream.markdown b/source/_posts/2024-01-05-matter-livestream.markdown
new file mode 100644
index 000000000000..d45a843a30ae
--- /dev/null
+++ b/source/_posts/2024-01-05-matter-livestream.markdown
@@ -0,0 +1,25 @@
+---
+layout: post
+title: "The State of Matter livestream"
+description: "We’re having a Matter livestream on Wednesday, January 10. Ask all your questions about Matter and Home Assistant in the comment section!"
+date: 2024-01-05 00:00:01
+date_formatted: "January 5, 2024"
+author: Marcel van der Veldt
+comments: true
+categories: Matter
+og_image: /images/blog/2024-01-matter/matter.png
+---
+
+TL;DR: We'll have a Matter livestream on Wednesday, January 10. Post all your questions about Matter and Home Assistant in the comment section, and we'll try to answer them during the stream!
+
+In late 2022, Matter was first released to the public. It promised to be the new local home automation standard that would unify various manufacturers' ecosystems and smart devices. We [joined the CSA](/blog/2023/12/04/nabu-casa-at-the-matter-member-meeting/), the alliance developing Matter, to have a front-row seat and make our implementation of Matter the best we can. Now, one year later, did Matter live up to its promise, and what's the state of Matter within Home Assistant?
+
+We ask this question because lately, articles about Matter in the media have turned a bit sour. Compared to older standards like Zigbee and Z-Wave, they say, Matter is not yet in good shape. But this is not an entirely fair comparison: Zigbee and Z-Wave have had many years to develop into what they are now, while Matter was released just over a year ago. A new standard will always need some time to settle in and mature.
+
+Our view on Matter is both more optimistic and still realistic. We think Matter completely fits [our Open Home vision](/blog/2021/12/23/the-open-home/). In the future, Matter will give us all fast, reliable, and local control of our smart home devices. At the same time, we're realistic; this perfect vision of Matter has yet to arrive, and not everything we hoped for is possible today. Still, significant companies and organizations around the globe have committed to Matter, and they are improving it every month. We believe Matter is here to stay.
+
+So, instead of discussing what isn't currently working in Matter, we want to explain what Matter *can* offer you today. We want to show you the potential Matter has for the future and how your first steps with Matter today prepare you for that. Talk about what Thread is, how it relates to Matter - it is not the same! - and how to build your Thread network. And much more.
+
+On Wednesday, January 10, at 12:00 PST / 21:00 CET, we'll be hosting a State of Matter livestream to discuss this and address your questions and concerns about Matter and Home Assistant. We'll make sure it's an excellent watch for both beginners and more technically-oriented viewers - our Matter developers will be there to give you a technical deep-dive into Matter, too. Please save the date in your calendar and post all your questions and concerns in our comments section!
+
+
diff --git a/source/_posts/2024-01-17-voice-assistant-contest.markdown b/source/_posts/2024-01-17-voice-assistant-contest.markdown
new file mode 100644
index 000000000000..c2a8c0ae71e1
--- /dev/null
+++ b/source/_posts/2024-01-17-voice-assistant-contest.markdown
@@ -0,0 +1,110 @@
+---
+layout: post
+title: "Voice Assistant Contest - Let's build and win some prizes!"
+description: "We are organizing a voice assistant contest between the 17th of January and the 10th of March. You can win some Home Assistant Green, some Home Assistant SkyConnect, and a chance to be on a livestream with us to talk about your creation."
+date: 2024-01-17 00:00:01
+date_formatted: "January 17, 2024"
+author: Jean-Loïc Pouffier
+comments: true
+categories: Assist
+og_image: /images/blog/2024-01-11-voice-assistant-contest/banner.png
+---
+
+
+
+TL;DR: We are organizing a voice assistant contest between the 17th of January and the 10th of March. You can win some [Home Assistant Green](/green/), [Home Assistant SkyConnect](/skyconnect/), and a chance to be on a livestream with us to talk about your work.
+
+
+
+2023 was the [Year of the Voice](/blog/2022/12/20/year-of-voice/). It was a yearly goal to **let users control Home Assistant in their own language**.
+We built some amazing things throughout the year, from a very powerful intent recognizer specifically optimized to run on a small computer like a Raspberry Pi 4, all the way to custom wake words created by our community.
+
+In fact, we believe that what we built during the Year of the Voice allows almost anyone to build a voice assistant that embodies our Open Home values perfectly: Personalized, Private, and Sustainable.
+Every component of our voice assistants can be heavily customized to fit your language, your style and your needs, fully local options exist for each of them, and finally you can retrofit voice assistant into anything, even a [1970s Walkie Talkie](https://www.youtube.com/shorts/HqYbhk6vq9E) found in a flea market
+
+This is why, after spending a year building great things, we want to celebrate what our voice assistants can enable with the community: We’re launching a voice assistant contest, with great prizes to win!
+
+
+## Contest specifics
+
+The contest will be held between Today (the **17th of January**) and the **10th of March**.
+
+We tried to be as inclusive as possible. The contest is not only about building voice assistant hardware, it is also about building voice experiences that can be used with any voice assistant (For example, [a blueprint that you can use to generate images from voice and cast them on your TV](https://my.home-assistant.io/redirect/blueprint_import?blueprint_url=https%3A%2F%2Fwww.home-assistant.io%2Fblueprints%2Fblog%2F2023-08%2Fcast_dall_e.yaml): “Show me a picture of an astronaut riding a unicorn!”)
+
+An entry in the contest can take any form: A video, a blog post, a website, an event, etc.
+
+The only requirement is for you to post on [this forum category](https://community.home-assistant.io/c/voice-assistant-contest/60), this is how you officially participate in the contest.
+
+Winners will be announced on the **15th of March**.
+
+A closing ceremony will take place on the **10th of April** in the form of a livestream. Winners will be invited!
+
+
+
+## Contest categories
+
+You can participate in the contest in four different categories.
+
+### Most creative satellite ideas
+
+We have all the ingredients to unleash creativity: Custom sentences, custom wake words, custom voices. This category is here to showcase your smartest ideas.
+We will be judging the creativity, uniqueness, and coherency of the whole package.
+
+Example: [Piitaya’s](https://github.com/piitaya) moving and talking droid.
+
+
+
+### Best starting guides
+
+Because our voice assistant can be heavily customized, starting can be daunting. This category showcases the easiest ways to create a voice assistant for a novice. From ordering parts, flashing the firmware, integrating it into Home Assistant, and using it.
+We will judge how easy the guide is to follow and how usable the final product is.
+
+Example: The amazingly complete guide to build a Wyoming Voice Assistant Satellite by YouTuber [FutureProofHome](https://www.youtube.com/@FutureProofHomes).
+
+
+
+### Best events organized, best group effort
+
+Building privacy-focused technology only makes sense if we can get people to use it. Go to a hackerspace, invite some people, and build some voice assistants together!
+We will be judging the impact of the event (Size, outcome, topics discussed, etc)
+
+### Best voice experiences
+
+This category is here for people who want to participate in the contest but not necessarily build a hardware product. This is all about creating the best experience using a voice assistant on Home Assistant.
+We support custom sentences, custom responses, and custom actions.
+Go crazy, be creative, and show us how to unlock the potential of our voice assistants.
+We will be judging how useful the experience is, how easy it is to integrate it, and of course, of fun it is.
+
+Example: [Play any music on any speaker in your home from a blueprint.](https://blog.jlpouffier.fr/chatgpt-powered-music-search-engine-on-a-local-voice-assistant/)
+
+## Contest prizes
+
+For each category, the winner will receive:
+
+- A [Home Assistant Green](/green/)
+- A [Home Assistant SkyConnect](/skyconnect/)
+- A spot on the closing ceremony livestream to present his/her work on the 10th of April
+
+Runners-up will receive a [Home Assistant SkyConnect](/skyconnect/).
+
+The community will also get a chance to vote for a favorite entry. The choice of the community will also receive the same prizes as a category winner (A [Home Assistant Green](/green/), A [Home Assistant SkyConnect](/skyconnect/), a spot on the livestream on the 10th of April).
+
+## How to get started
+
+- Watch the Voice Assistant Contest [launch live stream](https://www.youtube.com/watch?v=99lGuB4J-4o&ab_channel=HomeAssistant), we did a recap of Year of the Voice and created a few voice assistants live with you.
+- Learn more about the different chapters of Year of the Voice [here](https://www.home-assistant.io/blog/2022/12/20/year-of-voice/).
+- Learn more about Wyoming Satellite in the [launch live stream](https://www.youtube.com/watch?v=99lGuB4J-4o&ab_channel=HomeAssistant) and [here](https://github.com/rhasspy/wyoming-satellite).
+- Learn how to create a basic voice assistant within minutes for $13 [here](https://www.home-assistant.io/voice_control/thirteen-usd-voice-remote/).
+- Learn more about ESPHome-based voice assistant in the [launch live stream](https://www.youtube.com/watch?v=99lGuB4J-4o&ab_channel=HomeAssistant) and [here](https://github.com/jlpouffier/voice-assistant-esphome-tutorial/tree/main).
+- Learn how to create custom wake words [here](https://www.home-assistant.io/voice_control/create_wake_word/).
+- Learn how to create custom sentences [here](https://www.home-assistant.io/voice_control/custom_sentences/).
+
+## Thank you
+
+Thank you to the Home Assistant community for subscribing to Home Assistant Cloud to support Year of the Voice and the development of Home Assistant, ESPHome, and other projects in general.
+
+We are looking forward to seeing what you will build and we are looking forward to having you on the livestream with us on the 10th of April.
+
+Head over to the [forum category](https://community.home-assistant.io/c/voice-assistant-contest/60) to see the progress of the contest.
+
+Have fun building, learning, and sharing.
diff --git a/source/_posts/2024-01-25-matter-livestream-blog.markdown b/source/_posts/2024-01-25-matter-livestream-blog.markdown
new file mode 100644
index 000000000000..a4fb1e09a315
--- /dev/null
+++ b/source/_posts/2024-01-25-matter-livestream-blog.markdown
@@ -0,0 +1,138 @@
+---
+layout: post
+title: "The State of Matter"
+description: "Catch up on all of the highlights of the State of Matter livestream that we streamed on Wednesday, January 10, 2024."
+date: 2024-01-25 00:00:01
+date_formatted: "January 25, 2024"
+author: Marcel van der Veldt
+comments: true
+categories: Matter
+og_image: /images/blog/2024-01-matter/matter.png
+---
+During our State of Matter live stream two weeks ago, we explained what Matter is, how it relates to Thread, and how you can compare it with existing protocols you may already know, like Zigbee or Z-Wave.
+
+In this blog post, we’ve extracted the highlights of the stream for you. We also link to our updated [Matter](/integrations/matter/) and [Thread](/integrations/thread/) documentation where relevant.
+
+You can watch the entire live stream here:
+
+
+
+We’ll also highlight each segment of the live stream in this blog under each corresponding heading, so you can start watching the specific parts that interest you!
+
+
+
+## Why we believe in Matter
+
+
+
+We believe in Matter: it’s open source, and most importantly, it’s fully local by default. Matter will allow us to control devices ranging from lights, to robot vacuums, to TVs, and to many other IP-connected devices, all through a standardized protocol. It is a huge step forward towards having more sustainable and worry-free smart home products. For this reason, Nabu Casa uses the revenue we get from the subscribers to Home Assistant Cloud (thank you all!) to employ developers who are dedicated to implementing Matter. And we have even joined the Connectivity Standards Alliance (CSA) - the organization behind the Matter standard - as a participant to have a front-row seat and to defend the [Open Home values](/blog/2021/12/23/the-open-home/) during the development of the standard.
+
+Matter launched only one year ago, compared to twenty years for a standard like Zigbee, so it’s important to account for that in your expectations. If you’ve already invested heavily in an existing local standard, like Zigbee or Z-Wave, Matter is probably not your best choice at this point. We think there is no reason to throw these current smart home devices out, especially when they still work fine - after all, sustainability is one of our [Open Home values](/blog/2021/12/23/the-open-home/). But if you are new to the smart home scene and looking for devices with local, cloud-free standards that will still work even many years from now, keep an eye on Matter. The standard is rapidly evolving, with major updates twice a year where new device types and enhancements to existing ones are released.
+
+After this first year, the current selection of Matter devices is still a bit limited, but a lot of companies have been using this time to develop them, and we expect more to be released soon. More and more companies are [joining the CSA](https://csa-iot.org/members/) and taking up the standard every month. We think Matter is here to stay and is going to be widely adopted.
+
+## Demystifying Matter
+
+
+
+To really understand what we’re talking about when it comes to Matter, we recommend you read our [updated Matter documentation](/integrations/matter/) or watch this chapter from our live stream.
+
+
+
+In this segment, our product manager JLo explains Matter in an easy-to-understand, visual manner, using the diagram you see above. You’ll no longer have to wonder about Thread, Border routers, Bridges, or other Matter terminology after you’ve watched this video.
+
+## The current state of Matter in Home Assistant
+
+For the past year, we have been working on getting the foundation ready to support Matter devices in Home Assistant. Our implementation is based on the official Matter SDK, and we plan for it to become officially certified by the CSA to show that it will work problem-free with all products that carry the Matter logo. But we are not there yet; that is why we still label Matter as Beta in the integrations list. This will not change until our implementation has been certified.
+
+We are still ironing out bugs, writing documentation, adding missing features, and doing a lot of troubleshooting. We are not alone on this, as many manufacturers needed this first year to get comfortable with the new standard as well, resulting in some unstable early devices coming to the market. We’ve also had to tweak our Home Assistant Operating System to work well with Matter, Thread, and its IPv6 requirement.
+
+It has been a bumpy - sometimes even frustrating - ride, but everything is slowly getting into good shape. Vendors have ironed out bugs in their Matter device firmware, all kinds of new devices are popping up in stores, and the Matter 1.1 and 1.2 updates brought tons of stability fixes to the standard.
+
+From our perspective, it’s amazing that Matter is already in this state after being started only a couple of years ago. You can clearly see the enormous power of so many companies, from small to big, believing in Matter and working together to improve it.
+
+### Get started with Matter in Home Assistant
+
+
+
+If you want to get started with Matter in Home Assistant, it is really important that you read the [documentation](/integrations/matter/) or watch this chapter of our live stream, which covers it all.
+
+Matter has a few gotcha’s you should know about, and because we are still in the Beta stage, not everything is as polished as we want it to be.
+
+If you follow the requirements/recommendations in the documentation, you will see that there are four scenarios that are stable and work well in Home Assistant today:
+
+- Using WiFi-based Matter devices, like TP-Link (Matter) power plugs.
+- Using Matter bridges, like the Aqara M2 or SwitchBot Hub 2.
+- Using Thread-based Matter devices; if you have an Apple iPhone and one or more Apple devices that can be utilized by Home Assistant as a Thread Border router: HomePod gen2, HomePod Mini, Apple TV 4K (with ethernet).
+- Using Thread-based Matter devices; if you have an Android phone and one or more Google devices that can be utilized by Home Assistant as a Thread Border router:
+Google Nest Hub v2, Google Nest Hub Max, Google Nest WiFi Pro
+
+It’s *very* important to note here that for Thread-based devices, the current recommended setup utilizes border routers from Apple or Google that match the type of phone you have. Please don’t worry - this doesn’t mean you have to add your devices to their ecosystems. Home Assistant will just use them to get access to the Thread radio network. The communication between the Home Assistant Matter controller and your Matter devices is completely encrypted and secure.
+
+Using Home Assistant itself as a Thread border router (for example, by using the Thread radio in the Home Assistant Yellow or Home Assistant SkyConnect) is still under development at this point and is only recommended for the more technically experienced users. Currently, due to a bug, it can only be set up if you use an Android phone. Setting the Home Assistant SkyConnect or Home Assistant Yellow up as a Thread border router is not yet possible for users in the iOS/Apple ecosystem. We recommend that iOS users place, for example, a HomePod Mini or other Apple border router near their Thread devices to get the required Thread coverage. Alternatively, you can stay with WiFi-based Matter devices.
+
+### Important
+
+You do *not* need any additional hardware or radios to work with Matter devices. Any device that is running Home Assistant Operating System, be it a Home Assistant Green, a Raspberry Pi, or any other installation, is already a fully functional Matter Controller. You can connect to WiFi-based Matter devices straight out of the box. Only if you plan to use Thread-based Matter devices do you need additional hardware in the form of a Thread border router.
+
+### Our tips for a frustration-free Matter experience:
+
+- Read the [documentation](/integrations/matter/) for Matter.
+- The easiest devices to get started with are WiFi-based Matter devices and Matter bridges. Do note that many brands with Matter bridges also have excellent native integrations in Home Assistant, and these integrations may offer features not yet available in the Matter standard.
+- You need to run the Home Assistant Operating System. Other installation types are not supported.
+- You need a standard (flat) network. Enterprise-like network setups with VLANs, mDNS responders, etc., break the expectations that Matter has about the network and are not supported. Keep it simple, and it will just work.
+- Enable IPv6 on your home router and Home Assistant Operating System. You don’t need to get IPv6 from your internet provider, as the Matter devices operate locally. But you do need to make sure it’s enabled on your home network.
+- If you are planning on using Thread-based Matter devices, you will need one or more [Thread border routers](/integrations/thread/) in your home. Home Assistant can work with third-party Thread border routers from Google or Apple as well, without having to add your devices to their ecosystem.
+- Always check the device packaging to make sure it has a Matter badge. Thread is also used for other standards, so a device with a Thread badge on the packaging does not have to be a Matter device.
+- Note that Matter is still in an early stage, so not every advanced feature you are used to may currently be implemented in this standard.
+
+- Use the latest version of both Home Assistant and the Home Assistant Companion apps, as we are improving Matter support and fixing bugs continuously. Using the latest version can make the difference in being able to add a device to Home Assistant or not.
+
+### Support
+
+If you run into problems, please join our [Discord server](/join-chat/), where we have a dedicated Matter channel. Both our developers and many very experienced members of our community are active there to help you out with your Matter setup. Please only open an issue on our GitHub issue tracker if you encounter an actual bug.
+
+## The Future of Matter in Home Assistant
+
+
+
+In the near future, we are focusing on improving the user experience to onboard and manage Matter devices. Especially adding new Matter devices to Home Assistant should be as stress-free as possible.
+
+
+
+This is what we are focusing on now:
+- Functionality to 'share' a device from Home Assistant to another Matter controller.
+- Showing basic device information and diagnostics about a device in the Home Assistant interface, as well as adding some troubleshooting options such as forcing a full interview.
+
+This is what we will be focusing on next:
+- A simpler flow to add Matter devices (a process called commissioning), where we guide our users step-by-step all the way from unboxing a device to being able to control it in Home Assistant. For now, we are focusing on the stable scenarios we mentioned previously. This means that we are improving the commissioning flow in our companion apps, relying on the Matter functionality built into your phone, and using (if necessary) Thread networks managed by the vendor of your phone (Google or Apple).
+- A better handling of sharing of devices between controllers (a functionality called multi-admin). Adding a brand new Matter device (commissioning) and sharing a device that is already controlled by a Matter controller (multi-admin) are not part of the same flow. This difference is dictated by the Matter standard and its security features; a current controller (admin) has to allow a device to join another controller. This is often misunderstood today, and we are trying to create a better flow that guides our users toward the right path for their devices.
+- We want to implement some missing features in the current platforms, such as light transitions and scenes.
+
+This is what we want to achieve in the long run:
+- The ability to use the Home Assistant SkyConnect or Home Assistant Yellow as a Thread border router to connect to Thread-based Matter devices instead of using Apple or Google Border routers.
+
+On top of this, we will continuously focus on extending the support for new devices as new device types are added to the specification or existing ones are extended. In some cases, manufacturers even contribute to Home Assistant themselves to ensure a new device type is supported.
+
+We are also continuously keeping the quality of our Matter integration up to the standard of Home Assistant and fixing the most impactful issues our users are facing. For example, right now, we are making sure Matter devices that lose power are handled better in Home Assistant.
+
+## Using Home Assistant Yellow or Home Assistant SkyConnect
+
+
+
+As we mentioned while talking about the recommended scenarios earlier, using the Home Assistant Yellow or Home Assistant SkyConnect for Thread is still in development and only recommended for technically experienced users.
+
+That’s why our current recommendation for Home Assistant Yellow and Home Assistant SkyConnect is to use the Zigbee firmware to power your Zigbee network. This is a stable solution that has worked reliably since the introduction of these products and offers a great experience.
+
+As we continue to work on Matter in Home Assistant, we’re now focused on ensuring that the Thread experience will catch up and become a first-class citizen, making it easy to connect to your Thread-based devices in Home Assistant without a third-party Thread border router. The Thread firmware is already fully functional under the hood, but we still have some work to do to make the experience of using Thread-based devices in Home Assistant feel good. As we mentioned in our chapter on the future of Matter in Home Assistant, we expect great strides in this area within the following months. Once the experience has improved, we will recommend using this Thread firmware to power your Thread network as an alternative to using third-party Thread border routers from Apple or Google.
+
+There is a third, experimental, firmware option that supports multiprotocol, which allows the Silicon Labs chip in these products to connect to both Zigbee and Thread networks with one radio. We announced our intent to release a firmware supporting multiprotocol when we launched Home Assistant Yellow and Home Assistant SkyConnect, and this firmware has been available since December 2022. It integrates the Silicon Labs SDK, which adds this support for multiprotocol. During the further development and testing of the multiprotocol firmware, we have concluded that while Silicon Labs’ multiprotocol works, it comes with technical limitations. These limitations mean users will not have the best experience compared to using dedicated Zigbee and Thread radios. That is why we do not recommend using this firmware, and it will remain an experimental feature of Home Assistant Yellow and Home Assistant SkyConnect. If you currently have the multiprotocol firmware installed but don’t actively use it to connect to Thread devices, we recommend that you [disable multiprotocol](https://skyconnect.home-assistant.io/procedures/disable-multiprotocol/).
+
+Nothing changes for current users of the multiprotocol firmware who are happy with their experience. The experimental multiprotocol firmware will remain available, but we will not recommend it to new users. Instead, we will focus on making sure the dedicated Zigbee and Thread firmwares deliver the best experience to users.
+
+## Thank you
+
+After our first year of implementing Matter, we’re very happy that the technical foundation is in good shape. We can now take the next steps to ensure the entire Matter experience is as good as it can possibly be! Thank you to all of the users who have been on this journey with us, have provided us with valuable feedback and bug reports, and have shared their experiences so we know how we can make Matter in Home Assistant even better. And thank you to all of the viewers of the live stream and everyone who sent in questions beforehand and during the stream; your input helps us make these streams the best they can be. And if you made it all the way down here - thank you for reading!
+
+If you have any more questions or experience problems with Matter in Home Assistant, please join our [Discord server](/join-chat/)! We have a dedicated Matter channel there, and our developers and many experienced members of our community can help you out.
+
\ No newline at end of file
diff --git a/source/_posts/2024-01-29-companion-app-for-ios-20241-carplay.markdown b/source/_posts/2024-01-29-companion-app-for-ios-20241-carplay.markdown
new file mode 100644
index 000000000000..282d57d72c20
--- /dev/null
+++ b/source/_posts/2024-01-29-companion-app-for-ios-20241-carplay.markdown
@@ -0,0 +1,86 @@
+---
+layout: post
+title: "Companion app for iOS 2024.1: CarPlay is here!"
+description: "Home Assistant arrives in CarPlay; open your garage with a simple tap!"
+date: 2024-01-29 00:00:02
+date_formatted: "January 29, 2024"
+author: Bruno Pantaleão
+comments: true
+categories: iOS Release-Notes
+og_image: /images/blog/2024-01-ios-carplay/ios-og.png
+---
+
+Hey, this is Bruno. I have recently joined Nabu Casa to work full-time on the Home Assistant iOS app (thanks Home Assistant Cloud subscribers!). Today I have big news: Home Assistant is now available on Apple CarPlay! The release is rolling out and should be hitting your iOS devices soon (version 2024.1).
+
+CarPlay support now gives Home Assistant users easy access to their devices and areas and the ability to create custom actions. Custom actions allow users to create advanced action sequences like unlocking the front door and turning on the porch lights. And all of this works across the multiple Home Assistant servers that you have configured in the app.
+
+
+
+ Big thanks to DXspark for helping us make the foundation of CarPlay and kicking off the project.
+
+
+
+## CarPlay features
+
+The app is divided into four tabs to easily access the different functionality. We’ve followed Apple’s guidelines to give the user a familiar experience that they know from other CarPlay apps.
+
+You don’t have to configure the CarPlay app separately. It will automatically pick up your Home Assistant servers as configured in your app.
+
+## Actions
+
+Actions are a concept in the Home Assistant iOS app that allows you to execute automation in Home Assistant. This means that you can execute any automation you want, such as:
+
+- “Open the garage and start heating my home to 22 degrees Celsius”
+- “Close the garage and announce in the kitchen that I arrived”
+- “Turn the front yard lights on and unlock the front door”
+
+These actions have been available in the Home Assistant for Apple Watch app and can be called from the Home Assistant widgets. With today’s release, you can also easily trigger them from your CarPlay dashboard. This is the feature that has already become part of my daily routine.
+
+If you haven’t created an Action yet, the CarPlay App can send a notification to your phone to guide you to get started.
+
+![Create your first CarPlay Action](/images/blog/2024-01-ios-carplay/firstaction.png)
+![CarPlay Actions](/images/blog/2024-01-ios-carplay/actions.png)
+
+## Controls
+
+The controls tab will group your devices and entities by their domain. We have started small and included the most useful domains first:
+
+- Button
+- Cover
+- Input boolean
+- Input button
+- Light
+- Lock
+- Scene
+- Script
+- Switch
+
+For these domains, you can toggle lights and switches, activate buttons, script, scene actions, and of course, toggle your garage door or gate.
+
+
+![Create your first CarPlay Action](/images/blog/2024-01-ios-carplay/controls.png)
+
+## Areas
+
+The areas tab allows you to find your devices and entities based on their area. Quickly scroll through an area to see the current states and toggle devices.
+
+![CarPlay Areas](/images/blog/2024-01-ios-carplay/areas.png)
+
+## Servers
+
+When you’re driving to your parents, you might want to be able to notify them or open their garage door as you arrive. With the “Servers” tab, you will be able to quickly change and control a different Home Assistant server.
+
+This feature builds upon the multiple server support that has been part of the Home Assistant iOS app for a couple of years now.
+
+![CarPlay Servers](/images/blog/2024-01-ios-carplay/servers.png)
+
+I hope you will enjoy using Home Assistant on CarPlay. Please let us know what else you would like to see available for CarPlay!
+
+## Release notes
+
+- The app is now available for iOS 15+
+- CarPlay support was added for iOS 16+
+- The Bulgarian language was added
+- Improvements for iOS Actions so they’re easier to use
+- In macOS, the window size will be restored when you open the app again
+
diff --git a/source/_posts/2024-02-07-release-20242.markdown b/source/_posts/2024-02-07-release-20242.markdown
new file mode 100644
index 000000000000..6d9b72b6dbda
--- /dev/null
+++ b/source/_posts/2024-02-07-release-20242.markdown
@@ -0,0 +1,1307 @@
+---
+layout: post
+title: "2024.2: More voice, more icons, more integrations, more... everything!"
+description: "Improved drag 'n drop in automations, proximity, custom Assist responses, export your data, ZHA firmware updates, Matter diagnostics and actions, icons everywhere, and more!"
+date: 2024-02-07 00:00:00
+date_formatted: "February 7, 2024"
+author: Franck Nijhof
+author_twitter: frenck
+comments: true
+categories:
+ - Release-Notes
+ - Core
+og_image: /images/blog/2024-02/social.png
+---
+
+
+
+Home Assistant Core 2024.2! 🥰
+
+Undoubtedly, you've heard about last year's ["The Year of the Voice"](/blog/2022/12/20/year-of-voice/).
+2023 might be over, but we are definitely not done with voice yet! This release
+contains some very cool new features for voice.
+
+Not just that, we've also launched a [voice assistant contest](/blog/2024/01/17/voice-assistant-contest/)
+that you could join, and I'm happy to inform you that we will have another voice-related
+live stream on 21 February 2024, at 12:00 PST / 21:00 CET: [Chapter 6](https://www.youtube.com/watch?v=NQIv3nsu7dE)!
+
+But there is more in this release besides voice! There's drag 'n drop magic for
+our automation editor, and you can now update Zigbee devices directly
+from Home Assistant. We also have icons in more places 🤩, and quite a lot of
+new functionalities for Matter devices.
+
+In general, contributions to our open-source project have been amazing this
+month. I've never seen so many contributed bug fixes, improvements, and new
+features in a single release. Like... 21 new integrations! This is,
+without a doubt, the largest release we've ever put out.
+A big shout-out to everyone who helped! ❤️
+
+Enjoy the release!
+
+../Frenck
+
+_Oh! And don't forget Valentine's Day is coming up!_ 😘
+
+
+
+- [Better drag \& drop support for automations](#better-drag--drop-support-for-automations)
+- [Export data from the history dashboard](#export-data-from-the-history-dashboard)
+- [Improved error responses when using Assist](#improved-error-responses-when-using-assist)
+- [Custom Assist responses in automations using the sentence trigger](#custom-assist-responses-in-automations-using-the-sentence-trigger)
+- [All known Assist devices](#all-known-assist-devices)
+- [Updating your Zigbee devices](#updating-your-zigbee-devices)
+- [Matter diagnostics and actions](#matter-diagnostics-and-actions)
+- [Icons everywhere](#icons-everywhere)
+- [Integrations with authentication issues are now shown in the repairs dashboards](#integrations-with-authentication-issues-are-now-shown-in-the-repairs-dashboards)
+- [Revamped Proximity integration](#revamped-proximity-integration)
+- [Shipping on a new Python version](#shipping-on-a-new-python-version)
+- [Other noteworthy changes](#other-noteworthy-changes)
+- [New integrations](#new-integrations)
+- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui)
+- [Release 2024.2.1 - February 9](#release-202421---february-9)
+- [Release 2024.2.2 - February 16](#release-202422---february-16)
+- [Release 2024.2.3 - February 22](#release-202423---february-22)
+- [Release 2024.2.4 - February 25](#release-202424---february-25)
+- [Release 2024.2.5 - February 27](#release-202425---february-27)
+- [Need help? Join the community!](#need-help-join-the-community)
+- [Backward-incompatible changes](#backward-incompatible-changes)
+- [Farewell to the following](#farewell-to-the-following)
+- [All changes](#all-changes)
+
+Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=8-YwXkgD3CY)
+7 February 2024, at 12:00 PST / 21:00 CET!
+
+
+
+## Better drag & drop support for automations
+
+Let's start with some old-fashioned drag 'n drop magic! 🪄
+
+As of this release, dragging and dropping triggers, conditions, and actions in
+the automation editor are _always_ enabled. Previously, you had to explicitly
+enable re-ordering in the automation editor settings, but now, it is just
+always active.
+
+But even more exciting is that you can now drag and drop elements into other
+nested elements! For example, you can now drag a condition into
+the condition of an if-then or choose action. 🤯
+
+
+
+## Export data from the history dashboard
+
+The following feature might be small, but it is a big deal for many. Home
+Assistant stores your data privately and locally; it is **your data**. To make
+this data more accessible, we've added a new feature to the history dashboard.
+
+You can now download the data you are viewing in the history dashboard. This
+allows you to further analyze the data in, for example, Excel or to visualize
+it in other ways.
+
+The button will export and download the data you currently view in the history
+dashboard as a [CSV file](https://en.wikipedia.org/wiki/Comma-separated_values).
+
+
+
+Thanks for this one [@balloob]!
+
+[@balloob]: https://github.com/balloob
+
+## Improved error responses when using Assist
+
+If you use [Assist](/voice_control/), our private voice assistant, you may have
+noticed that its responses were not meaningful when something was not understood.
+
+Some of the errors encountered while using Assist can easily be fixed on your
+side by adding aliases to entities or areas, exposing entities to Assist,
+or assigning entities and devices to the correct areas.
+
+So we are taking the first step to help you fix these errors: as of this release,
+Assist provides much better errors in case your intention is understood,
+but something else is missing (An unknown name, area, device class, or domain).
+
+
+
+## Custom Assist responses in automations using the sentence trigger
+
+Like almost every other component and feature of Home Assistant, Assist can be
+customized and extended to understand more sentences.
+
+A few releases ago, we introduced a very simple way to extend what Assist
+understands: The [sentence trigger](/docs/automation/trigger/#sentence-trigger)
+in our automation engine.
+
+Up until now, using a sentence trigger always led to the same Assist response:
+“Done”. In fact, the only way to define a custom response was to write complex
+custom sentences in YAML.
+
+This release introduces a new action to set a custom response in your
+sentence-triggered automations directly inside the automation editor.
+
+
+
+The response field accepts templates, so it can be used to build complex
+responses, for example, listing all your room temperatures.
+
+
+
+A very cool feature that might come in handy if you build an automation
+blueprint to submit as an entry for our [voice assistant contest](/blog/2024/01/voice-assistant-contest/)!
+
+## All known Assist devices
+
+Last addition for voice, we've added a small additional page to give you an
+overview of all the Assist devices you have active in your Home. You can find
+this on the {% my voice_assistants title="Assist configuration dashboard" %}
+by selecting the new "Assist devices" button.
+
+
+
+Or, use this My Home Assistant button below to navigate to the voice assistants
+configuration dashboard:
+
+{% my voice_assistants badge %}
+
+## Updating your Zigbee devices
+
+[ZHA](/integrations/zha) (Zigbee Home Automation, our built-in Zigbee integration)
+now provides update entities to Home Assistant!
+
+This means you can get notified when a device has a firmware update available,
+and you can trigger the update from Home Assistant!
+
+
+
+Noticed the weird version numbers? Unfortunately, that is how version numbers
+in the Zigbee standard work and look. We haven't figured out a way to translate
+them to something more human-readable format that matches what the manufacturer
+communicates.
+
+Currently, it supports updating Inovelli, OSRAM/Ledvance, Sonoff, and
+ThirdReality devices, and we are looking at adding support for more brands
+in the future. Be aware, Zigbee is a slow protocol, and firmware updates can
+take a long time (sometimes hours).
+
+## Matter diagnostics and actions
+
+Home Assistant works actively to provide the best support for [Matter](/integrations/matter)
+devices out of the box. To help with that, we have added more information and
+controls for your Matter devices in the UI.
+
+On the device page of the Matter device in Home Assistant, we will now show
+additional diagnostic information about the device. This information can be
+used to troubleshoot issues with the device or when reporting issues. Some
+examples include the network type the device uses, its addresses, and IDs,
+device types and its connected [fabrics](/integrations/matter#multi-fabric-join-to-multiple-controllers).
+
+
+
+Besides more information, you can also take new actions on the device.
+For example, ping the device to check if it is available, force a full
+device interview to sync all its information, remove it from another controller,
+and even a new button to share your Matter device from Home Assistant with
+another Matter controller.
+
+
+
+## Icons everywhere
+
+We completely changed how Home Assistant handles icons under the hood.
+A big effort from many people, with almost... no change! That is
+right, _almost_ everything looks just the same as before. 😁
+
+We did make some improvements! For example, integrations can now
+provide icons for things like fan speeds or thermostat presets. Also,
+service call actions can now have their own icon as well:
+
+
+
+Areas now have icons too! You can set them in the area configuration. They show
+up in the area selectors and in the area dashboard itself
+(in case you didn't upload a picture).
+
+
+
+## Integrations with authentication issues are now shown in the repairs dashboards
+
+When one of your integrations has authentication issues, Home Assistant
+will now report this in the {% my repairs title="repairs dashboard" %}.
+
+Previously, this was only visible on the integration dashboard, but now it shows
+up in the repairs dashboard, as this is the place where Home Assistant reports
+all issues with your system.
+
+
+
+## Revamped Proximity integration
+
+For this release, [@mib1185] completely revamped our [Proximity] integration.
+In case you are unfamiliar with it, it allows you to monitor the proximity of
+persons to a particular [zone]. It provides information on how close one is
+to a zone and if they are traveling towards or away from it.
+
+It is an extremely powerful tool for automations. It allows you to create
+automations based on the proximity of people. For example, if you are within
+a certain range from your home and traveling towards it, you could use
+Home Assistant to turn on the lights, open the garage door, turn up the heating,
+and start your favorite playlist in the living room. Welcome home! 🤗
+
+The best part? This integration is now available to set up from the UI!
+Not just that, but it now uses normal sensor entities that we are all already
+familiar with. This will make automating and displaying the data a breeze!
+
+
+
+Thanks [@mib1185]! You did an outstanding job on this one!
+
+If you are already using this integration, this change will come with the
+deprecation of the old entities. See our [backwards-incompatible changes](#backwards-incompatible-changes)
+for more information.
+
+[@mib1185]: https://github.com/mib1185
+[Proximity]: /integrations/proximity
+[zone]: /integrations/zone
+
+## Shipping on a new Python version
+
+This release ships running on Python 3.12! In case you are wondering, what is
+that? Well, Python is the programming language Home Assistant is written in.
+
+Why it matters? It provides many improvements to the foundation we are building
+Home Assistant on, most notably: It is faster! 🚀
+
+Don't worry! If you run the Home Assistant Operating System or are using the
+Home Assistant Container installation type: You won’t have to do anything, as we
+handle the upgrade to Python 3.12 for you. Just upgrade Home Assistant as
+you normally would, and you are good to go! 😎
+
+## Other noteworthy changes
+
+There are many more improvements in this release; here are some of the other
+noteworthy changes this release:
+
+- [@edenhaus] improved how we handle errors in our form fields. We no longer
+ show the technical coding gibberish that often showed up in the past. Nice!
+- When you [change the type of a switch entity] to, for example, a garage door
+ entity, you will now have the option to invert its behavior.
+ Thanks, [@emontnemery]!
+- The [Ecovacs] integration received lots of love from [@edenhaus] and now
+ has support for many Deebot vacuum models with tons of entities to automate
+ with. Nice job!
+- [@mib1185] added automatic cleanups of old/unused refresh tokens 🧹. This
+ means you will be logged out on a device that hasn't used Home Assistant for
+ 90 days. Clean and tidy!
+- The [Tuya] integration can now be set up directly using the Tuya Smart
+ or Smart Life app. No more need for developer accounts or complicated
+ procedures!
+- Using the [utility meter] integration on, for example, your solar inverter,
+ which turns off at night? You can now set the sensor to always be available,
+ even when the source entity is unavailable. Thanks, [@dougiteixeira]!
+- The [TP-Link Smart Home] integration now supports newer devices,
+ including [Tapo-branded] devices! Awesome job [@sdb9696], [@bdraco],
+ and [@rytilahti]!
+- [@AngellusMortis] added new sound event sensors introduced in
+ UniFi Protect version 2.11 to the [UniFi Protect] integration. Nice!
+- Are you a Jinja templating Ninja? [@TNTLarsn] added a new `bitwise_xor`
+ filter for you to use. Awesome!
+- The [Google Generative AI Conversation] allows using the [new Gemini Pro models](https://blog.google/products/bard/google-bard-gemini-pro-image-generation/),
+ including support for the Vision models. This allows you to use images in your
+ prompts too! See an example in the screenshot down below. Super impressive,
+ thanks [@tronikos]!
+
+
+
+The Google Generative AI Conversation integration using the new Gemini Pro Vision models to describe what is seen on the doorbell camera.
+
+
+[Google Generative AI Conversation]: /integrations/google_generative_ai_conversation
+[@tronikos]: https://github.com/tronikos
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@bdraco]: https://github.com/bdraco
+[@dougiteixeira]: https://github.com/dougiteixeira
+[@edenhaus]: https://github.com/edenhaus
+[@emontnemery]: https://github.com/emontnemery
+[@mib1185]: https://github.com/mib1185
+[@rytilahti]: https://github.com/rytilahti
+[@sdb9696]: https://github.com/sdb9696
+[@TNTLarsn]: https://github.com/TNTLarsn
+[change the type of a switch entity]: /integrations/switch_as_x
+[Ecovacs]: /integrations/ecovacs
+[Tapo-branded]: /integrations/tplink_tapo
+[TP-Link Smart Home]: /integrations/tplink
+[Tuya]: /integrations/tuya
+[UniFi Protect]: /integrations/unifiprotect
+[utility meter]: /integrations/utility_meter
+
+## New integrations
+
+We welcome the following new integrations in this release:
+
+- **[AirTouch 5]**, added by [@danzel]
+ Control your AirTouch 5 ducted air conditioning systems.
+- **[Bang & Olufsen]**, added by [@mj23000]
+ Control your Bang & Olufsen Beolab and Beosound devices.
+- **[Bring]**, added by [@miaucl]
+ Use Bring to create shopping lists and share them with your family.
+- **[Elvia]**, added by [@ludeeus]
+ Import your historic energy usage from an Elvia-operated grid.
+- **[Epion]**, added by [@lhgravendeel]
+ Monitor your Epion air quality sensors.
+- **[Govee lights local]**, added by [@Galorhallen]
+ Control your Govee lights locally.
+- **[Home Assistant Analytics Insights]**, added by [@joostlek]
+ This integration allows you to monitor information from the public and open [Home Assistant Analytics](https://analytics.home-assistant.io/).
+- **[Hong Kong Observatory]**, added by [@MisterCommand]
+ Get weather information from the Hong Kong Observatory.
+- **[Huum]**, added by [@frwickst]
+ Control your Huum smart sauna heaters.
+- **[La Marzocco]**, added by [@zweckj]
+ Control your La Marzocco espresso machines.
+- **[LeaOne]**, added by [@bdraco]
+ Monitor your LeaOne health device under the Xiaogui and BAGAIL brands.
+- **[myUplink]**, added by [@pajzo]
+ Monitor myUplink-supported devices in Home Assistant.
+- **[Rabbit Air]**, added by [@al-s]
+ Locally control and monitor your Rabbit Air air purifiers.
+- **[Rainforest RAVEn]**, added by [@cottsay]
+ Pull in energy data from your Rainforest RAVEn energy monitor.
+- **[Romy]**, added by [@xeniter]
+ Control your Romy vacuum cleaners.
+- **[Tedee]**, added by [@zweckj]
+ Use your Tedee smart locks in Home Assistant.
+- **[Teslemetry]**, added by [@Bre77]
+ Pull in live telemetry data from your Tesla vehicle via the Tesla Fleet API.
+- **[TechnoVE]**, added by [@Moustachauve]
+ Control of TechnoVE Smart Charging Station using a local API.
+- **[Traccar server]**, added by [@ludeeus]
+ Track your GPS devices by pulling data from a Traccar server.
+
+[@al-s]: https://github.com/al-s
+[@bdraco]: https://github.com/bdraco
+[@Bre77]: https://github.com/Bre77
+[@cottsay]: https://github.com/cottsay
+[@danzel]: https://github.com/danzel
+[@frwickst]: https://github.com/frwickst
+[@Galorhallen]: https://github.com/Galorhallen
+[@joostlek]: https://github.com/joostlek
+[@lhgravendeel]: https://github.com/lhgravendeel
+[@ludeeus]: https://github.com/ludeeus
+[@miaucl]: https://github.com/miaucl
+[@MisterCommand]: https://github.com/MisterCommand
+[@mj23000]: https://github.com/mj23000
+[@Moustachauve]: https://github.com/Moustachauve
+[@pajzo]: https://github.com/pajzo
+[@xeniter]: https://github.com/xeniter
+[@zweckj]: https://github.com/zweckj
+[AirTouch 5]: /integrations/airtouch5
+[Bang & Olufsen]: /integrations/bang_olufsen
+[Bring]: /integrations/bring
+[Elvia]: /integrations/elvia
+[Epion]: /integrations/epion
+[Govee lights local]: /integrations/govee_light_local
+[Home Assistant Analytics Insights]: /integrations/analytics_insights
+[Hong Kong Observatory]: /integrations/hko
+[Huum]: /integrations/huum
+[La Marzocco]: /integrations/lamarzocco
+[LeaOne]: /integrations/leaone
+[myUplink]: /integrations/myuplink
+[Rabbit Air]: /integrations/rabbitair
+[Rainforest RAVEn]: /integrations/rainforest_raven
+[Romy]: /integrations/romy
+[TechnoVE]: /integrations/technove
+[Tedee]: /integrations/tedee
+[Teslemetry]: /integrations/teslemetry
+[Traccar server]: /integrations/traccar_server
+
+This release also has a new virtual integration. Virtual integrations are stubs
+that are handled by other (existing) integrations to help with findability.
+The following virtual integrations have been added:
+
+- **[City of Austin Utilities]**, provided by [Opower]
+- **[Tapo]**, provided by [TP-Link Smart Home]
+
+[City of Austin Utilities]: /integrations/coautilities
+[Opower]: /integrations/opower
+[Tapo]: /integrations/tplink_tapo
+[TP-Link Smart Home]: /integrations/tplink
+
+## Integrations now available to set up from the UI
+
+The following integrations are now available via the Home Assistant UI:
+
+- **[Ecovacs]**, done by [@edenhaus]
+- **[GPSD]**, done by [@jrieger]
+- **[Lupus Electronics LUPUSEC]**, done by [@suaveolent]
+- **[Lutron]**, done by [@wilburCforce]
+- **[Proximity]**, done by [@mib1185]
+- **[Time & Date]**, done by [@gjohansson-ST]
+
+[@edenhaus]: https://github.com/edenhaus
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@jrieger]: https://github.com/jrieger
+[@mib1185]: https://github.com/mib1185
+[@suaveolent]: https://github.com/suaveolent
+[@wilburCforce]: https://github.com/wilburCforce
+[Ecovacs]: /integrations/ecovacs
+[GPSD]: /integrations/gpsd
+[Lupus Electronics LUPUSEC]: /integrations/lupusec
+[Lutron]: /integrations/lutron
+[Proximity]: /integrations/proximity
+[Time & Date]: /integrations/time_date
+
+## Release 2024.2.1 - February 9
+
+- Catch APIRateLimit in Honeywell ([@mkmer] - [#107806])
+- Allow disabling home assistant watchdog ([@mdegat01] - [#109818])
+- Assist fixes ([@synesthesiam] - [#109889])
+- Bump Python matter server to 5.5.0 ([@marcelveldt] - [#109894])
+- Bump aioelectricitymaps to 0.4.0 ([@jpbede] - [#109895])
+- Skip polling of unavailable Matter nodes ([@marcelveldt] - [#109917])
+- Bump aio-geojson-geonetnz-volcano to 0.9 ([@exxamalte] - [#109940])
+- Handle Matter nodes that become available after startup is done ([@marcelveldt] - [#109956])
+- Allow modbus "scale" to be negative. ([@janiversen] - [#109965])
+- Don't blow up if config entries have unhashable unique IDs ([@emontnemery] - [#109966])
+- Bump pyMicrobot to 0.0.12 ([@spycle] - [#109970])
+- Allow modbus min/max temperature to be negative. ([@janiversen] - [#109977])
+- Bump deebot-client to 5.1.1 ([@edenhaus] - [#109994])
+- Allow modbus negative min/max value. ([@janiversen] - [#109995])
+- Bump aioecowitt to 2024.2.1 ([@edenhaus] - [#109999])
+- Avoid key_error in modbus climate with non-defined fan_mode. ([@janiversen] - [#110017])
+- Update frontend to 20240207.1 ([@bramkragten] - [#110039])
+- Matching duplicate named entities is now an error in Assist ([@synesthesiam] - [#110050])
+- Log error and continue on parsing issues of translated strings ([@mib1185] - [#110046])
+- Bump evohome-async to 0.4.18 ([@zxdavb] - [#110056])
+- Bump py-aosmith to 1.0.8 ([@bdr99] - [#110061])
+
+[#107806]: https://github.com/home-assistant/core/pull/107806
+[#109818]: https://github.com/home-assistant/core/pull/109818
+[#109883]: https://github.com/home-assistant/core/pull/109883
+[#109889]: https://github.com/home-assistant/core/pull/109889
+[#109894]: https://github.com/home-assistant/core/pull/109894
+[#109895]: https://github.com/home-assistant/core/pull/109895
+[#109917]: https://github.com/home-assistant/core/pull/109917
+[#109940]: https://github.com/home-assistant/core/pull/109940
+[#109956]: https://github.com/home-assistant/core/pull/109956
+[#109965]: https://github.com/home-assistant/core/pull/109965
+[#109966]: https://github.com/home-assistant/core/pull/109966
+[#109970]: https://github.com/home-assistant/core/pull/109970
+[#109977]: https://github.com/home-assistant/core/pull/109977
+[#109994]: https://github.com/home-assistant/core/pull/109994
+[#109995]: https://github.com/home-assistant/core/pull/109995
+[#109999]: https://github.com/home-assistant/core/pull/109999
+[#110017]: https://github.com/home-assistant/core/pull/110017
+[#110039]: https://github.com/home-assistant/core/pull/110039
+[#110046]: https://github.com/home-assistant/core/pull/110046
+[#110050]: https://github.com/home-assistant/core/pull/110050
+[#110056]: https://github.com/home-assistant/core/pull/110056
+[#110061]: https://github.com/home-assistant/core/pull/110061
+[@bdr99]: https://github.com/bdr99
+[@bramkragten]: https://github.com/bramkragten
+[@edenhaus]: https://github.com/edenhaus
+[@emontnemery]: https://github.com/emontnemery
+[@exxamalte]: https://github.com/exxamalte
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@jpbede]: https://github.com/jpbede
+[@marcelveldt]: https://github.com/marcelveldt
+[@mdegat01]: https://github.com/mdegat01
+[@mib1185]: https://github.com/mib1185
+[@mkmer]: https://github.com/mkmer
+[@spycle]: https://github.com/spycle
+[@synesthesiam]: https://github.com/synesthesiam
+[@zxdavb]: https://github.com/zxdavb
+
+## Release 2024.2.2 - February 16
+
+- Better teardown and setup of Roborock connections ([@Lash-L] - [#106092])
+- Fix freebox pairing in bridge mode ([@agrenott] - [#106131])
+- Update pytechnove to 1.2.2 ([@Moustachauve] - [#110074])
+- Bump aio-geojson-usgs-earthquakes to 0.3 ([@exxamalte] - [#110084])
+- Bump yalexs to 1.11.1, fixing camera snapshots from Yale Home ([@abjorck] - [#110089])
+- Fix typo in sensor icons configuration ([@bieniu] - [#110133])
+- Only schedule august activity update when a new activity is seen ([@bdraco] - [#110141])
+- Bump yalexs to 1.11.2 ([@bdraco] - [#110144])
+- Properly report cover positions to prometheus ([@agoode] - [#110157])
+- Fix device class repairs issues placeholders in Group ([@silamon] - [#110181])
+- Bump datapoint to 0.9.9 + re-enable Met Office Integration ([@DustyArmstrong] - [#110206])
+- Bump evohome-async to 0.4.19 ([@zxdavb] - [#110225])
+- Fix state classes issue translation in Group ([@silamon] - [#110238])
+- Handle no data error in Electricity Maps config flow ([@jpbede] - [#110259])
+- Fix cpu percentage in System Monitor ([@gjohansson-ST] - [#110268])
+- Bump aiopegelonline to 0.0.8 ([@mib1185] - [#110274])
+- Bump PySwitchbot to 0.45.0 ([@bdraco] - [#110275])
+- Update xknxproject to 3.6.0 ([@farmio] - [#110282])
+- Fix TDBU naming in Motionblinds ([@starkillerOG] - [#110283])
+- Bump linear-garage-door to 0.2.9 ([@IceBotYT] - [#110298])
+- Fix Starline GPS count sensor ([@Anonym-tsk] - [#110348])
+- Fix zone radius calculation when radius is not 0 ([@bdraco] - [#110354])
+- Bump py-sucks to 0.9.9 ([@mib1185] - [#110397])
+- Bump async-upnp-client to 0.38.2 ([@StevenLooman] - [#110411])
+- Mitigate session closed error in Netgear LTE ([@tkdrob] - [#110412])
+- Update pylutron to 0.2.11 ([@wilburCforce] - [#109853])
+- Update pylutron to 0.2.12 ([@wilburCforce] - [#110414])
+- Fix Raspberry Pi utilities installation on Alpine 3.19 ([@agners] - [#110463])
+- Coerce to float in Sensibo climate react custom service ([@gjohansson-ST] - [#110508])
+- Bump orjson to 3.9.14 ([@bdraco] - [#110552])
+- Fix tplink not updating IP from DHCP discovery and discovering twice ([@bdraco] - [#110557])
+- Modbus, allow received int to be a float. ([@janiversen] - [#110648])
+- Fix elkm1 service calls running in the executor ([@bdraco] - [#110655])
+- Bump aiounifi to v71 ([@Kane610] - [#110658])
+- Bump deebot-client to 5.2.1 ([@edenhaus] - [#110683])
+
+[#106092]: https://github.com/home-assistant/core/pull/106092
+[#106131]: https://github.com/home-assistant/core/pull/106131
+[#109853]: https://github.com/home-assistant/core/pull/109853
+[#109883]: https://github.com/home-assistant/core/pull/109883
+[#110074]: https://github.com/home-assistant/core/pull/110074
+[#110078]: https://github.com/home-assistant/core/pull/110078
+[#110084]: https://github.com/home-assistant/core/pull/110084
+[#110089]: https://github.com/home-assistant/core/pull/110089
+[#110133]: https://github.com/home-assistant/core/pull/110133
+[#110141]: https://github.com/home-assistant/core/pull/110141
+[#110144]: https://github.com/home-assistant/core/pull/110144
+[#110157]: https://github.com/home-assistant/core/pull/110157
+[#110181]: https://github.com/home-assistant/core/pull/110181
+[#110206]: https://github.com/home-assistant/core/pull/110206
+[#110225]: https://github.com/home-assistant/core/pull/110225
+[#110238]: https://github.com/home-assistant/core/pull/110238
+[#110259]: https://github.com/home-assistant/core/pull/110259
+[#110268]: https://github.com/home-assistant/core/pull/110268
+[#110274]: https://github.com/home-assistant/core/pull/110274
+[#110275]: https://github.com/home-assistant/core/pull/110275
+[#110282]: https://github.com/home-assistant/core/pull/110282
+[#110283]: https://github.com/home-assistant/core/pull/110283
+[#110298]: https://github.com/home-assistant/core/pull/110298
+[#110348]: https://github.com/home-assistant/core/pull/110348
+[#110354]: https://github.com/home-assistant/core/pull/110354
+[#110397]: https://github.com/home-assistant/core/pull/110397
+[#110411]: https://github.com/home-assistant/core/pull/110411
+[#110412]: https://github.com/home-assistant/core/pull/110412
+[#110414]: https://github.com/home-assistant/core/pull/110414
+[#110463]: https://github.com/home-assistant/core/pull/110463
+[#110508]: https://github.com/home-assistant/core/pull/110508
+[#110552]: https://github.com/home-assistant/core/pull/110552
+[#110557]: https://github.com/home-assistant/core/pull/110557
+[#110648]: https://github.com/home-assistant/core/pull/110648
+[#110655]: https://github.com/home-assistant/core/pull/110655
+[#110658]: https://github.com/home-assistant/core/pull/110658
+[#110683]: https://github.com/home-assistant/core/pull/110683
+[@Anonym-tsk]: https://github.com/Anonym-tsk
+[@DustyArmstrong]: https://github.com/DustyArmstrong
+[@IceBotYT]: https://github.com/IceBotYT
+[@Kane610]: https://github.com/Kane610
+[@Lash-L]: https://github.com/Lash-L
+[@Moustachauve]: https://github.com/Moustachauve
+[@StevenLooman]: https://github.com/StevenLooman
+[@abjorck]: https://github.com/abjorck
+[@agners]: https://github.com/agners
+[@agoode]: https://github.com/agoode
+[@agrenott]: https://github.com/agrenott
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@edenhaus]: https://github.com/edenhaus
+[@exxamalte]: https://github.com/exxamalte
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@janiversen]: https://github.com/janiversen
+[@jpbede]: https://github.com/jpbede
+[@mib1185]: https://github.com/mib1185
+[@silamon]: https://github.com/silamon
+[@starkillerOG]: https://github.com/starkillerOG
+[@tkdrob]: https://github.com/tkdrob
+[@wilburCforce]: https://github.com/wilburCforce
+[@zxdavb]: https://github.com/zxdavb
+
+## Release 2024.2.3 - February 22
+
+- Fix reauth in Overkiz for config entries created prior to 2022.12 ([@iMicknl] - [#106251])
+- Handle deep standby and poweroffs of enigma2 devices gracefully ([@autinerd] - [#107462])
+- Add wake up timeout to Teslemetry ([@Bre77] - [#109037])
+- Fix set_temperature in Tessie climate platform ([@Bre77] - [#110445])
+- Fix uuid issue in Lutron ([@wilburCforce] - [#110524])
+- Update rokuecp to 0.19.1 ([@ctalkington] - [#110670])
+- Fix scene activation with climate entities with `None` attribute values ([@mib1185] - [#110684])
+- Remove matplotlib pinning due to Python 3.12 incompatibility ([@sbyx] - [#110706])
+- Bump roombapy to 1.6.12 ([@mib1185] - [#110762])
+- Ensure Tile timestamps are reported as UTC ([@bachya] - [#110773])
+- Detect reached API rate limit in Tankerkoenig ([@mib1185] - [#110432])
+- Bump aiotankerkoenig to 0.4.1 ([@jpbede] - [#110840])
+- Update govee-local-api library to 1.4.4 ([@Galorhallen] - [#110854])
+- Allow loading of more then 1 defined Apprise URL ([@caronc] - [#110868])
+- Reolink continue setup when internet blocked ([@starkillerOG] - [#110888])
+- Bump deluge-client to 1.10.0 ([@tkdrob] - [#110663])
+- Bump deluge-client to 1.10.2 ([@dsander] - [#110905])
+- Bump reolink-aio to 0.8.8 ([@starkillerOG] - [#110959])
+- Reset error state when Ecovacs bot is operational again ([@mib1185] - [#110962])
+- Bump motionblinds to 0.6.21 ([@starkillerOG] - [#110970])
+- Bump holidays to 0.43 ([@gjohansson-ST] - [#111039])
+- Fixes UniFi Protect light state check ([@AngellusMortis] - [#111058])
+- Bump pywebpush to 1.14.1 ([@thecode] - [#111082])
+- Bump aioairzone to v0.7.4 ([@Noltari] - [#111105])
+- Bump deebot-client to 5.2.2 ([@edenhaus] - [#111112])
+- Ignore cloudhook already removed in mobile app ([@joostlek] - [#111122])
+
+[#106251]: https://github.com/home-assistant/core/pull/106251
+[#107462]: https://github.com/home-assistant/core/pull/107462
+[#109037]: https://github.com/home-assistant/core/pull/109037
+[#109883]: https://github.com/home-assistant/core/pull/109883
+[#110078]: https://github.com/home-assistant/core/pull/110078
+[#110432]: https://github.com/home-assistant/core/pull/110432
+[#110445]: https://github.com/home-assistant/core/pull/110445
+[#110524]: https://github.com/home-assistant/core/pull/110524
+[#110663]: https://github.com/home-assistant/core/pull/110663
+[#110670]: https://github.com/home-assistant/core/pull/110670
+[#110684]: https://github.com/home-assistant/core/pull/110684
+[#110706]: https://github.com/home-assistant/core/pull/110706
+[#110720]: https://github.com/home-assistant/core/pull/110720
+[#110762]: https://github.com/home-assistant/core/pull/110762
+[#110773]: https://github.com/home-assistant/core/pull/110773
+[#110840]: https://github.com/home-assistant/core/pull/110840
+[#110854]: https://github.com/home-assistant/core/pull/110854
+[#110868]: https://github.com/home-assistant/core/pull/110868
+[#110888]: https://github.com/home-assistant/core/pull/110888
+[#110905]: https://github.com/home-assistant/core/pull/110905
+[#110959]: https://github.com/home-assistant/core/pull/110959
+[#110962]: https://github.com/home-assistant/core/pull/110962
+[#110970]: https://github.com/home-assistant/core/pull/110970
+[#111035]: https://github.com/home-assistant/core/pull/111035
+[#111039]: https://github.com/home-assistant/core/pull/111039
+[#111058]: https://github.com/home-assistant/core/pull/111058
+[#111082]: https://github.com/home-assistant/core/pull/111082
+[#111105]: https://github.com/home-assistant/core/pull/111105
+[#111112]: https://github.com/home-assistant/core/pull/111112
+[#111122]: https://github.com/home-assistant/core/pull/111122
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Bre77]: https://github.com/Bre77
+[@Galorhallen]: https://github.com/Galorhallen
+[@Noltari]: https://github.com/Noltari
+[@autinerd]: https://github.com/autinerd
+[@bachya]: https://github.com/bachya
+[@caronc]: https://github.com/caronc
+[@ctalkington]: https://github.com/ctalkington
+[@dsander]: https://github.com/dsander
+[@edenhaus]: https://github.com/edenhaus
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@iMicknl]: https://github.com/iMicknl
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@mib1185]: https://github.com/mib1185
+[@sbyx]: https://github.com/sbyx
+[@starkillerOG]: https://github.com/starkillerOG
+[@thecode]: https://github.com/thecode
+[@tkdrob]: https://github.com/tkdrob
+[@wilburCforce]: https://github.com/wilburCforce
+
+## Release 2024.2.4 - February 25
+
+- Return group unit of measurement when device_class is None ([@PoppyPop] - [#110973]) ([group docs])
+- Bump roombapy to 1.6.13 ([@Orhideous] - [#111187]) ([roomba docs])
+- Bump orjson to 3.9.15 ([@bdraco] - [#111233])
+- Set Lutron switch to device name ([@joostlek] - [#111293]) ([lutron docs])
+- Bump opower to 0.3.0 ([@swartzd] - [#109248]) ([opower docs])
+- Bump opower to 0.3.1 ([@benhoff] - [#111307])
+- Fix another name missing in wyoming getLogger ([@llluis] - [#111390]) ([wyoming docs])
+- Update caldav to 1.3.9 ([@cdce8p] - [#111429]) ([caldav docs])
+- Update guppy3 to 3.1.4.post1 ([@cdce8p] - [#111430]) ([profiler docs])
+- Bump openwebifpy to 4.2.4 ([@autinerd] - [#110676]) ([enigma2 docs])
+
+[@autinerd]: https://github.com/autinerd
+[enigma2 docs]: /integrations/enigma2/
+[#110676]: https://github.com/home-assistant/core/pull/110676
+[#109248]: https://github.com/home-assistant/core/pull/109248
+[#109883]: https://github.com/home-assistant/core/pull/109883
+[#110078]: https://github.com/home-assistant/core/pull/110078
+[#110720]: https://github.com/home-assistant/core/pull/110720
+[#110973]: https://github.com/home-assistant/core/pull/110973
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111187]: https://github.com/home-assistant/core/pull/111187
+[#111233]: https://github.com/home-assistant/core/pull/111233
+[#111293]: https://github.com/home-assistant/core/pull/111293
+[#111307]: https://github.com/home-assistant/core/pull/111307
+[#111390]: https://github.com/home-assistant/core/pull/111390
+[#111429]: https://github.com/home-assistant/core/pull/111429
+[#111430]: https://github.com/home-assistant/core/pull/111430
+[@Orhideous]: https://github.com/Orhideous
+[@PoppyPop]: https://github.com/PoppyPop
+[@bdraco]: https://github.com/bdraco
+[@benhoff]: https://github.com/benhoff
+[@cdce8p]: https://github.com/cdce8p
+[@frenck]: https://github.com/frenck
+[@joostlek]: https://github.com/joostlek
+[@llluis]: https://github.com/llluis
+[@swartzd]: https://github.com/swartzd
+[abode docs]: /integrations/abode/
+[caldav docs]: /integrations/caldav/
+[group docs]: /integrations/group/
+[lutron docs]: /integrations/lutron/
+[opower docs]: /integrations/opower/
+[profiler docs]: /integrations/profiler/
+[roomba docs]: /integrations/roomba/
+[wyoming docs]: /integrations/wyoming/
+
+## Release 2024.2.5 - February 27
+
+- Add title to reauthenticate integration issue ([@timmo001] - [#111275])
+
+[#111275]: https://github.com/home-assistant/core/pull/111275
+[@timmo001]: https://github.com/timmo001
+
+## Need help? Join the community!
+
+Home Assistant has a great community of users who are all more than willing
+to help each other out. So, join us!
+
+Our very active [Discord chat server](/join-chat) is an excellent place to be
+at, and don't forget to join our amazing [forums](https://community.home-assistant.io/).
+
+Found a bug or issue? Please report it in our [issue tracker](https://github.com/home-assistant/core/issues),
+to get it fixed! Or, check [our help page](/help) for guidance for more
+places you can go.
+
+Are you more into email? [Sign-up for our Building the Open Home Newsletter](/newsletter)
+to get the latest news about features, things happening in our community and
+other news about building an Open Home; straight into your inbox.
+
+## Backward-incompatible changes
+
+{% details "Authentication" %}
+
+We changed the way refresh tokens are handled. Refresh tokens are part of what
+keeps you logged in to Home Assistant.
+
+Refresh tokens will be automatically deleted when unused. A refresh token
+is considered unused if it has not been used for a login within 90 days.
+
+If your logged-in session hasn’t been used for 90 days, you will be logged out.
+You will need to log in again.
+
+We recommend using [Long-lived access tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token)
+if you need a permanent token.
+
+([@mib1185] - [#108428]) ([documentation](/docs/authentication/))
+
+[@mib1185]: https://github.com/mib1185
+[#108428]: https://github.com/home-assistant/core/pull/108428
+
+{% enddetails %}
+
+{% details "Blink" %}
+
+The options flow that gave the option to set a custom scan interval has been
+removed.
+
+Adjustable scan interval is no longer allowed, but the option has
+had no effect on the integration since 2023.11.
+
+You can use an automation as an alternative to create a custom polling rate
+([documentation](/common-tasks/general/#defining-a-custom-polling-interval)).
+Updating one entity in a blink configuration will update all entities in each
+blink configuration.
+
+([@mkmer] - [#106735]) ([documentation](/integrations/blink))
+
+[@mkmer]: https://github.com/mkmer
+[#106735]: https://github.com/home-assistant/core/pull/106735
+
+---
+
+Update Wi-Fi diagnostic to match new API units - previously Blink reported RSSI
+dBm, now they report generic 0-5 for signal strength.
+
+([@mkmer] - [#107539]) ([documentation](/integrations/blink))
+
+[@mkmer]: https://github.com/mkmer
+[#107539]: https://github.com/home-assistant/core/pull/107539
+
+{% enddetails %}
+
+{% details "Cisco Webex Teams" %}
+
+This integration has been disabled. The upstream libraries used by
+Home Assistant are not compatible with Python 3.12.
+
+This compatibility issue has been [reported upstream](https://github.com/WebexCommunity/WebexPythonSDK/issues/139).
+
+([@frenck] - [#108163]) ([documentation](/integrations/cisco_webex_teams))
+
+[@frenck]: https://github.com/frenck
+[#108163]: https://github.com/home-assistant/core/pull/108163
+
+{% enddetails %}
+
+{% details "EZVIZ" %}
+
+The services `ezviz.ptz`, `ezviz.sound_alarm`, and `alarm_sound` have been moved
+to button and select entities in release 2023.8. Support for the deprecated
+services has now been completely removed.
+
+If you are using these services in automations or scripts, you will need to
+update them to match this change.
+
+([@jpbede] - [#107582]) ([documentation](/integrations/ezviz))
+
+[@jpbede]: https://github.com/jpbede
+[#107582]: https://github.com/home-assistant/core/pull/107582
+
+{% enddetails %}
+
+{% details "Google Generative AI Conversation" %}
+
+Any previous integration setups might have to be recreated or reconfigured with
+the new `models/gemini-pro` instead of the legacy `models/chat-bison-001`.
+
+([@tronikos] - [#105789]) ([documentation](/integrations/google_generative_ai_conversation))
+
+[@tronikos]: https://github.com/tronikos
+[#105789]: https://github.com/home-assistant/core/pull/105789
+
+{% enddetails %}
+
+{% details "HomeWizard Energy" %}
+
+The Gas meter ID sensor is removed and the meter ID is now shown as a serial
+number in the device info panel instead.
+
+([@DCSBL] - [#100684]) ([documentation](/integrations/homewizard))
+
+[@DCSBL]: https://github.com/DCSBL
+[#100684]: https://github.com/home-assistant/core/pull/100684
+
+{% enddetails %}
+
+{% details "Honeywell Total Connect Comfort (US)" %}
+
+The preset mode was returning "unknown" rather than "none".
+Any references to `preset_mode` may need to be updated.
+
+([@mkmer] - [#108599]) ([documentation](/integrations/honeywell))
+
+[@mkmer]: https://github.com/mkmer
+[#108599]: https://github.com/home-assistant/core/pull/108599
+
+{% enddetails %}
+
+{% details "Huawei LTE" %}
+
+The services `huawei_lte.clear_traffic_statistics` and `huawei_lte.reboot` have
+been moved to button entities in release 2023.8. Support for the deprecated
+services has now been completely removed.
+
+If you are using these services in automations or scripts, you will need to
+update them to match this change.
+
+([@jpbede] - [#107578]) ([documentation](/integrations/huawei_lte))
+
+[@jpbede]: https://github.com/jpbede
+[#107578]: https://github.com/home-assistant/core/pull/107578
+
+{% enddetails %}
+
+{% details "JustNimbus" %}
+
+The following sensors have been removed from the JustNimbus integration
+since they're no longer available through JustNimbus' API:
+
+- Pump starts
+- Pump hours
+- Error code
+- Total replenished
+- Pump flow
+- Drink flow
+
+The following sensors have been renamed:
+
+- Total saved (`total_saved`) -> Total saved (`water_saved`)
+- Total use (`totver`) -> Total use (`water_used`)
+- Maximum reservoir content (`reservoir_content_max`) -> Reservoir capacity (`reservoir_capacity`)
+
+Automations or scripts using any of the removed or renamed entities should be
+updated. Once updated, the old entities can be safely removed.
+
+([@kvanzuijlen] - [#99212]) ([documentation](/integrations/justnimbus))
+
+[@kvanzuijlen]: https://github.com/kvanzuijlen
+[#99212]: https://github.com/home-assistant/core/pull/99212
+
+{% enddetails %}
+
+{% details "Litter-Robot" %}
+
+The services `vacuum.turn_on` and `vacuum.turn_off` were deprecated in 2023.11.
+Support for the deprecated services has now been completely removed.
+
+If you are still using them, please adjust your automations and scripts and
+use `vacuum.start` and `vacuum.stop` instead.
+
+([@jpbede] - [#107882]) ([documentation](/integrations/litterrobot))
+
+[@jpbede]: https://github.com/jpbede
+[#107882]: https://github.com/home-assistant/core/pull/107882
+
+{% enddetails %}
+
+{% details "Lutron" %}
+
+The Lutron integration previously created fans as light entities. This has been
+changed to create actual fan entities instead.
+
+If you have automations, scripts, scenes, or dashboards that used these light
+entities, you will need to update them to use the new fan entities.
+
+([@wilburCforce] - [#107402]) ([documentation](/integrations/lutron))
+
+[@wilburCforce]: https://github.com/wilburCforce
+[#107402]: https://github.com/home-assistant/core/pull/107402
+
+{% enddetails %}
+
+{% details "MELCloud" %}
+
+The daily energy sensors have been removed to prevent being throttled by the
+external API. This mostly affects ATW devices.
+
+For ATA devices, this sensor is also removed. However, the total energy consumed
+(if your device supports that) remains available. The latter supports long-term
+statistics, providing insights into daily energy usage via the energy dashboard
+or statistic card.
+
+([@vilppuvuorinen] - [#109832]) ([documentation](/integrations/melcloud))
+
+[@vilppuvuorinen]: https://github.com/vilppuvuorinen
+[#109832]: https://github.com/home-assistant/core/pull/109832
+
+{% enddetails %}
+
+{% details "Met Office" %}
+
+This integration has been disabled. The upstream libraries used by
+Home Assistant are not compatible with Python 3.12.
+
+This compatibility issue has been [reported upstream](https://github.com/EJEP/datapoint-python/issues/183).
+
+([@frenck] - [#108163]) ([documentation](/integrations/metoffice))
+
+[@frenck]: https://github.com/frenck
+[#108163]: https://github.com/home-assistant/core/pull/108163
+
+{% enddetails %}
+
+{% details "MQTT" %}
+
+MQTT `sensor` or `binary_sensor` configuration with an `entity_category`
+explicitly set to `config` will fail to set up. Maintainers should set the
+`entity_category` attribute to `diagnostic` or omit the config attribute.
+
+[Related developer blogpost](https://developers.home-assistant.io/blog/2021/10/26/config-entity/)
+
+([@jbouwh] - [#107199]) ([documentation](/integrations/mqtt))
+
+[@jbouwh]: https://github.com/jbouwh
+[#107199]: https://github.com/home-assistant/core/pull/107199
+
+---
+
+When an MQTT entity has a device name equal to the entity name or starts with
+the device name, this will no longer be corrected.
+
+When entities like these are created, they will have device and entity names in
+the friendly name. Suppose the device name is omitted because it is the same
+as the entity name. In that case, the entity name attribute should be null
+in the JSON payload or YAML configuration.
+
+[Related developer blogpost](https://developers.home-assistant.io/blog/2023/07/21/change-naming-mqtt-entities)
+
+([@jbouwh] - [#107188]) ([documentation](/integrations/mqtt))
+
+[@jbouwh]: https://github.com/jbouwh
+[#107188]: https://github.com/home-assistant/core/pull/107188
+
+---
+
+The support for MQTT vacuum entities with a `legacy` schema is removed after 6
+months of deprecation. Users can use the `state` schema instead,
+which is now the default.
+
+([@jbouwh] - [#107274]) ([documentation](/integrations/mqtt))
+
+[@jbouwh]: https://github.com/jbouwh
+[#107274]: https://github.com/home-assistant/core/pull/107274
+
+{% enddetails %}
+
+{% details "Proximity" %}
+
+The proximity entity (`proximity.*`) is deprecated and will be removed in 2024.8.
+It is superseded by sensor entities.
+
+For each tracked person or device, one sensor for the distance and the
+direction of travel to/from the monitored zone is created. Further, for each
+Proximity configuration, one sensor that shows the nearest device or person
+and its distance and direction of travel to the monitored zone is created.
+
+([@mib1185] - [#108730]) ([documentation](/integrations/proximity))
+
+[@mib1185]: https://github.com/mib1185
+[#108730]: https://github.com/home-assistant/core/pull/108730
+
+{% enddetails %}
+
+{% details "Renson" %}
+
+The start time of day and start time of night sensors have been replaced by
+time entities. If you used these sensors in automations or scripts, you will
+need to update them to use the new time entities.
+
+([@jimmyd-be] - [#105031]) ([documentation](/integrations/renson))
+
+[@jimmyd-be]: https://github.com/jimmyd-be
+[#105031]: https://github.com/home-assistant/core/pull/105031
+
+{% enddetails %}
+
+{% details "RESTful Command" %}
+
+Call to RESTful command services will no longer silently fail and will raise an
+exception on, for example, timeout or decoding errors.
+
+You could consider using [`continue_on_error`](/docs/scripts/#continuing-on-error)
+for scripts and automations that use RESTful commands that are allowed to fail
+occasionally.
+
+([@RoboMagus] - [#97208]) ([documentation](/integrations/rest_command))
+
+[@RoboMagus]: https://github.com/RoboMagus
+[#97208]: https://github.com/home-assistant/core/pull/97208
+
+{% enddetails %}
+
+{% details "Roborock" %}
+
+The service `vacuum.start_pause` was deprecated in 2023.8. Support for the
+deprecated service has now been completely removed.
+
+If you are still using this service, please adjust your automations and scripts,
+to use `vacuum.pause` or `vacuum.start` instead.
+
+([@jpbede] - [#107895]) ([documentation](/integrations/roborock))
+
+[@jpbede]: https://github.com/jpbede
+[#107895]: https://github.com/home-assistant/core/pull/107895
+
+{% enddetails %}
+
+{% details "Sensors" %}
+
+Setting `last_reset` for entities with a `state_class` other than `total` is
+no longer supported. Please update your configuration if `state_class`
+is manually configured (for example, in templates or when using customize to
+override this attribute).
+
+([@jpbede] - [#108391]) ([documentation](/integrations/sensor))
+
+[@jpbede]: https://github.com/jpbede
+[#108391]: https://github.com/home-assistant/core/pull/108391
+
+{% enddetails %}
+
+{% details "Swiss public transport" %}
+
+The state value of the sensor is now a standardized timestamp.
+Further, all `timestamps` and `durations` in the additional fields are now also
+proper datetime/durations.
+
+([@miaucl] - [#12341064855]) ([documentation](/integrations/swiss_public_transport))
+
+[@miaucl]: https://github.com/miaucl
+[#106485]: https://github.com/home-assistant/core/pull/106485
+
+{% enddetails %}
+
+{% details "TP-Link Smart Home" %}
+
+To prevent overloading the power strips, the energy data is now polled every
+60 seconds. If you need to poll the data faster, please use an automation that
+calls the `homeassistant.update_entity` service.
+
+([@bdraco] - [#104208]) ([documentation](/integrations/tplink))
+
+[@bdraco]: https://github.com/bdraco
+[#104208]: https://github.com/home-assistant/core/pull/104208
+
+{% enddetails %}
+
+{% details "Traccar" %}
+
+The YAML configuration for the Traccar integration has been deprecated
+and will be removed in Home Assistant 2024.8.0. Your YAML configuration will
+be automatically imported to the new [Traccar Server](/integrations/traccar_server)
+integration.
+
+If you previously used the `scan_interval` option, this is not being imported.
+If you are in need of a custom polling interval, you can use an automation
+to define your own custom polling behavior.
+[Learn more about that here.](/common-tasks/general/#defining-a-custom-polling-interval)
+
+([@ludeeus] - [#109226]) ([documentation](/integrations/traccar_server))
+
+[@ludeeus]: https://github.com/ludeeus
+[#109226]: https://github.com/home-assistant/core/pull/109226
+
+{% enddetails %}
+
+{% details "Tuya" %}
+
+Tuya has provided an easier and improved login method for Home Assistant users.
+
+Having a developer account with Tuya is no longer required; instead, you can
+scan a QR code with your Tuya Smart or Smart Life app to authenticate it
+with Home Assistant.
+
+After updating to this release, Home Assistant will ask you to re-authenticate
+your Tuya Smart or Smart Life account using this new method.
+
+([@frenck] - [#109155]) ([documentation](/integrations/tuya))
+
+[@frenck]: https://github.com/frenck
+[#109155]: https://github.com/home-assistant/core/pull/109155
+
+---
+
+The services `vacuum.turn_on` and `vacuum.turn_off` were deprecated in 2023.8.
+Support for the deprecated services has now been completely removed.
+
+If still use them, please adjust your automations and scripts and
+use `vacuum.start` and `vacuum.stop` instead.
+
+([@jpbede] - [#107896]) ([documentation](/integrations/tuya))
+
+[@jpbede]: https://github.com/jpbede
+[#107896]: https://github.com/home-assistant/core/pull/107896
+
+---
+
+Previously, Tuya would fall back to using the metric system if the temperature
+unit was not reported by a climate device. This behavior has been changed to
+use the default unit configured on your system instead.
+
+([@DellanX] - [#108050]) ([documentation](/integrations/tuya))
+
+[@DellanX]: https://github.com/DellanX
+[#108050]: https://github.com/home-assistant/core/pull/108050
+
+{% enddetails %}
+
+{% details "Webhooks" %}
+
+Since version 2023.7 you have been informed that the "local only" option of
+webhooks will become the default. With this release this change is now put
+into effect. Please, if needed, adjust your automation triggers.
+
+([@jpbede] - [#107670]) ([documentation](/integrations/webhook))
+
+[@jpbede]: https://github.com/jpbede
+[#107670]: https://github.com/home-assistant/core/pull/107670
+
+{% enddetails %}
+
+{% details "Withings" %}
+
+In withings, the unit of measurement of all duration-related sensors
+(for example, sleep, goal, and active time today) has been changed from
+measuring in seconds to measuring in either hours or minutes.
+
+If you want to measure in a different unit, please change the
+preferred unit of measurement in the entity settings.
+
+([@joostlek]) ([documentation](/integrations/withings))
+
+[@joostlek]: https://github.com/joostlek
+
+{% enddetails %}
+
+{% details "Z-Wave" %}
+
+The default rounding of numeric sensors to two decimals has been removed.
+
+We now let the device and driver decide what precision should be reported. This
+allows devices with greater precision to report accurately.
+
+You can change the display precision in the UI for the sensor or use a template
+sensor if you want to change the precision.
+
+([@MartinHjelmare] - [#107100]) ([documentation](/integrations/zwave_js))
+
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[#107100]: https://github.com/home-assistant/core/pull/107100
+
+---
+
+Set suggested precision to 0 decimals for voltage sensors with a native unit in V.
+This will uniform the display precision of voltage sensors where there otherwise
+seems to be a variety of precision reported from different devices.
+
+If you want to change the precision, you can do that in the sensor options in the
+UI or with a template sensor.
+
+([@MartinHjelmare] - [#107116]) ([documentation](/integrations/zwave_js))
+
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[#107116]: https://github.com/home-assistant/core/pull/107116
+
+---
+
+The Fan and Dry climate Preset modes have been removed after a period of
+deprecation. If you haven't done so, you should update your automations or
+scripts to use the corresponding Dry and Fan **HVAC modes** instead.
+
+([@jbouwh] - [#108124]) ([documentation](/integrations/zwave_js))
+
+[@jbouwh]: https://github.com/jbouwh
+[#108124]: https://github.com/home-assistant/core/pull/108124
+
+{% enddetails %}
+
+If you are a custom integration developer and want to learn about breaking
+changes and new features available for your integration: Be sure to follow our
+[developer blog][devblog]. The following are the most notable for this release:
+
+- [Changes to FlowManager.async_show_progress](https://developers.home-assistant.io/blog/2024/01/11/async-show-progress-changes)
+- [Changes to light color mode when lights display an effect](https://developers.home-assistant.io/blog/2024/01/23/light-color-mode-changes/)
+- [Deprecate invalid use of sensor unit of measurement and state class](https://developers.home-assistant.io/blog/2024/01/17/deprecate-invalid-sensor-uom-state-class-use)
+- [Enumerating services](https://developers.home-assistant.io/blog/2024/01/22/async_services_for_domain)
+- [Icon translations](https://developers.home-assistant.io/blog/2024/01/19/icon-translations)
+- [Introducing entity translation placeholders](https://developers.home-assistant.io/blog/2024/01/19/entity-translations-placeholders)
+- [New entity features in Climate entity](https://developers.home-assistant.io/blog/2024/01/24/climate-climateentityfeatures-expanded)
+- [Properties changes for ha-state-icon](https://developers.home-assistant.io/blog/2024/01/30/ha-state-icon-properties-changes)
+
+[devblog]: https://developers.home-assistant.io/blog/
+
+## Farewell to the following
+
+The following integrations are also no longer available as of this release:
+
+- **Facebox** has been removed. It is no longer possible to get API keys,
+ and thus, it is no longer possible to use this integration.
+ ([@reedy] - [#107005])
+- **Legrand Home+ Control** has been removed as their API shut down in December.
+ Use [the Netatmo integration](/integrations/netatmo/) as an alternative to
+ integrate your Legrand Home+ Control devices.
+ ([@jpbede] - [#107587])
+- **Life360** has been removed. They are now actively blocking third-party
+ access, including Home Assistant. The [Home Assistant Companion app](https://companion.home-assistant.io/)
+ is a good and (above all) privacy-friendly alternative.
+ ([@pnbruckner] - [#107805])
+
+[@jpbede]: https://github.com/jpbede
+[@pnbruckner]: https://github.com/pnbruckner
+[@reedy]: https://github.com/reedy
+[#107005]: https://github.com/home-assistant/core/pull/107005
+[#107587]: https://github.com/home-assistant/core/pull/107587
+[#107805]: https://github.com/home-assistant/core/pull/107805
+
+## All changes
+
+Of course, there is a lot more in this release. You can find a list of
+all changes made here: [Full changelog for Home Assistant Core 2024.2](/changelogs/core-2024.2)
diff --git a/source/_posts/2024-02-15-nabu-casa-joins-z-wave-alliance.markdown b/source/_posts/2024-02-15-nabu-casa-joins-z-wave-alliance.markdown
new file mode 100644
index 000000000000..5b673f737d44
--- /dev/null
+++ b/source/_posts/2024-02-15-nabu-casa-joins-z-wave-alliance.markdown
@@ -0,0 +1,37 @@
+---
+layout: post
+title: "Nabu Casa joins the Z-Wave Alliance"
+description: "We have joined the Z-Wave Alliance, thanks to revenue from Home Assistant Cloud subscribers, and will start the certification process for Z-Wave JS."
+date: 2024-02-15 00:00:01
+date_formatted: "February 15, 2024"
+author: Paulus Schoutsen
+comments: true
+categories: Z-Wave
+og_image: /images/blog/2024-02-zwave/nabucasa-zwa.png
+---
+
+TL;DR: We have joined the Z-Wave Alliance, thanks to revenue from Home Assistant Cloud subscribers, and will start the certification process for Z-Wave JS.
+
+
+
+Z-Wave is a local smart home standard that has been around since 1999. Thanks to operating on sub-Ghz frequencies, it is able to create a reliable mesh network that can span your whole house. Its reliability also made it popular to power brands like Yale locks and Amazon Ring. The Z-Wave standard is developed by a consortium of companies under the [Z-Wave Alliance](https://z-wavealliance.org/).
+
+With Home Assistant, we have integrated Z-Wave since our early days. We first relied on OpenZWave until we transitioned in 2021 to using [Z-Wave JS](https://github.com/zwave-js) created by Dominic Griesel. Z-Wave JS is a fully open-source implementation of the Z-Wave protocol. Combined with Home Assistant and a Z-Wave USB stick, it gives our users the best possible Z-Wave experience. Dominic is employed by Nabu Casa and can work full-time on Z-Wave JS thanks to the revenue generated from [Home Assistant Cloud](https://www.nabucasa.com/) subscribers (thank you!).
+
+
+
+We have thoroughly tested Z-Wave JS with the Home Assistant community. Our community is from all over the world and has access to a wide variety of Z-Wave devices from all generations. This has ensured that Z-Wave JS is able to deal with devices and their quirks all the way back to the original Z-Wave release.
+
+However, our ambitions for Z-Wave JS are bigger than just making sure we have a rock-solid Z-Wave implementation for you. We want to make it easier for companies to develop Z-Wave controllers and grow the Z-Wave ecosystem. A bigger ecosystem is more appealing for manufacturers to make Z-Wave devices, which results in more choices for our users. And as Z-Wave works locally, it is a local choice.
+
+Today, we are proud to announce that we have joined the Z-Wave Alliance to get Z-Wave JS officially certified. Certification shows other companies that Z-Wave JS is a full and correct implementation of the Z-Wave standard. It will allow other companies to feel confident that they can adopt Z-Wave JS to integrate Z-Wave into their products. HomeSeer, for example, [has announced](https://forums.homeseer.com/forum/hs4-products/hs4-plugins/lighting-primary-technology-plug-ins-aa/z-wave-plus-homeseer/1634034-new-z-wave-plus-plugin-under-development#post1634634%0A) that it is migrating its platform to Z-Wave JS. We hope this will open up new opportunities as more companies follow our lead in the future.
+
+## The Open Home
+
+With Home Assistant, we have a vision for the smart home that we call [the Open Home](/blog/2021/12/23/the-open-home/). It revolves around three core values: privacy, choice, and sustainability. Anything that lives up to those values is worthy of being adopted by our community. It’s why we have previously [joined the Connectivity Standards Alliance (CSA)](/blog/2023/12/04/nabu-casa-at-the-matter-member-meeting/) to take part in the development of Matter and Zigbee, and have now joined the Z-Wave Alliance.
+
+Z-Wave aligns with these three values: your data remains local, you can combine Z-Wave devices from any manufacturer, and devices will continue to operate even if the company behind them is no longer around. It is an important standard for the Open Home.
+
+This is why, even though Z-Wave, Zigbee, and Matter are competing standards, we have joined both the Z-Wave Alliance and the CSA and will keep supporting each standard. Not every smart home is the same. Users need to have choice and be able to pick the standard that works best for their home. And competing standards push each other to improve and innovate, ultimately leading to all standards becoming better for users.
+
+As part of the Z-Wave Alliance, we plan on bringing our unique insights as an open source community to the table. We want to make sure that the future direction of the Z-Wave standard continues to remain true to our Open Home values. Just like we do for Zigbee and Matter within the CSA.
diff --git a/source/_posts/2024-02-16-voice-chapter-6-livestream.markdown b/source/_posts/2024-02-16-voice-chapter-6-livestream.markdown
new file mode 100644
index 000000000000..e49ffe57f7c8
--- /dev/null
+++ b/source/_posts/2024-02-16-voice-chapter-6-livestream.markdown
@@ -0,0 +1,19 @@
+---
+layout: post
+title: "Voice - Chapter 6 Livestream"
+description: "Our Year of the Voice has ended, but that does not mean development has stopped! In our Chapter 6 livestream we're excited to show you what we've been working on since last year."
+date: 2024-02-16 00:00:01
+date_formatted: "February 16, 2024"
+author: Michael Hansen
+comments: true
+categories: Assist
+og_image: /images/blog/2024-02-voice-chapter-6/banner.png
+---
+
+Even though our Year of the Voice has ended, that does not mean the development of our voice assistant has stopped! We're excited to show you what we've been working on since [Chapter 5](https://www.youtube.com/live/djEkgoS5dDQ) last year during our Chapter 6 livestream on Wednesday, February 21st, at 21:00 CET / 3:00 PM ET / 12:00 PM PT.
+
+Want to get a sneak peek of what you can expect from this chapter? Well, remember the hype around chapter 4? Get ready for more of that!
+
+
+
+If you can’t wait to get more hands-on with our voice assistants, join the [Voice Assistant contest](https://www.home-assistant.io/blog/2024/01/17/voice-assistant-contest/)! You can win Home Assistant Green, Home Assistant SkyConnect, and a chance to be on a livestream with us to talk about your work. Watch our [contest livestream](https://www.youtube.com/live/99lGuB4J-4o), where we explain how each component of our voice technology works and guide you through building your own voice assistant, and take a look at the [current entries](https://community.home-assistant.io/c/voice-assistant-contest/60)!
diff --git a/source/_posts/2024-02-21-voice-chapter-6.markdown b/source/_posts/2024-02-21-voice-chapter-6.markdown
new file mode 100644
index 000000000000..307bb7ad5494
--- /dev/null
+++ b/source/_posts/2024-02-21-voice-chapter-6.markdown
@@ -0,0 +1,145 @@
+---
+layout: post
+title: "On device wake word on ESP32-S3 is here - Voice: Chapter 6"
+description: "This chapter brings on-device wake word detection (microWakeWord), customization for sentence triggers, additional intents for controlling devices, and better error messages."
+date: 2024-02-21 00:00:00
+date_formatted: "February 21, 2024"
+author: Michael Hansen
+comments: true
+categories: Assist
+og_image: /images/blog/2024-02-21-voice-chapter-6/social.jpg
+---
+
+**TL;DR:** We have added on-device wake word detection (microWakeWord)! It's faster and more scalable than processing the wake word in Home Assistant. We will keep supporting wake word processing in Home Assistant. Also new is more customization for sentence triggers, additional intents for controlling more devices, and better error messages and debugging tools.
+
+
+
+Watch the full Voice chapter 6 livestream
+
+
+2023's [Year of the Voice] built a solid foundation for letting users control Home Assistant by speaking in their own language.
+
+We continue with improvements to [Assist], including:
+
+- More customization options for [sentence triggers]
+- Better error messages and [debugging tools]
+- Additional [intents] for controlling valves, vacuums, and media players
+
+Oh, and "one more thing": **on-device, open source wake word detection in ESPHome!** 🥳🥳🥳
+
+Check out this video of the new [microWakeWord] system running on an [ESP32-S3-BOX-3] alongside one doing wake word detection inside Home Assistant:
+
+
+
+On-device vs. streaming wake word
+
+
+
+
+## microWakeWord
+
+Thanks to the incredible [microWakeWord] created by [Kevin Ahrendt], ESPHome can now perform wake word detection on devices like the [ESP32-S3-BOX-3].
+You can [install it on your S3-BOX-3 today][s3-box-tutorial] to try it out.
+
+Back in [Chapter 4], we added wake word detection using [openWakeWord]. Unfortunately, openWakeWord was too large to run on low power devices like S3-BOX-3.
+So we chose to run wake word detection inside Home Assistant instead.
+
+
+
+Doing wake word detection in HA allows tiny devices like the [M5 ATOM Echo Development Kit][m5-tutorial] to simply stream audio and let all of the processing happen elsewhere. This is great, as it allows low-powered devices using a simple ESP32 chip to be transformed into a voice assistant even if they do not pack the necessary power to detect wake words.
+The downside is that adding more voice assistants requires more CPU usage in HA as well as more network traffic.
+
+Enter microWakeWord. After listening to an interview with Paulus Schoutsen (founder of Home Assistant) on the [Self Hosted](https://selfhosted.show/) podcast, Kevin Ahrendt created a model based on [Google's Inception neural network](https://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202). As an existing contributor to [ESPHome], Kevin was able to get this new model running on the ESP32-S3 chip inside the S3-BOX-3! _(It also works on the, now discontinued, S3-BOX and S3-BOX-Lite)_
+
+Kevin has trained [three models](https://github.com/esphome/micro-wake-word-models/tree/main/models) for the launch of microWakeWord:
+
+* "okay nabu"
+* "hey jarvis"
+* "alexa"
+
+You can try these out yourself now by following the [ESP32-S3-BOX tutorial][s3-box-tutorial]. Changing the default "okay nabu" wake word will require adjusting your [ESPHome configuration](https://beta.esphome.io/components/micro_wake_word.html) and recompiling the firmware, which may take a long time and requires a machine with more than 2GB of RAM.
+
+We're grateful to Kevin for developing microWakeWord, and making it a part of the open home!
+
+## Sentence trigger responses
+
+Adding custom sentences to Assist is as easy as adding a [sentence trigger][sentence triggers] to an automation. This allows you to trigger any action in Home Assistant with whatever sentences you want.
+
+Now with the new [conversation response] action in HA 2024.2, you can also customize the response spoken or printed back to you. Using [templating](/docs/automation/templating/#sentence), your response can refer to the current state of your home.
+
+
+
+You can also refer to [wildcards](/docs/automation/trigger/#sentence-wildcards) in your sentence trigger. For example, the sentence trigger:
+
+```
+play {album} by {artist}
+```
+
+could have the response:
+
+{% raw %}
+```
+Playing {{ trigger.slots.album }} by {{ trigger.slots.artist }}
+```
+{% endraw %}
+
+in addition to calling a media service.
+
+You can experiment now with sentence triggers, and custom conversation responses in our automation editor by clicking here:
+[![Open your Home Assistant instance and show your automations.](https://my.home-assistant.io/badges/automations.svg)](https://my.home-assistant.io/redirect/automations/)
+
+## Improved errors and debugging
+
+Assist users know the phrase "Sorry, I couldn't understand that" all too well. This generic error message was given for a variety of reasons, such as:
+
+* The sentence didn't match any known [intent](https://github.com/home-assistant/intents)
+* The device/area names didn't match
+* There weren't any devices of a specific type in an area (lights, windows, etc.)
+
+Starting in HA 2024.2, Assist provides different error messages for each of these cases.
+
+
+
+Now if you encounter errors, you will know where to start looking! The first thing to check is that your device is [exposed to Assist](/voice_control/voice_remote_expose_devices/). Some types of devices, such as lights, are exposed by default. Other, like locks, are not and must be manually exposed.
+
+Once your devices are exposed, make sure you've added an appropriate [alias](/voice_control/aliases) so Assist will know exactly how you'll be referring to them. Devices and areas can have multiple aliases, even in multiple languages, so everyone's preference can be accommodated.
+
+If you are still having problems, the [Assist debug tool][debugging tools] has also been improved. Using the tool, you see how Assist is interpreting a sentence, including any missing pieces.
+
+
+
+[![Open your Home Assistant instance and show your Assist developer tools.](https://my.home-assistant.io/badges/developer_assist.svg)](https://my.home-assistant.io/redirect/developer_assist/)
+
+Our community [language leaders](https://developers.home-assistant.io/docs/voice/language-leaders) are hard at work translating sentences for Assist. If you have suggestions for new sentences to be added, please create an issue on [the intents repository](https://github.com/home-assistant/intents) or drop us a line at voice@nabucasa.com
+
+
+## Thank you
+
+Thank you to the Home Assistant community for subscribing to [Home Assistant Cloud][nabucasa] to support voice and development of Home Assistant, ESPHome and other projects in general.
+
+Thanks to our language leaders for extending the sentence support to all the various languages.
+
+
+
+
+
+[Year of the Voice]: /blog/2022/12/20/year-of-voice/
+[Assist]: /voice_control/
+[exposed]: /voice_control/voice_remote_expose_devices/
+[alias]: /voice_control/aliases
+[wyoming]: https://github.com/rhasspy/wyoming
+[openWakeWord]: https://github.com/dscripka/openWakeWord
+[Piper]: https://github.com/rhasspy/piper/
+[wyoming-satellite]: https://github.com/rhasspy/wyoming-satellite
+[s3-box-tutorial]: /voice_control/s3_box_voice_assistant/
+[ESP32-S3-BOX-3]: https://www.espressif.com/en/news/ESP32-S3-BOX-3
+[ESPHome]: https://esphome.io
+[nabucasa]: https://www.nabucasa.com
+[sentence triggers]: /docs/automation/trigger/#sentence-trigger
+[conversation response]: /docs/scripts/#respond-to-a-conversation
+[microWakeWord]: https://github.com/kahrendt/microWakeWord
+[Kevin Ahrendt]: https://www.kevinahrendt.com/
+[debugging tools]: /voice_control/troubleshooting/#test-a-sentence-per-language-without-voice-without-executing-commands
+[intents]: https://developers.home-assistant.io/docs/intent_builtin
+[Chapter 4]: /blog/2023/10/12/year-of-the-voice-chapter-4-wakewords/
+[m5-tutorial]: /voice_control/thirteen-usd-voice-remote/
diff --git a/source/_posts/2024-02-22-what-about-grace-live-stream.markdown b/source/_posts/2024-02-22-what-about-grace-live-stream.markdown
new file mode 100644
index 000000000000..cf54daca215e
--- /dev/null
+++ b/source/_posts/2024-02-22-what-about-grace-live-stream.markdown
@@ -0,0 +1,19 @@
+---
+layout: post
+title: "What about Grace? Tune in to our special livestream next week!"
+description: "Why is Grace important to us? Well, we have a habit of naming our projects after influential women in tech. And we have been working on a little something special and can’t wait to show you!"
+date: 2024-02-22 00:00:01
+date_formatted: "February 22, 2024"
+author: Madelena Mak
+comments: true
+categories: Announcements
+og_image: /images/blog/2024-02-grace-chapter-1/banner.png
+---
+
+Who is Grace? Grace Hopper was a computer scientist, mathematician, and US Navy admiral who had made significant contributions to the field of computer programming and technology, from her pioneering work on and contributions to the Harvard Mark I computer, COBOL, and UNIVAC I.
+
+
+
+Why is she important to us? Well, we have a habit of naming some of our projects after influential women in tech. And we have been working on a little something nice for the past year that we can’t wait to show you!
+
+For those who are interested in making your smart home easier to control and monitor for everyone in your home, tune in next week on the leap year day, February 29, 2024, at 20:00 GMT / 21:00 CET / 3:00 PM ET / 12:00 PM PT, for a [special livestream](https://www.youtube.com/live/XyBy0ckkiDU). We will walk you through the past, present, and future of this special project.
diff --git a/source/_posts/2024-02-26-home-assistant-os-12-support-for-raspberry-pi-5.markdown b/source/_posts/2024-02-26-home-assistant-os-12-support-for-raspberry-pi-5.markdown
new file mode 100644
index 000000000000..7b3de4a419fe
--- /dev/null
+++ b/source/_posts/2024-02-26-home-assistant-os-12-support-for-raspberry-pi-5.markdown
@@ -0,0 +1,49 @@
+---
+layout: post
+title: "Raspberry Pi 5 support and more in Home Assistant OS release 12 & Supervisor update"
+description: "HAOS 12 adds support for Raspberry Pi 5 and ODROID-M1S boards, with the Linux kernel updated to 6.6. Additionally, backups have become faster, and add-ons can now signal when they should not be auto-updated."
+date: 2024-02-26 00:00:00
+date_formatted: "February 26, 2024"
+author: Stefan Agner
+comments: true
+categories: HAOS
+og_image: /images/blog/2024-02-haos12/haos12.png
+---
+
+**TL;DR:** Home Assistant OS 12 adds support for Raspberry Pi 5 and ODROID-M1S boards, with the Linux kernel updated to 6.6. Additionally, backups have become faster, and add-ons can now signal when they should not be auto-updated.
+
+
+
+## Raspberry Pi 5
+
+With the release of Home Assistant OS 12, we officially announce Raspberry Pi 5 support! Many Home Assistant OS users have extensively tested the preview releases during the last few months, and after some initial hiccups with the Raspberry Pi 5-specific update mechanism, things are stable and solid today. As a third of all Home Assistant users currently use a Raspberry Pi board as their dedicated Home Assistant system, we are sure this support will make many users very happy!
+
+Compared to other Raspberry Pi boards, HAOS does not use U-Boot as an extra bootloader. Instead, the Raspberry Pi's built-in “tryboot” functionality is used to automatically fall back to a previous release in case of an update failure. This new update mechanism integration required us to have a longer testing phase.
+
+In our testing, the higher CPU clock of the Raspberry Pi 5 (up to 2.4GHz) makes Home Assistant feel noticeably snappier compared to previous Raspberry Pi boards. Additionally, a Raspberry Pi HAT that provides NVMe SSD support allows you to extend your Raspberry Pi with fast, reliable, and cost-effective storage. We do recommend using an SD card as the boot medium and using the [data disk feature](/common-tasks/os/#using-external-data-disk) to move most of the Home Assistant installation onto the NVMe. This is easy to set up and guarantees a reliable boot.
+
+## ODROID-M1S
+
+The Raspberry Pi 5 is not the only new board that is supported with this release. We are happy to announce that the family of supported ODROID devices from the Korean manufacturer Hardkernel has become bigger thanks to a community contribution from Tim Lunn (darkxst), who implemented board support for the ODROID-M1S. The ODROID-M1S is the newest single-board computer from Hardkernel, which is similar to the already supported ODROID-M1, which was added in Home Assistant OS 10. This new board offers a slimmer form factor, 4 or 8 GB of RAM on board, and an embedded 64 GB eMMC storage. Home Assistant OS can be booted either from an SD card or the system can be flashed to the eMMC card using the procedure described in the [documentation](https://github.com/home-assistant/operating-system/blob/dev/Documentation/boards/hardkernel/odroid-m1s.md). While the board also has an NVMe slot for a solid-state drive, it is not supported as a boot device. However, just like on the Raspberry Pi 5, it can still be used as the data disk.
+
+Just like its larger brother, the ODROID-M1S is powered by a quad-core ARM Cortex-A55, but while ODROID-M1 has (very slightly) beefier Rockchip RK3568 SoC, this board sports the RK3566. Some of our more curious readers may notice this is the same processor that is found on our Home Assistant Green! While there are some similarities between those two boards, Home Assistant Green can offer you a seamless out-of-box experience, allowing you to set up your smart home in a matter of minutes. But Home Assistant is also about the freedom of choice, so if you are looking for a more DIY approach, ODROID-M1S might be the right choice for you.
+
+## Linux 6.6
+
+Home Assistant OS 12 now comes with Linux kernel 6.6! This is good news for those who want to run their Home Assistant on newer hardware that lacked support in the previous 6.1 kernel. This version update also allows us to extend the list of supported Wi-Fi and Bluetooth cards, including ones you may find in new mini-PCs, a popular platform for Home Assistant OS. Those who run their installations on a Raspberry Pi (including the CM4 in Home Assistant Yellow) may notice their kernel version still starts with 6.1. This is because we are not using the upstream kernel but the downstream one maintained by the Raspberry Pi developers. But this kernel was also updated to the latest stable version, which we hope will resolve some sporadic bugs.
+
+Home Assistant OS sticks to the LTS (long-term support) kernels, which are usually released once per year - just like Buildroot, the base system we use for Home Assistant OS. This time, we are slightly ahead of schedule, because usually the kernel update is done alongside the bump of the Buildroot version. But don't worry, the Buildroot update is coming soon as well, and we expect to include its update in one of the next minor Home Assistant OS releases coming in the following weeks. This will conclude this year's spring cleaning of Home Assistant OS, and we will be ready to focus on new features and improvements again!
+
+## Faster Backups
+
+Home Assistant Supervisor and Core’s built-in backup functionality has become much faster. Thanks to contributions from bdraco, the backup feature gained faster compression speeds due to a library named isal, which provides optimized low-level functions for compression and decompression. More importantly, the backup feature now avoids intermediate copies, making it faster on slower storage media especially. If you used uncompressed backups before because the backup used to be too slow for you, now is the time to give compressed backups a try again! 😀
+
+
+
+Home Assistant OS users’ backup functionality is part of Supervisor. You’ll have received the improvements incrementally over the releases of the past few weeks. At the time of writing, your installation should run on Home Assistant Supervisor 2024.02.0 with all these improvements built in.
+
+## Safer add-on auto-updates
+
+Last, but not least, the Supervisor features an auto-update flag for add-ons. However, depending on the nature of an update to the add-on, the new version might need user intervention or have breaking changes. Add-on developers now have the option to prevent auto-updates to such versions. Users of the auto-update feature might see an update notification despite auto-updates being enabled. This means that the author of the add-on decided that this particular update should not be auto-updated and instead be manually approved by the user.
+
+Note: We generally don’t recommend auto-updates for add-ons, as even safe updates might interfere with regular operation. For example, during the automatic update of an add-on like Z-Wave JS, your Z-Wave devices would unexpectedly become unavailable for a short time. The better approach for such add-ons is to plan some time to maintain your Home Assistant system every once in a while and update your add-ons in a batch.
diff --git a/source/_posts/2024-03-04-dashboard-chapter-1.markdown b/source/_posts/2024-03-04-dashboard-chapter-1.markdown
new file mode 100644
index 000000000000..054af96181fb
--- /dev/null
+++ b/source/_posts/2024-03-04-dashboard-chapter-1.markdown
@@ -0,0 +1,266 @@
+---
+layout: post
+title: "A Home-Approved Dashboard chapter 1: Drag-and-drop, Sections view, and a new grid system design!"
+description: "Wow! At long last!! The stars have aligned, and our experimental drag-and-drop feature for dashboards is finally here!"
+date: 2024-03-04 00:00:01
+date_formatted: "March 4, 2024"
+author: Madelena Mak
+comments: true
+categories: Dashboard
+og_image: /images/blog/2024-03-dashboard-chapter-1/banner.png
+---
+
+Wow! At long last!! The stars have aligned, and our experimental drag-and-drop feature for dashboards is finally here! 🥲
+
+Home Assistant strives to be the best smart home platform, and a smart home allows its residents to automate, control, observe, and anticipate the comfort, security, and various conveniences of their home. Besides voice assistants, dashboards are also a great way to help users do just that!
+
+Therefore, we have been working hard to make customization and organization of dashboards as easy and intuitive as possible, and to create a default dashboard that will be more useful, user-friendly, and relevant right out of the box. [Matthias](https://github.com/matthiasdebaat) and [I](https://github.com/madelena) teamed up in April last year to tackle this problem together, and we called this series of improvements over our current dashboard “Project Grace”, named after the influential and brilliant late [Admiral Grace Hopper](https://www.nationalww2museum.org/war/articles/grace-hopper-woman-computer).
+
+After months of user research and ideation to ensure that our design is [“home-approved”](https://building.open-home.io/open-home-approval-factor/#home-approval-factor) - to be easy and intuitive to use for you, your family, your guests, your roommates, and more - we are happy to share the first fruit of our success in the upcoming release 2024.3, with the help of [Paul](https://github.com/piitaya) and of course the wonderful frontend team. We hope that these features will help you take the dream dashboard for you and your home from idea to reality much faster and much more easily.
+
+For those of you who are curious about the features and the design thinking behind them, read on and check out our [special livestream](https://www.youtube.com/watch?v=XyBy0ckkiDU) last week. You can also try out our updated [demo](https://demo.home-assistant.io/#/lovelace/home) and get involved by [joining the Home Assistant User Testing Group](http://home-assistant.io/join-research)! And last of all, thank you for supporting our efforts by [subscribing to Home Assistant Cloud](https://www.nabucasa.com)!
+
+
+
+
+
+Enjoy!
+
+~ Madelena 🥳
+
+
+
+## What is Project Grace?
+
+Grace was the codename we used for the series of improvements to be built on top of [Lovelace], the framework for our dashboards. We aim to preserve the strengths of Lovelace, such as its flexibility and extensibility, and to mitigate its weaknesses, such as its steep learning curve, its lack of scalability, as well as the poor responsiveness of its layouts.
+
+## The three-layout problem
+
+
+
+ The three basic view layouts: Panel, Sidebar, and Masonry
+
+
+Our dashboard came with 3 default [view layout types](https://www.home-assistant.io/dashboards/views/#type) by default: Panel, which is simply one card covering the entire view; Sidebar, which is a two-column layout for cards; and [Masonry], which is the most robust of them all.
+
+While it is excellent at creating a tightly-packed screen space-saving dashboard, Masonry lays out cards in a logic that may not be immediately clear and predictable to many users, which leads to a frustrating user experience to create and customize the layout of the cards. And as the layout logic depends on the height of each card, the varying heights of the cards available for our dashboards become a blessing and a curse: Even a difference in height of 1 pixel would mean a card one would guess to be displayed on the leftmost column getting shifted all the way to the right.
+
+
+
+ Masonry arranges cards based on size.
+
+
+What’s more, unlike most other smart home apps, Home Assistant prides itself on Choice. In terms of dashboard view layouts, Choice means that dashboards should be able to be displayed on any screens that are the most convenient to our users - whether it’s a phone, a tablet, a large monitor, or other display devices. While the Masonry layout is great at making neat walls of cards, as its name also implies, it is a wall of cards which does not care whether the bricks are laid, thus the muscle memory of where users remember the cards will be lost every time the dashboard is displayed on another screen.
+
+
+
+ Masonry does not care about where exactly cards are placed when the screen size changes.
+
+
+For the past few years, we tried to create a more intuitive solution to rearrange the cards laid out by Masonry but ultimately the solutions did not work well for multiple screen sizes. Meanwhile, our users come up with solutions of their own, with many avoiding our default view layouts so that they can create a more predictable and memorable dashboard. As it turns out, “drag and drop” is not just an engineering problem; it is also a design problem.
+
+To solve these problems with our layout, we realized that the Masonry layout, compatibility with multiple screen sizes, and easy “drag and drop” rearrangement of cards cannot co-exist. Over the past year, we ideated and identified a few solutions, namely:
+
+1. [a new Sections view layout](#the-new-sections-view)
+2. [a design grid system](#the-grid-system), and
+3. [a “Z-Grid” auto-rearranging pattern](#drag-and-drop-rearrangement-of-cards-and-sections).
+
+Let's dive in each solution and learn how they work together to make your dashboards easier to customize and use!
+
+## The new Sections view
+
+
+
+
+ Case studies of our users' dashboards
+
+
+Throughout this project, we have looked at dozens of different dashboards created by you and posted on our discussion boards. One thing we notice is that our more advanced users are all naturally drawn to creating “sections”, groups of different cards delineated by a group title, manually with [grids](https://www.home-assistant.io/dashboards/grid/) and [markdown](https://www.home-assistant.io/dashboards/markdown/) cards.
+
+Home Assistant dashboards are robust and packed with information, and our users often place dozens of cards for all sorts of buttons, switches, graphs, indicators, and more. By grouping cards into “sections”, our users can reduce the number of items they need to scan through when they are looking for a certain card, as they will be able to look for the relevant group title first and then reduce the scope to scan that particular group for the information. And by packing cards in a section into a grid card, the relative positions of the cards within a section are not affected by changes in screen sizes, and so the spatial memory of the cards are retained, leading to a faster and less cumbersome experience.
+
+
+
+ Example of a dashboard section
+
+
+For our new Sections view, we are making these sections as the base unit of the view and we are streamlining its creation and editing procedures. Users will not need to fiddle around with grid cards and markdown cards to assemble a section manually, and instead a section now comes with all those amenities and much more.
+
+### Getting started with Sections
+
+
+ The new Sections view is experimental! Please do not build your daily dashboard on top of it yet!
+
+
+
+
+ The Create New View configuration screen
+
+
+To get started with the new Sections view, create a new view on your dashboard and choose **Sections (experimental)** as the view type. We currently do not have the option to migrate your current dashboard over yet.
+
+
+ If you are using the default dashboard, please read about how to create a new dashboard.
+
+
+
+
+ A new dashboard view laid out in Sections
+
+
+You will be greeted by a clean new dashboard view, with one section already created for you.
+
+* To add a new section, select the **Create Section** button.
+
+
+* To edit the name of a section, select the **Edit** button on the top right of the section. (Tip: You can add any descriptive text for your section, including emojis!) When the section does not have a name, the section header will be hidden.
+
+* To delete a section, select the **Delete** button on the top right of the section. You will be asked to confirm the deletion.
+
+### Filling it up
+
+
+
+ A fully populated dashboard in Sections view layout
+
+
+There are multiple ways to add cards into a section and populate your dashboard:
+
+{% details "Using the Add Card button" %}
+
+1. The easiest way to add cards is to select **Add Card** [Button icon] button inside the section.
+
+2. The Add Card dialog will appear, and there are two options:
+
+ * **By Card**
+
+ Add Card by Card type dialog
+
+
+ If you have a good idea of what card you want to use for an entity, browse the list of available cards on this screen. For the Sections view, we recommend the Tile card, which is now pinned to the top in a Suggested Cards section.
+
+ * **By Entity**
+
+ Add Card by Entity dialog
+
+
+ If you want to add a bunch of entities in one go, select one or multiple entities on this list.
+
+
+ Card suggestions
+
+ Home Assistant will show a preview of the cards to be added, which will be displayed in Tile cards as the default of the Sections view. Tap the “Add to Dashboard” button to complete the process.
+
+{% enddetails %}
+
+{% details "Using the Add to Dashboard button on device pages" %}
+
+
+ Add to Dashboard feature on the device page
+
+
+Another handy method for adding a bunch of sensors or controls belonging to the same device is to add them from the device’s page.
+
+1. Navigate to the page of the device through Settings.
+
+2. Tap the **Add to Dashboard** button on the screen.
+
+3. You will be prompted to choose which dashboard view you want to add them to. If you choose a view using the Sections view layout, the sensors or controls will be added as tile cards placed inside a new section.
+
+{% enddetails %}
+
+### Responsive design
+
+One major benefit of the new Sections view is that it is now much easier to build dashboards that work with multiple screen sizes.
+
+
+
+ Sections view adapt nicely to different screen sizes.
+
+
+The view will rearrange the sections according to the amount of space available horizontally, while the number of columns of cards within each section stays the same, thus preserving your muscle memory of where the cards are located.
+
+## The grid system
+
+Our current dashboard views are organized in columns with cards of varying heights, and with masonry layout by default. As cards can vary in height in small amounts, it becomes hard to predict where cards will "land" when one moves a card to another column, or when screen size changes and moves all the cards, such as when viewing a dashboard on tablet vs on mobile. This creates friction in the customization experience of the dashboards.
+
+Enter the grid system, a bastion of graphic design principles.
+
+
+
+ Examples of grid systems in use
+
+
+Typographic grid systems have a long history in modern graphic design and print publishing, starting from its rise in the early 20th Century during the Constructivist and Geometrical art movements in Europe, which concerns the hidden rhythm behind a visual image. They are easily repeatable and, therefore, practical for generating an infinite amount of pages, yet also ensure aesthetic proportions and consistency for printable matter. They also bring order to a page. It helps users understand the relationship between each element on the page and whether one element belongs to another.
+
+
+
+ The Home Assistant dashboard grid system
+
+
+When a UI is designed with a structured layout, that feeling of structure and organization comes through to the user in their first impression.
+
+By introducing a grid system with cards of regular row height and column width multiples, we can help users rearrange cards more easily in a predictable manner, make Home Assistant adapt the dashboards to different screen sizes more easily, and, of course, make dashboards look tidier and more aesthetically pleasing.
+
+
+
+ Cards currently optimized for the grid system: Sensor card, Tile card, and Button card
+
+
+To implement the grid system, we are now in the process of standardizing the widths and heights of our cards, starting with the Tile card, Button card, and Sensor card. These cards will occupy the right amount of space in the grid, while other cards will occupy the full width of a section by default at the moment.
+
+For card developers, we will have more information on how to adapt your custom cards to the grid system soon.
+
+## Drag-and-drop rearrangement of cards and sections
+
+With sections and a grid system in place, we can finally implement a way to arrange cards and sections that is intuitive with drag-and-drop, predictable with how the cards will rearrange, while creating a dashboard that is easy to navigate and remember by visualizing the information hierarchy and not disturbing the spatial relationship between cards. Users will not need to pray and guess where the cards will land when they change their orders anymore!
+
+
+
+ Comparison of four card arrangement methods
+
+
+Throughout the design process, we looked at a few different ways of how cards should be arranged. Ultimately, we chose the “Z-Grid” due to its simplicity, predictability, and memorability as the default, despite it may take up more space than other solutions. The Z-Grid works simply by laying out sections from left to right, and starting a new row when the row is full. The heights of the rows are determined by the tallest section on the row, while the width of the columns remain constant for responsive design.
+
+### How to drag and drop
+
+While your dashboard is in Edit Mode:
+
+
+
+ Rearranging sections with drag-and-drop
+
+
+* To rearrange sections, simply tap and hold the **Move** handle and then move your cursor or finger towards your desired location. Other sections will move out of the way for where the selected section will drop.
+
+
+
+ Rearranging sections with drag-and-drop
+
+
+* To rearrange cards, tap and hold anywhere on the card and then move your cursor or finger towards your desired location.
+
+(Don’t you love when instructions are so short? Yay to simplicity! 🦄)
+
+## What’s next? Get involved!
+
+The new Sections view with drag-and-drop is just the first step of Project Grace, a Home-Approved Dashboard. We have a good idea of where we want to head next in our design and development process, but we want to hear from you first before we proceed so that we can prioritize and build a product that will help you the most.
+
+To get feedback from all of you and your household members, we decided to release this early in its incomplete form as an *experiment* for you to try out the new Sections view. For those who are curious, feel free to check out [our updated demo](https://demo.home-assistant.io/#/lovelace/home) to play around and have fun!
+
+We want to make sure that the new default dashboard will not only work for you, but also everyone who lives in your home. We would love to hear what they think as well. Please do not hesitate to leave your comments below!
+
+### Join the Home Assistant User Testing Group!
+
+From time to time, we will send out user tests to help us make the harder product and design decisions we identify. By joining our user testing group, you will help steer the direction of our product and will also get a sneak peak of potential designs that are work in progress.
+
+Please [fill out this form](http://home-assistant.io/join-research) to join the Home Assistant User Testing Group!
+
+Big thanks to all the folks who joined us for user interviews, [Lewis from Everything Smart Home](https://www.youtube.com/c/EverythingSmartHome) for sharing his treasure trove of dashboards for our case studies, and of course, the fabulous [Nabu Casa](https://nabucasa.com) team. 💖
+
+That’s all for now! Thank you for reading. Can’t wait to show you what’s next!
+
+~ Madelena
+
+[Lovelace]: https://www.home-assistant.io/blog/2019/01/23/lovelace-released/
+[Masonry]: https://www.home-assistant.io/dashboards/masonry/
diff --git a/source/_posts/2024-03-06-release-20243.markdown b/source/_posts/2024-03-06-release-20243.markdown
new file mode 100644
index 000000000000..cfb97237b577
--- /dev/null
+++ b/source/_posts/2024-03-06-release-20243.markdown
@@ -0,0 +1,833 @@
+---
+layout: post
+title: "2024.3: Drag 'n Drop it like it's hot! 🎉"
+description: "Drag 'n drop in your dashboards using a brand-new sections view and start up twice as fast! Run scripts with user input from your dashboards, a new energy graph for individual devices, new sentences for Assist, translate states in your templates, and more!"
+date: 2024-03-06 00:00:00
+date_formatted: "March 6, 2024"
+author: Franck Nijhof
+author_twitter: frenck
+comments: true
+categories:
+ - Release-Notes
+ - Core
+og_image: /images/blog/2024-03/social.png
+---
+
+
+
+Home Assistant Core 2024.3! 🎉
+
+Yes, you read the title right! I'm super stoked about this one. It has been
+talked about for ages... I promise it is real:
+
+**Drag 'n drop for dashboards is finally here! 🎉**
+
+A first experimental version of the section dashboard that supports drag 'n drop.
+A tremendous step forward and an even bigger milestone for Home Assistant!
+
+But don't be blinded by these Dungeons 'n Dragons; there is a lot more!
+
+New intents for Assist (I can finally tell my vacuum to start cleaning!), using
+script inputs/fields from the dashboard, and a new energy graph for individual
+devices. And that is just the tip of the iceberg!
+
+Enjoy the release!
+
+../Frenck
+
+PS: A big thanks and shoutout to [@bramkragten] & [@balloob] for organizing
+and running the beta and everyone who helped out making these release notes
+happen during my absence this beta. 🥰
+
+[@bramkragten]: https://github.com/bramkragten
+[@balloob]: https://github.com/balloob
+
+
+
+- [A new experimental sections view](#a-new-experimental-sections-view)
+- [Drag-and-drop rearrangement of cards and sections!](#drag-and-drop-rearrangement-of-cards-and-sections)
+- [Running script from your dashboard with user input](#running-script-from-your-dashboard-with-user-input)
+- [New energy graph for individual devices](#new-energy-graph-for-individual-devices)
+- [New sentences for Assist](#new-sentences-for-assist)
+- [Disabling the remote activation of the Home Assistant Remote UI](#disabling-the-remote-activation-of-the-home-assistant-remote-ui)
+- [Translating states in your templates](#translating-states-in-your-templates)
+- [Home Assistant boots twice as fast](#home-assistant-boots-twice-as-fast)
+- [Other noteworthy changes](#other-noteworthy-changes)
+- [New integrations](#new-integrations)
+- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui)
+- [Release 2024.3.1 - March 14](#release-202431---march-14)
+- [Release 2024.3.2 - March 22](#release-202432---march-22)
+- [Release 2024.3.3 - March 22](#release-202433---march-22)
+- [Need help? Join the community!](#need-help-join-the-community)
+- [Backward-incompatible changes](#backward-incompatible-changes)
+- [All changes](#all-changes)
+
+Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=Jxup-fKFpfs)
+6 March 2024, at 20:00 GMT / 12:00 PST / 21:00 CET!
+
+
+
+## A new experimental sections view
+
+Our dashboard currently comes with three view layout types:
+[Panel](/dashboards/panel/), [Sidebar](/dashboards/sidebar/),
+and [Masonry](/dashboards/masonry/). Since the past year, we have been working
+hard to research and ideate on how to make dashboards easier to customize
+and use, and we learned that our current layouts are not the best for such
+purposes. Drag-and-drop rearrangement of cards cannot work well with the
+Masonry layout.
+
+We came up with a few solutions, and the first thing we would like to share
+with you is a new view layout type called "Sections".
+
+Home Assistant dashboards are robust and packed with information. Users will
+often place dozens of cards for all sorts of buttons, switches, graphs,
+indicators, and more.
+
+
+
+ Example of a dashboard section
+
+
+By grouping cards into “sections”, you can reduce the number of items you
+need to scan through when you are looking for a certain card, as you'll be
+able to look for the relevant group title first and then reduce the scope to
+scan that particular group for the information.
+
+By packing cards in a section into a grid with a fixed number of columns,
+the relative positions of the cards within a section are not affected by
+changes in screen sizes, and so the spatial memory of the cards is retained,
+leading to a faster and less cumbersome experience.
+
+
+
+ A fully populated dashboard in the Sections view layout
+
+
+Cards in the new sections view type are all aligned in a tidy grid to ensure
+consistency and predictability of their positions when the screen size changes.
+We currently have three cards reworked to fit the grid:
+[Tile](/dashboards/tile/), [Sensor](/dashboards/sensor/),
+and [Button](/dashboards/button/) cards. These cards will occupy the right
+amount of space in the grid, while other cards will occupy the full width
+of a section by default at the moment. Moreover, we have tweaked our
+"Add Cards" dialogs to recommend Tile cards by default when the sections
+view type is in use.
+
+
+ The new Sections view is experimental! Please do not build your daily dashboard on top of it yet! We are releasing this early so that we can collect your feedback.
+
+
+To get started with the new Sections view type, create a new view on your
+dashboard and select **Sections (experimental)** as the view type.
+We currently do not have the option to migrate your current dashboard over yet.
+
+For more information, check out our blog post about our new
+series [A Home-Approved Dashboard: Chapter 1](/blog/2024/03/04/dashboard-chapter-1/).
+
+Amazing work! Thanks [Paul](https://github.com/piitaya),
+[Matthias](https://github.com/matthiasdebaat),
+and [Madelena](https://github.com/madelena)!
+
+## Drag-and-drop rearrangement of cards and sections!
+
+Wow! At long last!! The stars have aligned, and our experimental drag-and-drop
+feature for dashboards is finally here! 🥲
+
+With the new sections view type, we can finally implement a way to arrange
+cards and sections that is intuitive with drag-and-drop gestures and predictable
+with how the cards will rearrange while creating a dashboard that is easy to
+navigate and remember. You will no longer need to pray and guess where the cards
+will land when they change their order!
+
+### How to drag and drop
+
+While your dashboard is in edit mode:
+
+
+
+ Rearranging sections with drag-and-drop
+
+
+- To rearrange sections, tap and hold the
+
+ **Move** handle and then move your cursor or finger towards your desired
+ location. Other sections will move out of the way for where the selected
+ section will drop.
+
+
+
+ Rearranging sections with drag-and-drop
+
+
+- To rearrange cards, tap and hold anywhere on the card and then move your
+ cursor or finger towards your desired location.
+
+Don’t you love it when instructions are so short? Simplicity FTW! 🦄
+
+Thanks again [Paul](https://github.com/piitaya),
+[Matthias](https://github.com/matthiasdebaat),
+and [Madelena](https://github.com/madelena)!
+
+## Running script from your dashboard with user input
+
+{% term Scripts %} in Home Assistant allow you to capture a sequence of actions
+and choices in a reusable way. Scripts are extra powerful because they can
+have input fields, allowing you to send in data for when the script runs.
+
+Script fields can be defined in the script editor and show up when you call the
+script in your automation. In this release, script fields will be available
+in the more info dialog when tapping a script on a dashboard.
+
+This allows you to provide the input fields and run the script, unlocking a
+whole new dimension of possibilities.
+
+
+
+To accompany this new functionality, we’ve created two blueprints to help you
+get started with using scripts on your dashboard:
+
+**Announce message**: This blueprint allows you to create an announce script for
+your dashboard pre-configured to a specific media player and text-to-speech
+engine. When activated, it will ask the user for the message to play.
+
+{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/announce-text-to-speech-on-media-player/699186" %}
+
+**Add to to-do list**: This blueprint allows you to create a script to add an
+item to a to-do list pre-configured to a specific to-do list. When activated,
+it will ask the user for the item to add.
+
+{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/add-to-do-item/699193" %}
+
+## New energy graph for individual devices
+
+Digging into your energy data is a very interesting way to find ways to reduce
+your household's energy usage and environmental footprint. 🌱
+
+One of the missing bricks was the ability to see the energy consumption
+of individual devices over time. Thanks to [@karwosts], we have a
+brand new graph on the energy dashboard that provides this insight!
+
+Using this new graph, you can now easily spot which devices are responsible
+for which part of your energy usage over time.
+
+
+
+For example, in the above picture, it is very easy to see that the dishwasher
+was responsible for the morning spike and the oven for the spike in the evening.
+
+[@karwosts]: https://github.com/karwosts
+
+## New sentences for Assist
+
+[Assist](/voice_control/), our private voice assistant, learned a few tricks this month.
+
+Support for valves has been added. You can now ask Assist to adjust the position
+of a valve, or just open or close a valve completely.
+
+Also, cover support has been extended to support the control of the position of
+your devices. Currently, most languages only support a single use-case as a
+starting point. Setting the position of a single device by targeting its
+name:
+
+> Set the curtain position to 80%
+
+We are working on extending the use-case coverage to set the position
+of multiple devices or complete areas, similar to what is possible with
+the open and close sentences.
+
+
+
+The next new trick could be considered a bug fix: Until today it was not
+possible to start or stop a vacuum cleaner by voice; Now it can! Assist knows
+how to start a vacuum and return it to its base. Here are some example
+sentences, in case you have a vacuum cleaner named Dusty:
+
+> Start Dusty
+
+> Return Dusty to base
+
+The biggest set of changes is for media players. Assist can now pause playback,
+resume playback, skip to the next media, and set the volume of media players!
+
+Be aware that currently, these sentences are limited to targeting a single
+device by its name, for example:
+
+> Skip to the next song on the TV
+
+We are actively working on extending the logic of these new intents to allow
+you to target areas and only affect the desired media player(s).
+
+## Disabling the remote activation of the Home Assistant Remote UI
+
+If you are using [Home Assistant Cloud](https://nabucasa.com), you can access
+your Home Assistant instance remotely using the Remote UI feature.
+
+Suppose this feature is, for some reason, disabled, and you are currently not
+at home. In that case, you can enable the Remote UI feature remotely by
+logging into your [Nabu Casa account](https://account.nabucasa.com/) and
+request your Home Assistant instance to turn it on.
+
+Feedback from the community has shown that this feature is not always desired,
+and this release adds a new option to disable the remote activation of the
+Remote UI feature. Once disabled, the Remote UI feature can only be enabled
+locally from your Home Assistant instance.
+
+
+
+## Translating states in your templates
+
+Are you using {% term templates %} to send notifications in automations? If so,
+[@PiotrMachowski] might just have added something new you need!
+
+A new template method, `state_translated`, to translate entity states directly
+from your templates! Consider this template example:
+
+{% raw %}
+```yaml
+# Untranslated
+{{ states("binary_sensor.movement_backyard") }} # Shows: on
+{{ states("sun.sun") }} # Shows: below_horizon
+```
+{% endraw %}
+
+The above example shows the raw state of two entities. However, with the
+new `state_translated` method, you can get the state in a human-readable form:
+
+{% raw %}
+```yaml
+# Translated
+{{ state_translated("binary_sensor.movement_backyard") }} # Shows: Detected
+{{ state_translated("sun.sun") }} # Shows: Below horizon
+```
+{% endraw %}
+
+Even better, it uses the default language of your Home Assistant instance. So,
+if you use Home Assistant in a different language, the translated state will
+be in that language.
+
+[@PiotrMachowski]: https://github.com/PiotrMachowski
+
+## Home Assistant boots twice as fast
+
+In case you didn't know, every release [@bdraco] improves the performance
+on some aspect of Home Assistant. He has been on it for a long time and keeps
+pushing to improve it.
+
+As a matter of fact, it has become so regular that we don't always highlight
+his enormous efforts toward this goal in our release notes. _Sorry! 🙏_
+
+However, in this release, his efforts are so noticeable that we wanted to
+call it out: **Home Assistant now boots on average twice as fast!** 🚀
+
+That is a huge improvement [@bdraco]!! Thank you for your continuous work on
+making Home Assistant faster and faster! ❤️
+
+[@bdraco]: https://github.com/bdraco
+
+## Other noteworthy changes
+
+There are many more improvements in this release; here are some of the other
+noteworthy changes this release:
+
+- The [climate entity] now has a toggle service (`climate.toggle`).
+ Thanks [@arturpragacz]!
+- [Matter] lights now support transitions, nice! Thanks, [@marcelveldt]!
+- We heard you like downloading CSVs! So, we added the ability to download
+ the energy dashboard data to a CSV file now as well! Thanks [@karwosts]!
+- After feedback and reports on the automatic Zigbee device firmware updates
+ introduced in a previous release, this release brings a stricter and
+ more robust update system to [ZHA]. Thanks [@dmulcahey] & [@puddly]!
+- The [Tessie] integration now provides charging and range sensors.
+ Thanks [@Bre77]!
+- [myUplink] devices can now be updated directly from Home Assistant.
+ Awesome [@astrandb]!
+- [DuneHD] media players now support browsing media files and playing them.
+ Thanks [@iliessens]!
+- The [Bring!] now brings in a new "recently" list. Nice [@miaucl]!
+- [@lellky] added setpoints as number entities for fans to the
+ [Flexit Nordic (BACnet)] integration, thanks!
+- The dialog to adjust long-term statistics now has automated outlier detection!
+ That is a very smart and helpful addition. Thanks [@karwosts]!
+
+[@arturpragacz]: https://github.com/arturpragacz
+[@astrandb]: https://github.com/astrandb
+[@Bre77]: https://github.com/Bre77
+[@dmulcahey]: https://github.com/dmulcahey
+[@iliessens]: https://github.com/iliessens
+[@karwosts]: https://github.com/karwosts
+[@lellky]: https://github.com/lellky
+[@marcelveldt]: https://github.com/marcelveldt
+[@miaucl]: https://github.com/miaucl
+[@puddly]: https:///github.com/puddly
+[Bring!]: /integrations/bring
+[climate entity]: /integrations/climate
+[DuneHD]: /integrations/dunehd
+[Flexit Nordic (BACnet)]: /integrations/flexit_bacnet
+[Matter]: /integrations/matter
+[myUplink]: /integrations/myuplink
+[Tessie]: /integrations/tessie
+[ZHA]: /integrations/zha
+
+## New integrations
+
+We welcome the following new integrations in this release:
+
+- **[Aprilaire]**, added by [@chamberlain2007]
+ Monitor and control your Aprilaire thermostats.
+- **[Husqvarna Automower]**, added by [@Thomas55555]
+ The Husqvarna Automower integration allows you to integrate and control
+ your lawn mower straight from Home Assistant.
+- **[microBees]**, added by [@marcolettieri]
+ Control your microBees devices, such as plugs and wall switches.
+- **[WeatherFlow Cloud]**, added by [@jeeftor]
+ The WeatherFlow Cloud is an alternative to the existing [local WeatherFlow]
+ integration and pulls in data from your Tempest Weather Station.
+- **[Webmin]**, added by [@autinerd]
+ Monitor the CPU and memory usage of your Webmin-managed server.
+
+[@autinerd]: https://github.com/autinerd
+[@chamberlain2007]: https://github.com/chamberlain2007
+[@jeeftor]: https://github.com/jeeftor
+[@marcolettieri]: https://github.com/marcolettieri
+[@Thomas55555]: https://github.com/Thomas55555
+[Aprilaire]: /integrations/aprilaire
+[Husqvarna Automower]: /integrations/husqvarna_automower
+[local WeatherFlow]: /integrations/weatherflow
+[microBees]: /integrations/microbees
+[WeatherFlow Cloud]: /integrations/weatherflow_cloud
+[Webmin]: /integrations/webmin
+
+This release also has new virtual integrations. Virtual integrations are stubs
+that are handled by other (existing) integrations to help with findability.
+The following virtual integrations have been added:
+
+- **[Acomax]**, provided by [Motionblinds]
+- **[Duquesne Light]**, provided by [Opower]
+- **[Krispol]**, provided by [Motionblinds]
+- **[Madeco]**, provided by [Motionblinds]
+- **[SamSam]**, provided by [EnergyZero]
+- **[ZonderGas]**, provided by [EnergyZero]
+
+[Acomax]: /integrations/acomax
+[Duquesne Light]: /integrations/duquesne_light
+[EnergyZero]: /integrations/energyzero
+[Krispol]: /integrations/krispol
+[Madeco]: /integrations/madeco
+[Motionblinds]: /integrations/motion_blinds
+[Opower]: /integrations/opower
+[SamSam]: /integrations/samsam
+[ZonderGas]: /integrations/zondergas
+
+## Integrations now available to set up from the UI
+
+The following integration us now available via the Home Assistant UI:
+
+- **[Velux]**, done by [@DeerMaximum]
+
+[@DeerMaximum]: https://github.com/DeerMaximum
+[Velux]: /integrations/velux
+
+## Release 2024.3.1 - March 14
+
+- Fix optional Jellyfin RunTimeTicks ([@j-stienstra] - [#108254])
+- Add auto fan mode icon ([@mattmccormack] - [#110185])
+- Ignore AussieBroadband services that don't support usage information ([@FieldofClay] - [#110253])
+- Use friendly name for camera media source ([@OnFreund] - [#110882])
+- Improve discovering upnp/igd device by always using the SSDP-discovery for the Unique Device Name ([@StevenLooman] - [#111487])
+- Update the numato-gpio dependency of the numato integration to v0.12.0 ([@clssn] - [#112272])
+- Disable updating ZHA coordinator path from discovery info ([@puddly] - [#112415])
+- Bump intents to 2024.3.6 ([@synesthesiam] - [#112515])
+- Weatherflow_cloud backing lib bump ([@jeeftor] - [#112262])
+- Bump weatherflow4py to 0.1.14 ([@jeeftor] - [#112554])
+- Restore the juicenet integration ([@emontnemery] - [#112578])
+- Fix incorrect filtering of unsupported locales in bring-api ([@tr4nt0r] - [#112589])
+- Include pytedee_async logger in tedee integration ([@zweckj] - [#112590])
+- Issue warning modbus configuration when modbus configuration is empty ([@janiversen] - [#112618])
+- modbus scan_interval: 0 is correct configuration ([@janiversen] - [#112619])
+- Update frontend to 20240307.0 ([@bramkragten] - [#112620])
+- Make hass-nabucasa a core requirement ([@emontnemery] - [#112623])
+- Bump aioautomower to 2024.3.0 ([@Thomas55555] - [#112627])
+- Bump pymodbus to v3.6.5 ([@janiversen] - [#112629])
+- Bump axis to v52 ([@Kane610] - [#112632])
+- Update Loqed helper for more logging ([@mikewoudenberg] - [#112646])
+- Bump weatherflow4py to 0.1.17 ([@jeeftor] - [#112661])
+- Bump `aionotion` to 2024.03.0 ([@bachya] - [#112675])
+- Make sure Notion saves new refresh token upon startup ([@bachya] - [#112676])
+- Fix tado climate service ([@alinbalutoiu] - [#112686])
+- Downgrade `pysnmp-lextudio` to version `5.0.34` ([@bieniu] - [#112696])
+- Allow duplicate names in different modbus entities ([@janiversen] - [#112701])
+- Guard against db corruption when renaming entities ([@bdraco] - [#112718])
+- Fix local calendar handling of empty recurrence ids ([@allenporter] - [#112745])
+- Bump pyenphase to 1.19.2 ([@catsmanac] - [#112747])
+- Bump bthome-ble to 3.7.0 ([@thecode] - [#112783])
+- Upgrade `pysnmp-lextudio` to version `6.0.9` ([@lextm] - [#112795])
+- Bump openwrt-luci-rpc version to 1.1.17 ([@mrchi] - [#112796])
+- Fix google_asssistant sensor state reporting ([@jbouwh] - [#112838])
+- Fix MJPEG fallback when still image URL is missing with basic auth ([@bdraco] - [#112861])
+- Bump boschshcpy to 0.2.82 ([@FlyingFeng2021] - [#112890])
+- Add missing translation placeholder in Hydrawise ([@dknowles2] - [#113007])
+- Bump bthome-ble to 3.8.0 ([@Ernst79] - [#113008])
+- Bump axis to v53 ([@Kane610] - [#113019])
+- Fix availability for GIOS index sensors ([@bieniu] - [#113021])
+- Bump ical to 7.0.1 and always use home assistant timezone for local todo dtstart ([@allenporter] - [#113034])
+- Fix some handle leaks in rainforest_raven ([@cottsay] - [#113035])
+- Fix hvac_mode for viessmann devices with heatingCooling mode ([@folke] - [#113054])
+- components/gardena_bluetooth: Improve avaliability reliability ([@alistair23] - [#113056])
+- Fix for controlling Hue switch entities ([@marcelveldt] - [#113064])
+- Bump rova to 0.4.1 ([@LukasdeBoer] - [#113066])
+- Fix colormode attribute on grouped Hue light ([@marcelveldt] - [#113071])
+- Bump axis to v54 ([@Kane610] - [#113091])
+- Bump aiodhcpwatcher to 0.8.1 ([@bdraco] - [#113096])
+- bump pytedee_async to 0.2.16 ([@zweckj] - [#113135])
+- Add message from Bad Request errors to HassioAPIError ([@agners] - [#113144])
+- Bump intents to 2023.3.12 ([@synesthesiam] - [#113160])
+- Bump airthings_ble to 0.7.1 ([@LaStrada] - [#113172])
+- Bump rokuecp to 0.19.2 ([@ctalkington] - [#113198])
+- Bump `brother` library to version `4.0.2` ([@bieniu] - [#113235])
+- Hotfix import error in ZHA for 2024.3.1 patch release ([@frenck] - [#113250])
+- Fix Twitch auth token refresh ([@jonnybergdahl] - [#112833])
+- Fix failing google diagnostics test ([@bdraco] - [#113095])
+- Add diagnostics for IPP ([@ctalkington] - [#113205])
+- Apply suggestion failures fail supervisor repair ([@mdegat01] - [#113372])
+- Supervisor issues update retries on failure ([@mdegat01] - [#113373])
+- Add loggers to Husqvarna Automower ([@Thomas55555] - [#113381])
+- Bump pyipp to 0.15.0 ([@ctalkington] - [#113204])
+
+[#108254]: https://github.com/home-assistant/core/pull/108254
+[#110185]: https://github.com/home-assistant/core/pull/110185
+[#110253]: https://github.com/home-assistant/core/pull/110253
+[#110882]: https://github.com/home-assistant/core/pull/110882
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111487]: https://github.com/home-assistant/core/pull/111487
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#112262]: https://github.com/home-assistant/core/pull/112262
+[#112272]: https://github.com/home-assistant/core/pull/112272
+[#112415]: https://github.com/home-assistant/core/pull/112415
+[#112515]: https://github.com/home-assistant/core/pull/112515
+[#112516]: https://github.com/home-assistant/core/pull/112516
+[#112554]: https://github.com/home-assistant/core/pull/112554
+[#112578]: https://github.com/home-assistant/core/pull/112578
+[#112589]: https://github.com/home-assistant/core/pull/112589
+[#112590]: https://github.com/home-assistant/core/pull/112590
+[#112618]: https://github.com/home-assistant/core/pull/112618
+[#112619]: https://github.com/home-assistant/core/pull/112619
+[#112620]: https://github.com/home-assistant/core/pull/112620
+[#112623]: https://github.com/home-assistant/core/pull/112623
+[#112627]: https://github.com/home-assistant/core/pull/112627
+[#112629]: https://github.com/home-assistant/core/pull/112629
+[#112632]: https://github.com/home-assistant/core/pull/112632
+[#112646]: https://github.com/home-assistant/core/pull/112646
+[#112661]: https://github.com/home-assistant/core/pull/112661
+[#112675]: https://github.com/home-assistant/core/pull/112675
+[#112676]: https://github.com/home-assistant/core/pull/112676
+[#112686]: https://github.com/home-assistant/core/pull/112686
+[#112696]: https://github.com/home-assistant/core/pull/112696
+[#112701]: https://github.com/home-assistant/core/pull/112701
+[#112718]: https://github.com/home-assistant/core/pull/112718
+[#112745]: https://github.com/home-assistant/core/pull/112745
+[#112747]: https://github.com/home-assistant/core/pull/112747
+[#112783]: https://github.com/home-assistant/core/pull/112783
+[#112795]: https://github.com/home-assistant/core/pull/112795
+[#112796]: https://github.com/home-assistant/core/pull/112796
+[#112833]: https://github.com/home-assistant/core/pull/112833
+[#112838]: https://github.com/home-assistant/core/pull/112838
+[#112861]: https://github.com/home-assistant/core/pull/112861
+[#112890]: https://github.com/home-assistant/core/pull/112890
+[#113007]: https://github.com/home-assistant/core/pull/113007
+[#113008]: https://github.com/home-assistant/core/pull/113008
+[#113019]: https://github.com/home-assistant/core/pull/113019
+[#113021]: https://github.com/home-assistant/core/pull/113021
+[#113034]: https://github.com/home-assistant/core/pull/113034
+[#113035]: https://github.com/home-assistant/core/pull/113035
+[#113054]: https://github.com/home-assistant/core/pull/113054
+[#113056]: https://github.com/home-assistant/core/pull/113056
+[#113064]: https://github.com/home-assistant/core/pull/113064
+[#113066]: https://github.com/home-assistant/core/pull/113066
+[#113071]: https://github.com/home-assistant/core/pull/113071
+[#113091]: https://github.com/home-assistant/core/pull/113091
+[#113095]: https://github.com/home-assistant/core/pull/113095
+[#113096]: https://github.com/home-assistant/core/pull/113096
+[#113135]: https://github.com/home-assistant/core/pull/113135
+[#113144]: https://github.com/home-assistant/core/pull/113144
+[#113160]: https://github.com/home-assistant/core/pull/113160
+[#113172]: https://github.com/home-assistant/core/pull/113172
+[#113198]: https://github.com/home-assistant/core/pull/113198
+[#113204]: https://github.com/home-assistant/core/pull/113204
+[#113205]: https://github.com/home-assistant/core/pull/113205
+[#113235]: https://github.com/home-assistant/core/pull/113235
+[#113250]: https://github.com/home-assistant/core/pull/113250
+[#113372]: https://github.com/home-assistant/core/pull/113372
+[#113373]: https://github.com/home-assistant/core/pull/113373
+[#113381]: https://github.com/home-assistant/core/pull/113381
+[@Ernst79]: https://github.com/Ernst79
+[@FieldofClay]: https://github.com/FieldofClay
+[@FlyingFeng2021]: https://github.com/FlyingFeng2021
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@LukasdeBoer]: https://github.com/LukasdeBoer
+[@OnFreund]: https://github.com/OnFreund
+[@StevenLooman]: https://github.com/StevenLooman
+[@Thomas55555]: https://github.com/Thomas55555
+[@agners]: https://github.com/agners
+[@alinbalutoiu]: https://github.com/alinbalutoiu
+[@alistair23]: https://github.com/alistair23
+[@allenporter]: https://github.com/allenporter
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@clssn]: https://github.com/clssn
+[@cottsay]: https://github.com/cottsay
+[@ctalkington]: https://github.com/ctalkington
+[@dknowles2]: https://github.com/dknowles2
+[@emontnemery]: https://github.com/emontnemery
+[@folke]: https://github.com/folke
+[@frenck]: https://github.com/frenck
+[@j-stienstra]: https://github.com/j-stienstra
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jeeftor]: https://github.com/jeeftor
+[@jonnybergdahl]: https://github.com/jonnybergdahl
+[@lextm]: https://github.com/lextm
+[@marcelveldt]: https://github.com/marcelveldt
+[@mattmccormack]: https://github.com/mattmccormack
+[@mdegat01]: https://github.com/mdegat01
+[@mikewoudenberg]: https://github.com/mikewoudenberg
+[@mrchi]: https://github.com/mrchi
+[@puddly]: https://github.com/puddly
+[@synesthesiam]: https://github.com/synesthesiam
+[@thecode]: https://github.com/thecode
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@zweckj]: https://github.com/zweckj
+
+## Release 2024.3.2 - March 22
+
+- Streamline Notion config entry updates (refresh token and user ID) ([@bachya] - [#112832])
+- Bump aioautomower to 2024.3.2 ([@Thomas55555] - [#113162])
+- Bump aioautomower to 2024.3.3 ([@Thomas55555] - [#113430])
+- Check for EA release channel for UniFi Protect ([@AngellusMortis] - [#113432])
+- Bump `pysnmp-lextudio` to version `6.0.11` ([@lextm] - [#113463])
+- Tado fix water heater ([@erwindouna] - [#113464])
+- Bump aiodhcpwatcher to 0.8.2 ([@bdraco] - [#113466])
+- Bump axis to v55 ([@Kane610] - [#113479])
+- Bump croniter to 2.0.2 ([@dgomes] - [#113494])
+- Revert setting communication delay in Risco init ([@OnFreund] - [#113497])
+- Bump pyrisco to 0.5.10 ([@OnFreund] - [#113505])
+- Fix missing context when running script from template entity ([@emontnemery] - [#113523])
+- Bump ical to 7.0.3 to fix local-todo persisted with invalid DTSTART values ([@allenporter] - [#113526])
+- Fix Airthings BLE illuminance sensor name ([@joostlek] - [#113560])
+- Ignore Shelly block update with cfgChanged None ([@thecode] - [#113587])
+- Catch `TimeoutError` in `Brother` config flow ([@bieniu] - [#113593])
+- Bump axis to v56 ([@Kane610] - [#113608])
+- Bump pyunifiprotect to 5.0.1 ([@AngellusMortis] - [#113630])
+- Bump pyunifiprotect to 5.0.2 ([@AngellusMortis] - [#113651])
+- Add removal condition to Shelly battery sensor ([@bieniu] - [#113703])
+- Bump aioraven to 0.5.2 ([@cottsay] - [#113714])
+- Fix unknown values in onewire ([@epenet] - [#113731])
+- Bump pymodbus v3.6.6 ([@janiversen] - [#113796])
+- Catch API errors in cast media_player service handlers ([@emontnemery] - [#113839])
+- Bump pychromecast to 14.0.1 ([@emontnemery] - [#113841])
+- Fix startup race in cast ([@emontnemery] - [#113843])
+- Redact the area of traccar server geofences ([@ludeeus] - [#113861])
+- Bump pytedee_async to 0.2.17 ([@zweckj] - [#113933])
+- Bump axis to v57 ([@Kane610] - [#113952])
+
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#112516]: https://github.com/home-assistant/core/pull/112516
+[#112832]: https://github.com/home-assistant/core/pull/112832
+[#113162]: https://github.com/home-assistant/core/pull/113162
+[#113249]: https://github.com/home-assistant/core/pull/113249
+[#113430]: https://github.com/home-assistant/core/pull/113430
+[#113432]: https://github.com/home-assistant/core/pull/113432
+[#113463]: https://github.com/home-assistant/core/pull/113463
+[#113464]: https://github.com/home-assistant/core/pull/113464
+[#113466]: https://github.com/home-assistant/core/pull/113466
+[#113479]: https://github.com/home-assistant/core/pull/113479
+[#113494]: https://github.com/home-assistant/core/pull/113494
+[#113497]: https://github.com/home-assistant/core/pull/113497
+[#113505]: https://github.com/home-assistant/core/pull/113505
+[#113523]: https://github.com/home-assistant/core/pull/113523
+[#113526]: https://github.com/home-assistant/core/pull/113526
+[#113560]: https://github.com/home-assistant/core/pull/113560
+[#113587]: https://github.com/home-assistant/core/pull/113587
+[#113593]: https://github.com/home-assistant/core/pull/113593
+[#113608]: https://github.com/home-assistant/core/pull/113608
+[#113630]: https://github.com/home-assistant/core/pull/113630
+[#113651]: https://github.com/home-assistant/core/pull/113651
+[#113703]: https://github.com/home-assistant/core/pull/113703
+[#113714]: https://github.com/home-assistant/core/pull/113714
+[#113731]: https://github.com/home-assistant/core/pull/113731
+[#113796]: https://github.com/home-assistant/core/pull/113796
+[#113839]: https://github.com/home-assistant/core/pull/113839
+[#113841]: https://github.com/home-assistant/core/pull/113841
+[#113843]: https://github.com/home-assistant/core/pull/113843
+[#113861]: https://github.com/home-assistant/core/pull/113861
+[#113933]: https://github.com/home-assistant/core/pull/113933
+[#113952]: https://github.com/home-assistant/core/pull/113952
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Kane610]: https://github.com/Kane610
+[@OnFreund]: https://github.com/OnFreund
+[@Thomas55555]: https://github.com/Thomas55555
+[@allenporter]: https://github.com/allenporter
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@cottsay]: https://github.com/cottsay
+[@dgomes]: https://github.com/dgomes
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@joostlek]: https://github.com/joostlek
+[@lextm]: https://github.com/lextm
+[@ludeeus]: https://github.com/ludeeus
+[@thecode]: https://github.com/thecode
+[@zweckj]: https://github.com/zweckj
+
+## Release 2024.3.3 - March 22
+
+- Update cosign to 2.2.3 ([@frenck] - [#113996])
+- Bump axis to v58 ([@Kane610] - [#114008])
+
+[#113996]: https://github.com/home-assistant/core/pull/113996
+[#114008]: https://github.com/home-assistant/core/pull/114008
+[@frenck]: https://github.com/frenck
+[@Kane610]: https://github.com/Kane610
+
+## Need help? Join the community!
+
+Home Assistant has a great community of users who are all more than willing
+to help each other out. So, join us!
+
+Our very active [Discord chat server](/join-chat) is an excellent place to be
+at, and don't forget to join our amazing [forums](https://community.home-assistant.io/).
+
+Found a bug or issue? Please report it in our [issue tracker](https://github.com/home-assistant/core/issues),
+to get it fixed! Or, check [our help page](/help) for guidance for more
+places you can go.
+
+Are you more into email? [Sign-up for our Building the Open Home Newsletter](/newsletter)
+to get the latest news about features, things happening in our community and
+other news about building an Open Home; straight into your inbox.
+
+## Backward-incompatible changes
+
+{% details "AEMET" %}
+
+The daily data for the current day wasn't available after midday, and
+now it will be. Automations and scripts relying on `day[0]` for checking
+the next-day forecast will have to be adjusted to use `day[1]` instead.
+
+([@Noltari] - [#107795]) ([documentation](/integrations/aemet))
+
+[@Noltari]: https://github.com/Noltari
+[#107795]: https://github.com/home-assistant/core/pull/107795
+
+{% enddetails %}
+
+{% details "JuiceNet" %}
+
+The JuiceNet integration has been removed.
+
+Enel X has migrated from JuiceNet to JuicePass, rendering the JuiceNet
+integration useless. Background and alternative solutions to the juicenet
+integration can be found in the related
+[issue](https://github.com/home-assistant/core/issues/86588).
+
+([@emontnemery] - [#111477])
+
+[#111477]: https://github.com/home-assistant/core/pull/111477
+
+{% enddetails %}
+
+{% details "Met.no" %}
+
+The met.no integration previously created two entities for each configured
+location: one provided daily weather forecasts,
+and one provided hourly forecasts.
+
+The met.no integration now only creates a single entity that provides
+both daily and hourly weather forecasts.
+
+([@emontnemery] - [#97023]) ([documentation](/integrations/met))
+
+[@emontnemery]: https://github.com/emontnemery
+[#97023]: https://github.com/home-assistant/core/pull/97023
+
+{% enddetails %}
+
+{% details "MQTT" %}
+
+Aux heat, deprecated in Home Assistant Core 2023.9, is now removed from
+the MQTT climate.
+
+([@jbouwh] - [#109513]) ([documentation](/integrations/mqtt))
+
+[@jbouwh]: https://github.com/jbouwh
+[#109513]: https://github.com/home-assistant/core/pull/109513
+
+{% enddetails %}
+
+{% details "Z-Wave" %}
+
+For Z-Wave `climate` entities, the behavior of the `climate.turn_on` service
+has changed. Previously, the service would act in the following order depending
+on whether the corresponding conditions were met:
+
+1. If the entity supported the `off` mode and exactly one additional mode,
+ `climate.turn_on` would set the mode to the additional mode.
+2. If conditions for 1 were not met and at least one of the following modes were
+ available, the service would set the mode to the first mode it found
+ in the specified order: `heat_cool`, `heat`, `cool`.
+3. If conditions for 1 and 2 were not met, the service would silently do nothing.
+
+Now, the service follows the following behavior in order:
+
+1. If the entity supports the `resume` thermostat mode, it will be used to
+ restore the last mode you used before the entity was turned off.
+2. If the condition for 1 isn't met and the entity was turned off in
+ Home Assistant, and Home Assistant wasn't restarted, Home Assistant
+ remembers the last "on" mode and will set it to that mode. Home Assistant
+ will be unable to set the entity to the previous mode if Home Assistant
+ starts with the entity already in `off` mode since the integration will
+ not know what the previous mode was.
+3. If conditions for 1 and 2 are not met and at least one of the following
+ modes is available, the service sets the mode to the first mode it finds
+ in the specified order: `heat_cool`, `heat`, `cool`
+ (no change to condition 2 above).
+4. If conditions for 1, 2, and 3 are not met, the mode will be set to the first
+ supported mode it finds (like `dry` or `fan_only`).
+
+([@raman325] - [#109187]) ([documentation](/integrations/zwave_js))
+
+[@raman325]: https://github.com/raman325
+[#109187]: https://github.com/home-assistant/core/pull/109187
+
+{% enddetails %}
+
+If you are a custom integration developer and want to learn about breaking
+changes and new features available for your integration: Be sure to follow our
+[developer blog][devblog]. The following are the most notable for this release:
+
+- [Altering config entries](https://developers.home-assistant.io/blog/2024/02/12/async_update_entry/)
+- [Deprecate use of @bind_hass and hass.components](https://developers.home-assistant.io/blog/2024/02/27/deprecate-bind-hass-and-hass-components)
+- [Introducing device name translations](https://developers.home-assistant.io/blog/2024/02/28/device-name-translations)
+- [It is now required for lights to set color mode](https://developers.home-assistant.io/blog/2024/02/12/light-color-mode-mandatory/)
+- [New Climate entity toggle method](https://developers.home-assistant.io/blog/2024/02/25/Climate-toggle-service)
+- [New single instance only manifest option](https://developers.home-assistant.io/blog/2024/02/26/single-instance-only-manifest-option)
+- [Support for platform translations in separate files will be removed](https://developers.home-assistant.io/blog/2024/03/05/platform_entity_translations_deprecation)
+
+[devblog]: https://developers.home-assistant.io/blog/
+
+## All changes
+
+Of course, there is a lot more in this release. You can find a list of
+all changes made here: [Full changelog for Home Assistant Core 2024.3](/changelogs/core-2024.3)
diff --git a/source/_posts/2024-04-03-release-20244.markdown b/source/_posts/2024-04-03-release-20244.markdown
new file mode 100644
index 000000000000..64d6213de5b8
--- /dev/null
+++ b/source/_posts/2024-04-03-release-20244.markdown
@@ -0,0 +1,1052 @@
+---
+layout: post
+title: "2024.4: Organize all the things!"
+description: "Time for spring cleaning 🧹 Introducing new ways to organize your automations (and more) with floors, labels, and categories. Easily add Matter devices from other controllers, and two brand new map and webpage dashboards."
+date: 2024-04-03 00:00:00
+date_formatted: "April 3, 2024"
+author: Franck Nijhof
+author_twitter: frenck
+comments: true
+categories:
+ - Release-Notes
+ - Core
+og_image: /images/blog/2024-04/social.png
+---
+
+
+
+Home Assistant Core 2024.4! 🌱 🌻
+
+Are you ready for another massive release? This release addresses the most
+requested feature in Home Assistant history: grouping automations! 🎉
+
+But why stop there?
+
+This release brings excellent new features to our user interface that house not
+one, not two, but three! new ways to organize your Home Assistant setup!
+The best part is that it is not just for automations, but for everything! 🤯
+
+Perfect timing: spring is here! Time to spring clean your Home Assistant
+setup by adding some organization to your configuration! 🧹
+
+Enjoy the release! 🌞
+
+../Frenck
+
+
+
+- [Home Assistant spring cleaning! 🧹 New ways to get your automations (and more) organized](#home-assistant-spring-cleaning--new-ways-to-get-your-automations-and-more-organized)
+- [Upgraded tables!](#upgraded-tables)
+ - [A new toolbar](#a-new-toolbar)
+ - [Filter panel](#filter-panel)
+ - [Item grouping](#item-grouping)
+ - [Selection mode and batch actions](#selection-mode-and-batch-actions)
+- [Three new ways to organize](#three-new-ways-to-organize)
+ - [Floors: Help Home Assistant understand your house](#floors-help-home-assistant-understand-your-house)
+ - [Labels: Tag everything any way you want](#labels-tag-everything-any-way-you-want)
+ - [Categories: Make each settings page easier to browse](#categories-make-each-settings-page-easier-to-browse)
+ - [Time to clean up your Home Assistant!](#time-to-clean-up-your-home-assistant)
+- [Map dashboard](#map-dashboard)
+- [Webpage dashboard](#webpage-dashboard)
+- [Define the columns in the section view](#define-the-columns-in-the-section-view)
+- [Adding Matter devices from other controllers](#adding-matter-devices-from-other-controllers)
+- [Lock behavior improvements](#lock-behavior-improvements)
+- [Even more performance!](#even-more-performance)
+- [Other noteworthy changes](#other-noteworthy-changes)
+- [New integrations](#new-integrations)
+- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui)
+- [Release 2024.4.1 - April 5](#release-202441---april-5)
+- [Release 2024.4.2 - April 8](#release-202442---april-8)
+- [Release 2024.4.3 - April 12](#release-202443---april-12)
+- [Release 2024.4.4 - April 23](#release-202444---april-23)
+- [Need help? Join the community!](#need-help-join-the-community)
+- [Backward-incompatible changes](#backward-incompatible-changes)
+- [Farewell to the following](#farewell-to-the-following)
+- [All changes](#all-changes)
+
+Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=Q1yHfqsVidw)
+3 April 2024, at 20:00 GMT / 12:00 PST / 21:00 CEST!
+
+
+
+## Home Assistant spring cleaning! 🧹 New ways to get your automations (and more) organized
+
+By far, the most requested feature in Home Assistant history would be:
+
+[_"Grouping Automations on frontend for organization"_](https://community.home-assistant.io/t/grouping-automations-on-frontend-for-organization/102771).
+
+We hear you! Today, in this release, we are going to give you tools to organize
+your Home Assistant setup, and we took it a few (well, many) steps further than
+just grouping {% term automations %}!
+
+We are introducing 3 (yes, you’ve read it correctly. It’s _three_) organization
+taxonomies, and we revamped our entire table user interface plus a few goodies
+along the way.
+
+## Upgraded tables!
+
+Adding more ways to organize your Home Assistant is great! But being able to
+easily view, filter, and navigate information is just as important. To achieve
+this, we have re-designed ALL the tables in Home Assistant.
+
+For an admin interface, tables are essential for visualizing and managing
+large datasets. Home Assistant has many tables in its settings pages.
+Previously, our UI provided the ability to search, sort, and filter for a few
+aspects, but it was relatively barebones.
+
+Today, we are rolling out a revamped table UI that will be standardized across
+**all** tables in the settings pages with new and improved features.
+
+### A new toolbar
+
+As we add more features to the tables, we need to keep the UI clean and its
+features easy to find. Therefore, we added descriptive text to the dropdown
+menus and standardized the look and feel of the toolbar buttons and text boxes.
+Shiny!
+
+
+
+ The new toolbar that is now on every table in Home Assistant.
+
+
+### Filter panel
+
+Previously, our automations page allowed you to filter by {% term areas %},
+{% term entities %}, or {% term devices %}, but only one at a time, and the
+filters were tucked away in a dropdown menu, which meant you needed to select
+a dropdown menu inside a dropdown menu to filter by area.
+
+A new filter panel fixes these issues by providing a new dual pane user
+interface that can let you check multiple filters across multiple filter
+types on the left that stay put and view the filtered results on the right.
+
+
+
+We also introduced multiple new filter types for each table. For example,
+{% term automations %} can now be filtered not only by {% term areas %},
+{% term entities %} , or {% term devices %}, but also by used
+{% term blueprints %}, labels, and categories (more on these later!).
+
+We didn’t stop at just that page! The devices and entities pages now also have
+a way to filter not only by state but also by integrations and areas. Almost all
+tables now have useful new filters to help you find what you are looking for.
+
+### Item grouping
+
+Browsing a list of hundreds of {% term automations %} or thousands of
+{% term entities %} can be overwhelming. While filters can help narrow the list,
+visually grouping the items into smaller chunks makes browsing easier.
+
+With the item grouping feature, we introduced a new dropdown menu to pick
+how you’d like the items on the table to be grouped. On the automations page,
+you can group automations by their {% term state %} - whether enabled
+or not - and custom categories (more on that later!). On the {% term devices %}
+page, you can even group them by manufacturers, {% term areas %},
+or {% term integrations %}, which is really cool because it makes the page much
+easier to browse. It gives you a new perspective on organizing your vast
+network of devices.
+
+
+
+### Selection mode and batch actions
+
+We removed the clutter of displaying a column of checkboxes by introducing
+a new selection mode. When it is toggled on, checkboxes will appear, and you
+can apply actions to all your selections with one click on the toolbar.
+
+
+
+ This button enables selection mode in the new tables.
+
+
+It allows you to, for example, enable or disable multiple selected
+{% term entities %} on the entities page at once. This new paradigm will allow
+us to introduce more batch management actions in the future.
+
+
+
+## Three new ways to organize
+
+Upon reading through and ideating on the feature request thread on
+[“Automation Grouping”](https://community.home-assistant.io/t/grouping-automations-on-frontend-for-organization/102771),
+we realized that organization can be done in multiple ways for different purposes.
+
+We learned that users who are proficient in making {% term automations %} have
+hundreds of them, which makes locating a particular automation hard. They often
+had to resort to using "hacks" such as emojis, bracketed “tags”, or numbering
+each automation to get the sort order they wanted. They needed a way to easily
+filter down and break down the giant list into more manageable chunks.
+
+We also noticed that users are stretching our areas feature beyond its
+intended purpose. For example, some users would create “{% term areas %}” such
+as “3D printer”, “Christmas decorations”, or even “Left side of my office desk”,
+to group different {% term devices %} and {% term entities %} together under
+one umbrella for dashboards or {% term automations %}.
+
+As we are developing our new dashboards and voice commands, this poses a
+big problem: We would be unable to provide specialized solutions if a dashboard
+{% term blueprint %} or automation blueprint cannot confidently assume the context of
+how it would be used. We need something more specialized.
+
+Therefore, to balance the basic goal of providing a more digestible UI for
+all users, the need for flexibility for our power users, and the future vision
+of Home Assistant, we are introducing 3 new organization structures to
+Home Assistant:
+
+**[Floors](#floors-help-home-assistant-understand-your-house)**,
+**[Labels](#labels-tag-everything-any-way-you-want)**,
+and **[Categories](#categories-make-each-settings-page-easier-to-browse)**
+
+### Floors: Help Home Assistant understand your house
+
+Let's talk about the new organizational structures, starting with **floors**.
+
+To become a truly intelligent home automation platform, Home Assistant needs
+to understand the context: Where exactly is a {% term device%}? How does one
+{%term area %} relate to another? What is the space used for?
+
+Currently, Home Assistant has {% term areas %}. Areas specify the physical
+location or vicinity of your devices per living space in your home
+(like the living room or kitchen). However, some users living in standalone
+houses might have multiple floors with their own areas.
+
+{% term Floors %} are a new way to organize your areas per level of floors in
+your home. The better Home Assistant knows your home and how it is spatially
+structured, the better it can help you. Especially when it comes to future
+features like generating dashboards, voice commands, and maybe even
+AI-related features.
+
+
+
+You can use floors in your {% term automations %} and {% term scripts %} as a
+target for your actions or control them with your voice. For example, you can
+turn off all the lights on the downstairs floor when you go to bed or ask
+[Assist](/voice_control/) to turn on the lights upstairs.
+
+For our power users, you can even use [floors in your templates](/docs/configuration/templating/#floors)
+to create the most advanced and creative automations.
+
+{% my areas badge %}
+
+### Labels: Tag everything any way you want
+
+{% term Floors %} and {% term areas %} are great for representing your actual
+home, but as everyone has their own ways of organizing their home, everyone
+has their own ways of organizing their Home Assistant, too!
+This is where **labels** 🏷️ come in!
+
+Labels is an organizational structure that is completely up to you. You can
+make as many labels with any naming structure, in any color 🌈 you want, and
+assign them to basically anything in Home Assistant. You assign labels to
+anything: {% term areas %}, {% term devices %}, {% term entities %},
+{% term automations %}, {% term scripts %}, helpers, you name it!
+You can even assign multiple labels to the same thing.
+
+
+
+Just like with floors, you can use labels in your automations and scripts as
+a target for your {% term actions %}. This gives you a lot of flexibility,
+not just in organizing your Home Assistant, but also in automating your home! 🤯
+
+For example, you could create a label "🎄 Christmas" to label all your
+Christmas decorations during the holiday season. You can then use this label to
+automate all of those decorations at once or to filter them in the new tables.
+
+More examples? You could create a label "🔒 Security" to label and control all
+your security-related devices and automations. Or, "🛌 Bedrooms" to label all
+your bedroom areas and simultaneously control all the devices in those areas.
+
+Do you have solar panels or home batteries? Create a label "⚡️ Heavy energy usage"
+to label devices that consume a lot of energy. You could switch them off when
+there is not enough battery or solar energy available.
+
+You decide how to use labels, and the possibilities are endless! And for our
+power users, you guessed it, you can use [labels in your templates](/docs/configuration/templating/#labels).
+
+{% my labels badge %}
+
+### Categories: Make each settings page easier to browse
+
+Last but not least, we are introducing **categories**. Categories are designed
+to be paired with the aforementioned [item grouping feature](#item-grouping),
+and it can be used to group things visually specific to a certain table
+in Home Assistant.
+
+This is great for those who have a particular way of displaying their
+{% term entities %} by separating them into multiple sections on a specific page.
+For example, on the {% term automations %} page, you can create categories only
+used for visually grouping automations but nowhere else, like "Notifications"
+or “NFC tags”. You can then view your automations grouped or filtered by
+those categories.
+
+
+
+As these categories are unique for each dashboard, you can have different
+sets of categories depending on the place you are organizing. This means
+you can have different categories on the automations page than the
+{% term scene %}, {% term scripts %}, or helpers settings page.
+
+### Time to clean up your Home Assistant!
+
+In summary, there are a total of 4 taxonomies for organizing your entities.
+It sounds like a lot, but they all serve a distinct purpose. We are extending
+and clarifying {% term areas %} with {% term floors %}, and we are introducing
+{% term labels %} and {% term categories %} to make your {% term automations %}
+and many other tables look more organized and be more manageable.
+
+What’s next? Time to dig in! Here are a few steps we recommend you take
+action on to organize your Home Assistant better:
+
+- **Migrate to labels**:
+ - If you have been grouping automations with emojis and bracketed text,
+ you can now create labels for each. Labels can have icons to replace the
+ emojis you had before.
+ - For areas that aren’t really physical spaces, switching them to labels will
+ provide you more flexibility in organizing your entities.
+- **Start using categories**:
+ If you have a favorite way of organizing a particular page, create those
+ categories and group the table by them. For example, you could create a
+ notification category for all your notification automations and put all
+ notification automations in that category.
+- **Group your areas into floors**:
+ If you live in a multi-story home, grouping areas into floors help with
+ organizing the areas as well as making them more compatible with future
+ features.
+
+Last of all, to help us to help you to perfect the design of these new features,
+we would love to hear your feedback and see how you use them! Please feel free
+to share them in the comments below and discuss them in our community.
+
+## Map dashboard
+
+Introducing a new dashboard this release: The **map**! 🗺️
+
+You might think, "Hey, we already have a map dashboard in Home Assistant!"
+and you are right! However, the map was an integration that was always there
+and didn't provide the flexibility and features that were wanted.
+
+With the map dashboard's introduction, you can now add multiple map dashboards
+with different entities and configuration settings. For example, create a
+dashboard to show the location of your family members, another to track your
+car, and another to show the location of your pets. 🐶
+
+
+
+On upgrade, Home Assistant will automatically migrate your existing map
+integration to a map dashboard.
+
+You don't like having the map in your sidebar? Well, that is no longer a
+problem. Since it is now a dashboard it means you can remove it in the dashboard
+settings.
+
+## Webpage dashboard
+
+Another new dashboard for this release is the **webpage**! 🌐
+
+The webpage dashboard allows you to add and embed a webpage to your dashboard.
+This could be a web page from the internet or a local web page from a local
+machine or device like your router or NAS.
+
+
+
+This dashboard replaces the old iFrame panel (`iframe_panel`). If you have
+existing panels configured in your YAML configuration, Home Assistant will
+automatically migrate them to the new webpage dashboard on upgrade.
+
+
+
+Note that not every webpage can be embedded due to security restrictions that
+some sites or pages have in place, enforced by your browser, that prevent
+embedding them into a Home Assistant dashboard.
+
+## Define the columns in the section view
+
+In the last release, we [introduced the section view](/blog/2024/03/06/release-20243/#a-new-experimental-sections-view)
+with drag and drop support. We are absolutely thrilled to see how many of you
+loved it! 🥰
+
+Many thanks for all the feedback and suggestions! We are prioritizing them and
+are working on making the section view even better in the upcoming releases.
+
+In this release, based on your feedback, we have added the ability for you to
+define the maximum number of columns that the section view uses. This allows you
+to limit the number of columns, regardless of the screen width on which you
+are viewing your dashboard.
+
+
+
+## Adding Matter devices from other controllers
+
+In the [February release](/blog/2024/02/07/release-20242/#matter-diagnostics-and-actions),
+we added support for sharing Matter devices tied to Home Assistant with other
+Matter controllers. This release, we are making the other way around easier.
+
+We have improved how you can add Matter devices from other controllers to
+Home Assistant. When you add a Matter device to Home Assistant, it will now
+ask you if you want to add a new Matter device or if you want to add a device
+that is already added to another controller (like Google Home or Apple Home).
+
+
+
+Suppose you choose to add a device that has already been added to another
+controller. In that case, Home Assistant will guide you through how to
+achieve this step by step.
+
+
+
+## Lock behavior improvements
+
+Some smart locks have an open (or unlatching) mechanism that can be triggered
+remotely. The door either pops out of the lock or can be opened by pushing
+against the door.
+
+We want to ensure you don't accidentally open the door when you miss-clicked
+the button (for example, while not at home 😬). Therefore, we have improved
+the behavior of locks in our user interface by requiring you to confirm the
+action.
+
+
+
+## Even more performance!
+
+Remember how we wrote last release that [Home Assistant now boots twice as fast](/blog/2024/03/06/release-20243/#home-assistant-boots-twice-as-fast)?
+Well, [@bdraco] wasn't done yet and teamed up with [@balloob]. If you thought
+the previous release was fast, you are in for a treat! 🚀 The difference is,
+yet again, very noticeable.
+
+Besides streamlining what is loaded at startup (and doing less loading), we
+have adjusted the startup time tracking. It used to be that one integration
+could push other integrations to be slow too; that should no longer be the case,
+making this a more accurate representation of the actual startup time.
+
+Want to learn about the individual startup times of your integrations? You can
+find them in the {% my repairs title="**Settings** -> **System** -> **Repairs**" %}
+page by selecting the three-dotted menu in the top right and selecting the
+**Integration startup time** item.
+
+{% my repairs badge %}
+
+[@bdraco]: https://github.com/bdraco
+[@balloob]: https://github.com/balloob
+
+## Other noteworthy changes
+
+There are many more improvements in this release; here are some of the other
+noteworthy changes this release:
+
+- [@karwosts] has improved your Home Assistant {% my profile title="user profile" %}
+ page, making navigating and finding the settings you are looking for easier.
+ Nice work!
+- If you use a [sentence trigger] in your automation to trigger it using
+ [Assist]. The trigger will now include the `device_id` in its trigger data
+ you can automate with. Thanks, [@synesthesiam]!
+- The [HomeWizard Energy] integration now supports the newest generation of
+ HomeWizard Energy Sockets! Thanks, [@DCSBL]!
+- We can now ship new releases of Home Assistant in waaay less time.
+ Building and shipping Home Assistant for you, went down from 1.5-2 hours to
+ just 20 minutes! 🚀 Thanks [@edenhaus]!
+ [Learn more about it in our developer blog](https://developers.home-assistant.io/blog/2024/04/03/build-images-with-uv/).
+- [Reolink] now supports PTZ patrol start/stop, package detection and controls
+ for playing quick reply messages. Thanks, [@starkillerOG]!
+- We have brand new template functions available to list [all the issues] in
+ your repairs dashboard. Thanks, [@RoboMagus]!
+- If you prefer your wind speed sensors to be in Beaufort, you are in luck!
+ You can now change the unit of measurement to Beaufort. Thanks, [@fwestenberg]!
+- The [Husqvarna Automower] integration development continues and has additional
+ new entities, including sensors, select entities, and a device tracker.
+ Thanks, [@Thomas55555]!
+- [@catsmanac] has added a sensor to monitor the battery storage attached
+ to your [Enphase Envoy]; it works with the energy dashboard! Nice!
+- The [Xiaomi BLE] integration now supports locks and fingerprint readers!
+ Awesome, [@Ernst79]!
+
+[@catsmanac]: https://github.com/catsmanac
+[@DCSBL]: https://github.com/DCSBL
+[@edenhaus]: https://github.com/edenhaus
+[@Ernst79]: https://github.com/Ernst79
+[@fwestenberg]: https://github.com/fwestenberg
+[@karwosts]: https://github.com/karwosts
+[@RoboMagus]: https://github.com/RoboMagus
+[@starkillerOG]: https://github.com/starkillerOG
+[@synesthesiam]: https://github.com/synesthesiam
+[@Thomas55555]: https://github.com/Thomas55555
+[all the issues]: /docs/configuration/templating/#issues
+[Assist]: /voice_control/
+[Enphase Envoy]: /integrations/enphase_envoy
+[HomeWizard Energy]: /integrations/homewizard
+[Husqvarna Automower]: /integrations/husqvarna_automower
+[Reolink]: /integrations/reolink
+[sentence trigger]: /docs/automation/trigger/#sentence-trigger
+[Xiaomi BLE]: /integrations/xiaomi_ble
+
+## New integrations
+
+We welcome the following new integrations in this release:
+
+- **[Fyta]**, added by [@dontinelli]
+ Monitor your plants with Fyta, a smart plant sensor that measures light,
+ temperature, humidity, and soil moisture.
+- **[Motionblinds Bluetooth]**, added by [@LennP]
+ Control your Bluetooth Low Energy Motionblinds motorized window coverings.
+- **[Ollama]**, added by [@synesthesiam]
+ Ollama a fully local AI conversation platform that can be used to create
+ custom voice assistants.
+
+[@dontinelli]: https://github.com/dontinelli
+[@LennP]: https://github.com/LennP
+[@synesthesiam]: https://github.com/synesthesiam
+[Fyta]: /integrations/fyta
+[Motionblinds Bluetooth]: /integrations/motionblinds_ble
+[Ollama]: /integrations/ollama
+
+This release also has new virtual integration. Virtual integrations are stubs
+that are handled by other (existing) integrations to help with findability.
+The following virtual integration have been added:
+
+- **[Sacramento Municipal Utility District (SMUD)]**, provided by [Opower]
+
+[Sacramento Municipal Utility District (SMUD)]: /integrations/smud
+[Opower]: /integrations/opower
+
+## Integrations now available to set up from the UI
+
+The following integrations are now available via the Home Assistant UI:
+
+- **[Lutron Homeworks]**, done by [@emontnemery]
+- **[17TRACK]**, done by [@shaiu]
+- **[Downloader]**, done by [@erwindouna]
+- **[ROVA]**, done by [@GidoHakvoort]
+
+[@emontnemery]: https://github.com/emontnemery
+[@erwindouna]: https://github.com/erwindouna
+[@GidoHakvoort]: https://github.com/GidoHakvoort
+[@shaiu]: https://github.com/shaiu
+[17TRACK]: /integrations/seventeentrack
+[Downloader]: /integrations/downloader
+[Lutron Homeworks]: /integrations/homeworks
+[ROVA]: /integrations/rova
+
+## Release 2024.4.1 - April 5
+
+- Update aioairzone-cloud to v0.4.7 ([@Noltari] - [#114761])
+- Bump myuplink dependency to 0.6.0 ([@astrandb] - [#114767])
+- Update romy to 0.0.9 ([@cdce8p] - [#114360])
+- Update romy to 0.0.10 ([@xeniter] - [#114785])
+- Fix unhandled `KeyError` during Notion setup ([@bachya] - [#114787])
+- Fix Lutron light brightness values ([@cdheiser] - [#114794])
+- Fix type cast in snmp ([@lextm] - [#114795])
+- Handle ambiguous script actions by using action map order ([@bdraco] - [#114825])
+- Bump opower to 0.4.3 ([@tronikos] - [#114826])
+- Refactor ConfigStore to avoid needing to pass config_dir ([@bdraco] - [#114827])
+- Avoid blocking IO in downloader initialization ([@joostlek] - [#114841])
+- Fix Downloader YAML import ([@joostlek] - [#114844])
+- Update frontend to 20240404.0 ([@bramkragten] - [#114859])
+- Fix Axis camera platform support HTTPS ([@Kane610] - [#114886])
+- Bump weatherflow4py to 0.2.20 ([@jeeftor] - [#114888])
+- Fix Axis reconfigure step not providing protocols as alternatives but as string ([@Kane610] - [#114889])
+- Update frontend to 20240404.1 ([@bramkragten] - [#114890])
+- Ensure all tables have the default table args in the db_schema ([@bdraco] - [#114895])
+- Reduce august polling frequency ([@bdraco] - [#114904])
+- Show correct model string in myuplink ([@astrandb] - [#114921])
+- Create right import issues in Downloader ([@joostlek] - [#114922])
+- Fix cast dashboard in media browser ([@joostlek] - [#114924])
+- Pin systembridgemodels to 4.0.4 ([@timmo001] - [#114842])
+- Fix ROVA validation ([@joostlek] - [#114938])
+
+[#114360]: https://github.com/home-assistant/core/pull/114360
+[#114761]: https://github.com/home-assistant/core/pull/114761
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114767]: https://github.com/home-assistant/core/pull/114767
+[#114785]: https://github.com/home-assistant/core/pull/114785
+[#114787]: https://github.com/home-assistant/core/pull/114787
+[#114794]: https://github.com/home-assistant/core/pull/114794
+[#114795]: https://github.com/home-assistant/core/pull/114795
+[#114825]: https://github.com/home-assistant/core/pull/114825
+[#114826]: https://github.com/home-assistant/core/pull/114826
+[#114827]: https://github.com/home-assistant/core/pull/114827
+[#114841]: https://github.com/home-assistant/core/pull/114841
+[#114842]: https://github.com/home-assistant/core/pull/114842
+[#114844]: https://github.com/home-assistant/core/pull/114844
+[#114859]: https://github.com/home-assistant/core/pull/114859
+[#114886]: https://github.com/home-assistant/core/pull/114886
+[#114888]: https://github.com/home-assistant/core/pull/114888
+[#114889]: https://github.com/home-assistant/core/pull/114889
+[#114890]: https://github.com/home-assistant/core/pull/114890
+[#114895]: https://github.com/home-assistant/core/pull/114895
+[#114904]: https://github.com/home-assistant/core/pull/114904
+[#114921]: https://github.com/home-assistant/core/pull/114921
+[#114922]: https://github.com/home-assistant/core/pull/114922
+[#114924]: https://github.com/home-assistant/core/pull/114924
+[#114938]: https://github.com/home-assistant/core/pull/114938
+[@Kane610]: https://github.com/Kane610
+[@Noltari]: https://github.com/Noltari
+[@astrandb]: https://github.com/astrandb
+[@bachya]: https://github.com/bachya
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@cdce8p]: https://github.com/cdce8p
+[@cdheiser]: https://github.com/cdheiser
+[@frenck]: https://github.com/frenck
+[@jeeftor]: https://github.com/jeeftor
+[@joostlek]: https://github.com/joostlek
+[@lextm]: https://github.com/lextm
+[@timmo001]: https://github.com/timmo001
+[@tronikos]: https://github.com/tronikos
+[@xeniter]: https://github.com/xeniter
+
+## Release 2024.4.2 - April 8
+
+- Fix hang in SNMP device_tracker implementation ([@nmaggioni] - [#112815])
+- Fix missing if statement in homematic ([@bbr111] - [#114832])
+- Bump pylitterbot to 2023.4.11 ([@natekspencer] - [#114918])
+- Fix Snapcast Config flow ([@joostlek] - [#114952])
+- Bump axis to v61 ([@Kane610] - [#114964])
+- Filter out fuzzy translations from Lokalise ([@joostlek] - [#114968])
+- Upgrade to pynobo 1.8.1 ([@oyvindwe] - [#114982])
+- Fix dictionary changed size during iteration in prometheus ([@bdraco] - [#115005])
+- Bump `brother` to version 4.1.0 ([@bieniu] - [#115021])
+- Bump yolink-api to 0.4.2 ([@matrixd2] - [#115026])
+- Update xknxproject to 3.7.1 ([@farmio] - [#115053])
+- Fix synology_dsm availablity ([@bdraco] - [#115073])
+- Downgrade hass-nabucasa from 0.80.0 to 0.78.0 ([@ludeeus] - [#115078])
+- Bump velbus-aio to 2024.4.1 ([@Cereal2nd] - [#115109])
+- Terminate scripts with until and while conditions that execute more than 10000 times ([@bdraco] - [#115110])
+- improve handling of incorrect values in fyta integration ([@dontinelli] - [#115134])
+- Bump fyta_cli to 0.3.5 ([@dontinelli] - [#115143])
+- Fix fibaro sensor additional sensor lookup ([@rappenze] - [#115148])
+- Write timer entity state before firing events ([@bdraco] - [#115151])
+- Avoid checking for polling if an entity fails to add ([@bdraco] - [#115159])
+- Only reset requested utility meter with no tariff ([@gibwar] - [#115170])
+
+[#112815]: https://github.com/home-assistant/core/pull/112815
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114832]: https://github.com/home-assistant/core/pull/114832
+[#114918]: https://github.com/home-assistant/core/pull/114918
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#114952]: https://github.com/home-assistant/core/pull/114952
+[#114964]: https://github.com/home-assistant/core/pull/114964
+[#114968]: https://github.com/home-assistant/core/pull/114968
+[#114982]: https://github.com/home-assistant/core/pull/114982
+[#115005]: https://github.com/home-assistant/core/pull/115005
+[#115021]: https://github.com/home-assistant/core/pull/115021
+[#115026]: https://github.com/home-assistant/core/pull/115026
+[#115053]: https://github.com/home-assistant/core/pull/115053
+[#115073]: https://github.com/home-assistant/core/pull/115073
+[#115078]: https://github.com/home-assistant/core/pull/115078
+[#115109]: https://github.com/home-assistant/core/pull/115109
+[#115110]: https://github.com/home-assistant/core/pull/115110
+[#115134]: https://github.com/home-assistant/core/pull/115134
+[#115143]: https://github.com/home-assistant/core/pull/115143
+[#115148]: https://github.com/home-assistant/core/pull/115148
+[#115151]: https://github.com/home-assistant/core/pull/115151
+[#115159]: https://github.com/home-assistant/core/pull/115159
+[#115170]: https://github.com/home-assistant/core/pull/115170
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@Kane610]: https://github.com/Kane610
+[@bbr111]: https://github.com/bbr111
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@dontinelli]: https://github.com/dontinelli
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gibwar]: https://github.com/gibwar
+[@joostlek]: https://github.com/joostlek
+[@ludeeus]: https://github.com/ludeeus
+[@matrixd2]: https://github.com/matrixd2
+[@natekspencer]: https://github.com/natekspencer
+[@nmaggioni]: https://github.com/nmaggioni
+[@oyvindwe]: https://github.com/oyvindwe
+[@rappenze]: https://github.com/rappenze
+
+## Release 2024.4.3 - April 12
+
+- Bump aiohttp to 3.9.4 ([@bdraco] - [#110730])
+- Add support for adopt data disk repair ([@mdegat01] - [#114891])
+- Improve Risco exception logging ([@OnFreund] - [#115232])
+- Configurable maximum concurrency in Risco local ([@OnFreund] - [#115226])
+- Fix misssing timeout in caldav ([@bdraco] - [#115247])
+- Fix Google Tasks parsing of remove responses ([@allenporter] - [#115258])
+- Bump forecast-solar lib to v3.1.0 ([@klaasnicolaas] - [#115272])
+- Support backup of add-ons with hyphens ([@agners] - [#115274])
+- Bump pymodbus v3.6.7 ([@janiversen] - [#115279])
+- Bump yt-dlp to 2024.04.09 ([@joostlek] - [#115295])
+- Fix Aranet failure when the Bluetooth proxy is not providing a device name ([@thecode] - [#115298])
+- Bump zha-quirks to 0.0.114 ([@TheJulianJES] - [#115299])
+- Ensure automations do not execute from a trigger if they are disabled ([@bdraco] - [#115305])
+- Bump bleak-retry-connector 3.5.0 ([@bdraco] - [#115328])
+- Secure against resetting a non active modbus ([@janiversen] - [#115364])
+- Solve modbus test problem ([@janiversen] - [#115376])
+- Fix deadlock in holidays dynamic loading ([@bdraco] - [#115385])
+- Bump whirlpool-sixth-sense to 0.18.8 ([@NodeJSmith] - [#115393])
+- Fix bug in rainbird switch when turning off a switch that is already off ([@allenporter] - [#115421])
+- Bump pybotvac to 0.0.25 ([@Santobert] - [#115435])
+- Update frontend to 20240404.2 ([@bramkragten] - [#115460])
+
+[#110730]: https://github.com/home-assistant/core/pull/110730
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114891]: https://github.com/home-assistant/core/pull/114891
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#115186]: https://github.com/home-assistant/core/pull/115186
+[#115226]: https://github.com/home-assistant/core/pull/115226
+[#115232]: https://github.com/home-assistant/core/pull/115232
+[#115247]: https://github.com/home-assistant/core/pull/115247
+[#115258]: https://github.com/home-assistant/core/pull/115258
+[#115272]: https://github.com/home-assistant/core/pull/115272
+[#115274]: https://github.com/home-assistant/core/pull/115274
+[#115279]: https://github.com/home-assistant/core/pull/115279
+[#115295]: https://github.com/home-assistant/core/pull/115295
+[#115298]: https://github.com/home-assistant/core/pull/115298
+[#115299]: https://github.com/home-assistant/core/pull/115299
+[#115305]: https://github.com/home-assistant/core/pull/115305
+[#115328]: https://github.com/home-assistant/core/pull/115328
+[#115364]: https://github.com/home-assistant/core/pull/115364
+[#115376]: https://github.com/home-assistant/core/pull/115376
+[#115385]: https://github.com/home-assistant/core/pull/115385
+[#115393]: https://github.com/home-assistant/core/pull/115393
+[#115421]: https://github.com/home-assistant/core/pull/115421
+[#115435]: https://github.com/home-assistant/core/pull/115435
+[#115460]: https://github.com/home-assistant/core/pull/115460
+[@NodeJSmith]: https://github.com/NodeJSmith
+[@OnFreund]: https://github.com/OnFreund
+[@Santobert]: https://github.com/Santobert
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@agners]: https://github.com/agners
+[@allenporter]: https://github.com/allenporter
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@joostlek]: https://github.com/joostlek
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@mdegat01]: https://github.com/mdegat01
+[@thecode]: https://github.com/thecode
+
+## Release 2024.4.4 - April 23
+
+- Bump slixmpp version to 1.8.5 ([@ravermeister] - [#114448])
+- Make Withings recoverable after internet outage ([@joostlek] - [#115124])
+- Fix Hyperion light not updating state ([@avee87] - [#115389])
+- Add scheduled mode to renault charge mode ([@slyoldfox] - [#115427])
+- Bump zeroconf to 0.132.1 ([@bdraco] - [#115501])
+- Bump zeroconf to 0.132.2 ([@bdraco] - [#115505])
+- Update pillow to 10.3.0 ([@cdce8p] - [#115524])
+- Fix race in TimestampDataUpdateCoordinator ([@bdraco] - [#115542])
+- Fix Teslemetry sensor values ([@Bre77] - [#115571])
+- Modbus: Bump pymodbus v3.6.8 ([@janiversen] - [#115574])
+- Fix sensor entity description in Teslemetry ([@Bre77] - [#115614])
+- Bump httpcore to 1.0.5 ([@bdraco] - [#115672])
+- Bump sqlparse to 0.5.0 ([@bdraco] - [#115681])
+- Bump aiohttp to 3.9.5 ([@bdraco] - [#115727])
+- Bump renault-api to 0.2.2 ([@epenet] - [#115738])
+- Fix homeworks import flow ([@emontnemery] - [#115761])
+- Allow [##:##:##] type keypad address in homeworks ([@emontnemery] - [#115762])
+- Add missing media_player features to Samsung TV ([@chemelli74] - [#115788])
+- Bump aiounifi to v75 ([@Kane610] - [#115819])
+- Ensure scripts with timeouts of zero timeout immediately ([@bdraco] - [#115830])
+- Fix KeyError error when fetching sensors (Airthings) ([@LaStrada] - [#115844])
+- Bump plexapi to 4.15.12 ([@jjlawren] - [#115872])
+- Bump ical to 8.0.0 ([@allenporter] - [#115907])
+- Fix geo location attributes of Tankerkoenig sensors ([@mib1185] - [#115914])
+- Use start helper in squeezebox for server discovery ([@rajlaud] - [#115978])
+
+[#114448]: https://github.com/home-assistant/core/pull/114448
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#115124]: https://github.com/home-assistant/core/pull/115124
+[#115186]: https://github.com/home-assistant/core/pull/115186
+[#115389]: https://github.com/home-assistant/core/pull/115389
+[#115427]: https://github.com/home-assistant/core/pull/115427
+[#115463]: https://github.com/home-assistant/core/pull/115463
+[#115501]: https://github.com/home-assistant/core/pull/115501
+[#115505]: https://github.com/home-assistant/core/pull/115505
+[#115524]: https://github.com/home-assistant/core/pull/115524
+[#115542]: https://github.com/home-assistant/core/pull/115542
+[#115571]: https://github.com/home-assistant/core/pull/115571
+[#115574]: https://github.com/home-assistant/core/pull/115574
+[#115614]: https://github.com/home-assistant/core/pull/115614
+[#115672]: https://github.com/home-assistant/core/pull/115672
+[#115681]: https://github.com/home-assistant/core/pull/115681
+[#115727]: https://github.com/home-assistant/core/pull/115727
+[#115738]: https://github.com/home-assistant/core/pull/115738
+[#115761]: https://github.com/home-assistant/core/pull/115761
+[#115762]: https://github.com/home-assistant/core/pull/115762
+[#115788]: https://github.com/home-assistant/core/pull/115788
+[#115819]: https://github.com/home-assistant/core/pull/115819
+[#115830]: https://github.com/home-assistant/core/pull/115830
+[#115844]: https://github.com/home-assistant/core/pull/115844
+[#115872]: https://github.com/home-assistant/core/pull/115872
+[#115907]: https://github.com/home-assistant/core/pull/115907
+[#115914]: https://github.com/home-assistant/core/pull/115914
+[#115978]: https://github.com/home-assistant/core/pull/115978
+[@Bre77]: https://github.com/Bre77
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@allenporter]: https://github.com/allenporter
+[@avee87]: https://github.com/avee87
+[@bdraco]: https://github.com/bdraco
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@jjlawren]: https://github.com/jjlawren
+[@joostlek]: https://github.com/joostlek
+[@mib1185]: https://github.com/mib1185
+[@rajlaud]: https://github.com/rajlaud
+[@ravermeister]: https://github.com/ravermeister
+[@slyoldfox]: https://github.com/slyoldfox
+
+## Need help? Join the community!
+
+Home Assistant has a great community of users who are all more than willing
+to help each other out. So, join us!
+
+Our very active [Discord chat server](/join-chat) is an excellent place to be
+at, and don't forget to join our amazing [forums](https://community.home-assistant.io/).
+
+Found a bug or issue? Please report it in our [issue tracker](https://github.com/home-assistant/core/issues),
+to get it fixed! Or, check [our help page](/help) for guidance for more
+places you can go.
+
+Are you more into email? [Sign-up for our Building the Open Home Newsletter](/newsletter)
+to get the latest news about features, things happening in our community and
+other news about building an Open Home; straight into your inbox.
+
+## Backward-incompatible changes
+
+{% details "Python 3.11 support has been removed" %}
+
+Python 3.11 support has previously been deprecated and has now been removed.
+Home Assistant now requires Python 3.12 to run.
+
+You don’t have to do anything if you are using the Home Assistant Operating
+System, Home Assistant Container, or Home Assistant Supervised installation
+method. In those cases, we handle all of this for you. Your system has been
+using Python 3.12 for quite some time already.
+
+([@frenck] - [#114220])
+
+[@frenck]: https://github.com/frenck
+[#114220]: https://github.com/home-assistant/core/pull/114220
+
+{% enddetails %}
+
+{% details "AEMET OpenData" %}
+
+The AEMET OpenData integration previously created two entities for each
+configured location: one provided daily weather forecasts and the other hourly
+forecasts.
+
+The AEMET OpenData integration now only creates a single entity that provides
+both daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#110764]) ([documentation](/integrations/aemet))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#110764]: https://github.com/home-assistant/core/pull/110764
+
+{% enddetails %}
+
+{% details "Dexcom" %}
+
+The trend sensor now uses values that are using snake_case instead of a space
+in the middle:
+
+- `rising quickly` -> `rising_quickly`
+- `rising slightly` -> `rising_slightly`
+- `falling slightly` -> `falling_slightly`
+- `falling quickly` -> `falling_quickly`
+
+Please update your automations and scripts accordingly.
+
+([@joostlek] - [#112423]) ([documentation](/integrations/dexcom))
+
+[@joostlek]: https://github.com/joostlek
+[#112423]: https://github.com/home-assistant/core/pull/112423
+
+{% enddetails %}
+
+{% details "ecobee" %}
+
+The non-functional `away` preset mode has been replaced with the correct
+`away_indefinitely` preset mode.
+
+If any automation or script depends on the `away` preset mode,
+it needs to be updated.
+
+([@alexsydell] - [#108636]) ([documentation](/integrations/ecobee))
+
+[@alexsydell]: https://github.com/alexsydell
+[#108636]: https://github.com/home-assistant/core/pull/108636
+
+{% enddetails %}
+
+{% details "Environment Canada" %}
+
+The Environment Canada integration previously created two entities for each
+configured location: one provided daily weather forecasts and the other hourly
+forecasts.
+
+The Environment Canada integration now only creates a single entity that
+provides both daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#112447]) ([documentation](/integrations/environment_canada))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#112447]: https://github.com/home-assistant/core/pull/112447
+
+{% enddetails %}
+
+{% details "National Weather Service (NWS)" %}
+
+The National Weather Service integration previously created two entities for each
+configured location: one provided daily weather forecasts and the other hourly
+forecasts.
+
+The National Weather Service integration now only creates a single entity that
+provides both daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#112503]) ([documentation](/integrations/nws))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#112503]: https://github.com/home-assistant/core/pull/112503
+
+{% enddetails %}
+
+{% details "Met Éireann" %}
+
+The Met Éireann integration previously created two entities for each configured
+location: one provided daily weather forecasts and the other hourly forecasts.
+
+The Met Éireann integration now only creates a single entity that provides both
+daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#112449]) ([documentation](/integrations/met_eireann))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#112449]: https://github.com/home-assistant/core/pull/112449
+
+{% enddetails %}
+
+{% details "Met Office" %}
+
+The Met Office integration previously created two entities for each configured
+location: one provided daily weather forecasts and the other hourly forecasts.
+
+The Met Office integration now only creates a single entity that provides both
+daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#112452]) ([documentation](/integrations/metoffice))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#112452]: https://github.com/home-assistant/core/pull/112452
+
+{% enddetails %}
+
+{% details "Modbus" %}
+
+The Modbus integration does not allow a configuration with the device only
+(no entities); this will create an issue, and the entry will not be loaded.
+
+For the special cases (like some custom_components) where it is wanted,
+please add a dummy entity.
+
+([@janiversen] - [#113516]) ([documentation](/integrations/modbus))
+
+[@janiversen]: https://github.com/janiversen
+[#113516]: https://github.com/home-assistant/core/pull/113516
+
+{% enddetails %}
+
+{% details "MQTT" %}
+
+Support for `brightness` is now assumed for `mqtt` lights with the `json` schema
+unless only color modes `rgb`, `rgbw`, or `rgbww` are supported.
+
+For lights which only support color modes `rgb`, `rgbw`, or `rgbww`,
+the `brightness` option flag can still be set to `false` if brightness is not
+supported. In this case brightness support is emulated in Home Assistant by
+scaling the RGBx-values.
+
+For all other color modes except `ColorMode.ONOFF`, it is assumed brightness is
+supported, and the `brightness` attribute will be included in the MQTT payload
+when the `brightness` attribute is supplied to the `light.turn_on` service.
+
+([@jbouwh] - [#111676]) ([documentation](/integrations/mqtt))
+
+[@jbouwh]: https://github.com/jbouwh
+[#111676]: https://github.com/home-assistant/core/pull/111676
+
+{% enddetails %}
+
+{% details "myUplink" %}
+
+If you have a Nibe SMO 20 in your account, you will notice that some 550
+entities are no longer provided by the integration.
+
+You can safely remove these entities as the integration does not use them.
+
+([@astrandb] - [#113493]) ([documentation](/integrations/myuplink))
+
+[@astrandb]: https://github.com/astrandb
+[#113493]: https://github.com/home-assistant/core/pull/113493
+
+{% enddetails %}
+
+{% details "Waze Travel Time" %}
+
+The options `excl_filter` and `incl_filter` now filter for exact matches to
+street names in the route. Previously, they only filtered on the short
+description of the route.
+
+([@eifinger] - [#108613]) ([documentation](/integrations/waze_travel_time))
+
+[@eifinger]: https://github.com/eifinger
+[#108613]: https://github.com/home-assistant/core/pull/108613
+
+{% enddetails %}
+
+{% details "Weather" %}
+
+The previously deprecated `forecast` attribute of weather entities, has now been
+removed. Use the [`weather.get_forecasts`](/integrations/weather#service-weatherget_forecasts)
+service to get the forecast data instead.
+
+([@gjohansson-ST] - [#110761]) ([documentation](/integrations/metoffice))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#110761]: https://github.com/home-assistant/core/pull/110761
+
+{% enddetails %}
+
+If you are a custom integration developer and want to learn about breaking
+changes and new features available for your integration: Be sure to follow our
+[developer blog][devblog]. The following are the most notable for this release:
+
+- [Climate entity auxiliary heater is deprecated](https://developers.home-assistant.io/blog/2024/03/10/climate-aux-heater-deprecated)
+- [Config Entries can now provide a reconfigure step](https://developers.home-assistant.io/blog/2024/03/21/config-entry-reconfigure-step)
+- [Deprecate hass.helpers usage](https://developers.home-assistant.io/blog/2024/03/30/deprecate-hass-helpers/)
+- [Deprecating `async_run_job` and `async_add_job`](https://developers.home-assistant.io/blog/2024/03/13/deprecate_add_run_job)
+- [How uv saves Home Assistant 215 compute hours per month](https://developers.home-assistant.io/blog/2024/04/03/build-images-with-uv/)
+- [Integrations import in the executor to avoid blocking the event loop](https://developers.home-assistant.io/blog/2024/03/09/import_executor_default)
+- [New state timestamp State.last_reported](https://developers.home-assistant.io/blog/2024/03/20/state_reported_timestamp)
+- [Raising exceptions with translations](https://developers.home-assistant.io/blog/2024/03/15/exception-translations)
+
+[devblog]: https://developers.home-assistant.io/blog/
+
+## Farewell to the following
+
+The following integrations are also no longer available as of this release:
+
+- **OpenCV** has been removed. The integration has been in a broken state
+ for over a year and currently has no path forward.
+ ([@thecode] - [#113455])
+
+[@thecode]: https://github.com/thecode
+[#113455]: https://github.com/home-assistant/core/pull/113455
+
+## All changes
+
+Of course, there is a lot more in this release. You can find a list of
+all changes made here: [Full changelog for Home Assistant Core 2024.4](/changelogs/core-2024.4)
diff --git a/source/_posts/2024-04-24-state-of-the-open-home-2024.markdown b/source/_posts/2024-04-24-state-of-the-open-home-2024.markdown
new file mode 100644
index 000000000000..7b2359930ee2
--- /dev/null
+++ b/source/_posts/2024-04-24-state-of-the-open-home-2024.markdown
@@ -0,0 +1,33 @@
+---
+layout: post
+title: "Thinking Bigger: State of the Open Home 2024"
+description: "The State of the Open Home 2024 stream includes a deep dive into the evolution of Home Assistant, and how it has now reached an estimated 1 million installations."
+date: 2024-04-24 00:00:01
+date_formatted: "April 24, 2024"
+author: Gordon Cameron
+comments: true
+categories: Announcements
+og_image: /images/blog/2024-04-24-state-of-the-open-home-2024/banner.jpg
+---
+
+We recently held our [State of the Open Home 2024 live stream](https://www.youtube.com/live/oa__fLArsFk?si=PzlfiHLUYE6uAEq3), where we revealed how we are thinking [even bigger](/blog/2018/09/17/thinking-big/) about securing the future of the smart home. During this stream we launched the [Open Home Foundation](https://www.openhomefoundation.org/), a new non-profit organization created to fight for the fundamental principles of the smart home — privacy, choice, and sustainability — focused on serving everyone that lives in one. To learn more about the Open Home Foundation read the full [announcement](https://www.openhomefoundation.org/blog/announcing-the-open-home-foundation/).
+
+The stream includes a deep dive into the evolution of Home Assistant and how it has now reached an estimated 1 million installations. There were other substantial updates on voice and hardware, including teasing our upcoming Z-Wave and voice assistant hardware. The first panel discussion featured the founders of Open Home Foundation collaborating projects WLED, Zigbee2MQTT, Rhasspy, and Z-Wave JS. A second panel gave a comprehensive overview of the state of open standards, featuring key open-source developers working on Zigbee, Z-Wave, Matter, and Bluetooth. The stream caps off with a look into the future of the open home, including the announcement of a roadmap full of exciting new features.
+
+
+
+
+
+Full list of chapters:
+
+- Introduction ([0:00:11](https://www.youtube.com/watch?v=oa__fLArsFk&t=11s))
+- Announcing the Open Home Foundation - Paulus Schoutsen ([0:02:36](https://www.youtube.com/watch?v=oa__fLArsFk&t=156s))
+- Panel with Open Home Foundation collaborators - WLED, Zigbee2MQTT, Rhasspy, Z-Wave JS ([0:18:31](https://www.youtube.com/watch?v=oa__fLArsFk&t=1111s))
+- Voice - Michael Hansen ([0:36:31](https://www.youtube.com/watch?v=oa__fLArsFk&t=2191s))
+- Home Assistant - Franck Nijhof ([0:53:08](https://www.youtube.com/watch?v=oa__fLArsFk&t=3188s))
+- Hardware - Uwe Bernitt ([1:21:37](https://www.youtube.com/watch?v=oa__fLArsFk&t=4897s))
+- Panel on Open Standards - Zigbee, Z-Wave, Matter, Bluetooth ([1:40:21](https://www.youtube.com/watch?v=oa__fLArsFk&t=6021s))
+- Future - Madelena Mak ([2:07:29](https://www.youtube.com/watch?v=oa__fLArsFk&t=7649s))
+- Closing ([2:37:33](https://www.youtube.com/watch?v=oa__fLArsFk&t=9453s))
+
+**The Open Home Foundation** now owns and governs over 240 open-source projects, standards, drivers, and libraries, including Home Assistant - protecting these projects from buy-out or becoming abandoned. To learn more about the Open Home Foundation, visit: [www.openhomefoundation.org](https://www.openhomefoundation.org/)
diff --git a/source/_posts/2024-05-01-release-20245.markdown b/source/_posts/2024-05-01-release-20245.markdown
new file mode 100644
index 000000000000..e274a17497ad
--- /dev/null
+++ b/source/_posts/2024-05-01-release-20245.markdown
@@ -0,0 +1,505 @@
+---
+layout: post
+title: "2024.5: Just a little bit smaller"
+description: "New features for our new data tables, create helpers directly from the automation editor, the tile card now supports locks, easily adjust the name of a device on the energy dashboard, and improved audio with ESPHome for Assist."
+date: 2024-05-01 00:00:00
+date_formatted: "May 1, 2024"
+author: Franck Nijhof
+author_twitter: frenck
+comments: true
+categories:
+ - Release-Notes
+ - Core
+og_image: /images/blog/2024-05/social.png
+---
+
+
+
+Home Assistant Core 2024.5! 🎉
+
+The last two releases were massive! With our [new drag 'n drop dashboards](/blog/2024/03/06/release-20243/)
+and the tools to [organize your Home Assistant instance](/blog/2024/04/03/release-20244/),
+it is hard to top those releases... 😅
+
+So, this release is just a _tiny bit smaller_ than those two, but still epic! 🤘
+
+My personal favorite is the new features added to the data tables, which many
+of you requested since [the last update](/blog/2024/04/03/release-20244/#upgraded-tables).
+But the ability to change the names of the devices shown on the energy dashboard
+is a close second!
+
+Oh! We've held our [State of the Open Home 2024 live stream](https://www.youtube.com/watch?v=oa__fLArsFk)!
+In case you've missed it, I would definitely recommend watching it back. There are tons of cool things
+and spoilers in there!
+
+But more importantly, it launched the [Open Home Foundation](https://www.openhomefoundation.org/),
+which now governs our beloved Home Assistant project! ❤️ Read more in the [State of the Open Home 2024 blog post](/blog/2024/04/24/state-of-the-open-home-2024/).
+
+Anyway, I will not hold you any longer. Enjoy the release!
+
+../Frenck
+
+
+
+- [More features for our data tables](#more-features-for-our-data-tables)
+- [Create helpers directly from the automation editor](#create-helpers-directly-from-the-automation-editor)
+- [Lock features for the tile card](#lock-features-for-the-tile-card)
+- [Reorder features of the tile card](#reorder-features-of-the-tile-card)
+- [Adjust the device names on the energy dashboard](#adjust-the-device-names-on-the-energy-dashboard)
+- [Improved audio with ESPHome for Assist](#improved-audio-with-esphome-for-assist)
+- [Other noteworthy changes](#other-noteworthy-changes)
+- [New integrations](#new-integrations)
+- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui)
+- [Need help? Join the community!](#need-help-join-the-community)
+- [Backward-incompatible changes](#backward-incompatible-changes)
+- [Farewell to the following](#farewell-to-the-following)
+- [All changes](#all-changes)
+
+Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=POXZWxMenx4)
+1 May 2024, at 20:00 GMT / 12:00 PST / 21:00 CEST!
+
+
+
+## More features for our data tables
+
+In our last release, we [introduced new data tables](/blog/2024/04/03/release-20244/#upgraded-tables)
+and we were thrilled to see that you all loved them! 🎉
+
+However, we also received a lot of feedback for additional tweaks and features,
+so we've added a bunch of them in this release. 😎
+
+One of the most requested features of these new tables' new
+[item grouping](/blog/2024/04/03/release-20244/#item-grouping) was the
+ability to collapse them, and we’ve added that!
+
+
+
+ Each item group can now be collapsed and expanded.
+
+
+Another one concerned the ability to select and assign an area to multiple items
+at once in the automation, scene, script, and device pages. We've added that too!
+
+Not only that, we now store the last used grouping (and if they were
+collapsed or not) and sorting you have used, so when you return to that page,
+it will be the same as you left it.
+
+
+
+Last but certainly not least, we’ve added the ability to group and filter
+entities by their domain in the entities panel. As the domains represent the
+type of entity, this means you can group and filter, for example, all your
+lights, switches, sensors, etc.
+
+
+
+## Create helpers directly from the automation editor
+
+Our good friend [@karwosts] has been busy creating a great quality-of-life
+improvement for our {% term automation %} editor for this release.
+
+I'm sure you'll know this feeling. You are creating an automation and think:
+"Hey, I need a helper for this!" But then you have to leave the automation
+editor, create the helper, and then go back to the automation editor.
+
+Well, not anymore! You can now create helpers directly from the automation
+editor 😎
+
+In this example, a timer helper is created directly from the automation editor
+without leaving it:
+
+
+
+[@karwosts]: https://github.com/karwosts
+
+## Lock features for the tile card
+
+The tile card is already amazing, but [@marcgeurts] made it even better by
+adding new features to the tile card: Locks!
+
+When you now add a lock entity to the tile card, and if your lock supports it,
+you can now add two new features to the tile card:
+
+- [**Lock commands**](/dashboards/features/#lock-commands)
+ Adds buttons to your tile card to lock or unlock the lock.
+- [**Lock open door**](/dashboards/features/#lock-open-door)
+ Adds a button to open/unlatch the door (with confirmation).
+
+
+
+[@marcgeurts]: https://github.com/marcgeurts
+
+## Reorder features of the tile card
+
+Some features of the tile card, such as the presets or the HVAC modes of a
+thermostat, can show many buttons. While you can limit the buttons you’d
+like to see, they may not be in the desired order.
+
+To improve this, [@karwosts] and [@piitaya] have added the ability to reorder
+the features of the tile card. For your thermostat, that means you can now
+reorder the HVAC modes or presets to your liking.
+
+
+
+ You can now reorder the features of the tile card.
+
+
+[@karwosts]: https://github.com/karwosts
+[@piitaya]: https://github.com/piitaya
+
+## Adjust the device names on the energy dashboard
+
+Another outstanding quality-of-life improvement from [@karwosts] is the ability
+to customize the display name for energy devices on the energy dashboard.
+
+The entity's name representing the device you use on the energy dashboard
+commonly contains additional or redundant information. With this new feature,
+you can customize the display name to make it more meaningful.
+
+For example, if the entity is named _“Attic Boiler Daily Energy Usage”_
+and is shown as that today, you can now change the name displayed on the energy
+dashboard to just _“Boiler”_.
+
+
+
+You can adjust the name of each monitored device in the energy dashboard setting
+page by going to **Settings** > **Dashboards** > **Energy** > **Individual devices**.
+
+{% my config_energy badge %}
+
+[@karwosts]: https://github.com/karwosts
+
+## Improved audio with ESPHome for Assist
+
+If you're familiar with [Assist], our private voice assistant, and are using
+it on an [ESPHome-based device] (like an [ESP-S3-BOX-3] or the [ATOM Echo]),
+chances are you have experienced one of the biggest barriers to date when it
+comes to using it on a daily basis: chopped-off audio. 😞
+
+More often than not, the responses sent to the voice assistant device were
+missing a few parts, most notably at the beginning and the end of the audio.
+This was very noticeable when the responses were short, such as asking how many
+lights are on in a home or the room temperature.
+
+In conjunction with [the latest release of ESPHome] (2024.4), we are bringing
+a much improved and more reliable communication between [ESPHome] and
+Home Assistant for transferring voice audio, guaranteeing no audio is lost in the process.
+
+Hear the difference in this side-by-side comparison:
+
+
+
+In addition to updating to this release, be sure to update your ESPHome devices
+to the latest version to benefit from this improvement.
+
+[Assist]: /voice_control/
+[ATOM Echo]: /voice_control/thirteen-usd-voice-remote/
+[ESP-S3-BOX-3]: /voice_control/s3_box_voice_assistant/
+[ESPHome-based device]: https://esphome.io/projects/
+[ESPHome]: https://esphome.io/
+[the latest release of ESPHome]: https://esphome.io/changelog/2024.4.0.html
+[to the latest version]: https://esphome.io/changelog/2024.4.0.html
+
+## Other noteworthy changes
+
+There are many more improvements in this release; here are some of the other
+noteworthy changes this release:
+
+- Have you ever had a misbehaving (custom) integration cause a crash? This
+ release introduces new detections and [a new debug mode] to catch known/common
+ unexpected integration behavior. Thanks, [@bdraco]!
+- The [ESPHome integration] now supports date, time, date/time, valve, and
+ event entities! The latter two require the upcoming [ESPHome] 2024.5.0
+ release. Thanks [@jesserockz], [@kbx81], and [@nohat]!
+- The [MQTT integration] has reached the highest quality scale: Platinum!
+ Thanks [@jbouwh], for all the work you have put into this!
+- The visualization graph for all Zigbee devices connected via [ZHA] has been
+ improved by [@Cougar]. Devices now have colors to indicate their availability,
+ signal strength, and relationship to other devices, which are much clearer.
+ Nice!
+- The [Glances integration] got new sensors for network traffic, disk I/O, GPU,
+ and uptime. Thanks [@fhoekstra] & [@wittypluck]!
+- [@Lash-L] added a service to the [Roborock integration] to easily get map
+ information from your vacuum. Awesome!
+- The [Airzone cloud integration] now supports water heaters. Thanks [@Noltari]!
+- [@joostlek] added an extract media URL service to the [media extractor],
+ allowing you to get a media item's source URL. Nice!
+
+[@bdraco]: https://github.com/bdraco
+[@Cougar]: https://github.com/Cougar
+[@fhoekstra]: https://github.com/fhoekstra
+[@jbouwh]: https://github.com/jbouwh
+[@jesserockz]: https://github.com/jesserockz
+[@joostlek]: https://github.com/joostlek
+[@kbx81]: https://github.com/kbx81
+[@Lash-L]: https://github.com/Lash-L
+[@nohat]: https://github.com/nohat
+[@Noltari]: https://github.com/Noltari
+[@wittypluck]: https://github.com/wittypluck
+[a new debug mode]: /integrations/homeassistant/#debug
+[Airzone cloud integration]: /integrations/airzone_cloud
+[ESPHome integration]: /integrations/esphome
+[ESPHome]: https://esphome.io/
+[Glances integration]: /integrations/glances
+[media extractor]: /integrations/media_extractor
+[MQTT integration]: /integrations/mqtt
+[Roborock integration]: /integrations/roborock
+[ZHA]: /integrations/zha
+
+## New integrations
+
+We welcome the following new {% term integrations %} in this release:
+
+- **[Ambient Weather Network]**, added by [@thomaskistler]
+ Retrieve local weather station information from the Ambient Weather Network.
+- **[Arve]**, added by [@ikalnyi]
+ Monitor real-life air quality data from your Arve devices.
+- **[Energenie Power-Sockets]**, added by [@gnumpi]
+ Control your Energie Power-Strips over USB.
+- **[Epic Games Store]**, added by [@Quentame]
+ Provides a calendar for the Epic Games Store to monitor discounts and free games.
+- **[eQ-3 Bluetooth Smart Thermostats]**, added by [@EuleMitKeule]
+ Control your eQ-3 Smart Thermostats over Bluetooth.
+- **[Sanix]**, added by [@tomaszsluszniak]
+ Monitor water/sewage level using your Sanix (by BIT Complex) devices.
+
+[@EuleMitKeule]: https://github.com/EuleMitKeule
+[@gnumpi]: https://github.com/gnumpi
+[@ikalnyi]: https://github.com/ikalnyi
+[@Quentame]: https://github.com/Quentame
+[@thomaskistler]: https://github.com/thomaskistler
+[@tomaszsluszniak]: https://github.com/tomaszsluszniak
+[Ambient Weather Network]: /integrations/ambient_network
+[Arve]: /integrations/arve
+[Energenie Power-Sockets]: /integratoins/egps
+[Epic Games Store]: /integrations/epic_games_store
+[eQ-3 Bluetooth Smart Thermostats]: /integrations/eq3btsmart
+[Sanix]: /integrations/sanix
+
+## Integrations now available to set up from the UI
+
+The following {% term integrations %} are now available via the Home Assistant UI:
+
+- **[Enigma2 (OpenWebif)]**, done by [@autinerd]
+- **[Folder watcher]**, done by [@gjohansson-ST]
+- **[LG Netcast]**, done by [@splinter98]
+
+[@autinerd]: https://github.com/autinerd
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@splinter98]: https://github.com/splinter98
+[Enigma2 (OpenWebif)]: /integrations/enigma2
+[Folder watcher]: /integrations/folder_watcher
+[LG Netcast]: /integrations/lg_netcast
+
+## Need help? Join the community!
+
+Home Assistant has a great community of users who are all more than willing
+to help each other out. So, join us!
+
+Our very active [Discord chat server](/join-chat) is an excellent place to be
+at, and don't forget to join our amazing [forums](https://community.home-assistant.io/).
+
+Found a bug or issue? Please report it in our [issue tracker](https://github.com/home-assistant/core/issues),
+to get it fixed! Or, check [our help page](/help) for guidance for more
+places you can go.
+
+Are you more into email? [Sign-up for our Building the Open Home Newsletter](/newsletter)
+to get the latest news about features, things happening in our community and
+other news about building an Open Home; straight into your inbox.
+
+## Backward-incompatible changes
+
+{% details "AVM Fritz!SmartHome" %}
+
+Activating the HVAC mode `heat` no longer overwrites the current target
+temperature with the comfort temperature but retains the currently set target
+temperature unless the thermostat is in HVAC mode `off`, in which case the
+comfort temperature is still set.
+
+Use the available presets or the set temperature service to set the target
+temperature for HVAC-mode `heat`.
+
+([@jayme-github] - [#112119]) ([documentation](/integrations/fritzbox))
+
+[@jayme-github]: https://github.com/jayme-github
+[#112119]: https://github.com/home-assistant/core/pull/112119
+
+{% enddetails %}
+
+{% details "Big Ass Fans" %}
+
+The BAF fan `Auto` preset mode has been renamed to `auto`. Any scripts
+or automations using this need to be updated accordingly.
+
+([@mill1000] - [#109944]) ([documentation](/integrations/baf))
+
+[@mill1000]: https://github.com/mill1000
+[#109944]: https://github.com/home-assistant/core/pull/109944
+
+{% enddetails %}
+
+{% details "ecobee" %}
+
+The preset modes `Away`, `Home`, and `Sleep` have been renamed to the lower-case
+variants `away`, `home`, and `sleep`.
+
+This is consistent with the rest of Home Assistant, which also means
+Home Assistant can support icons and translations for these.
+
+If you used these preset modes in your automations or scripts, you will need
+to update them to use the new names.
+
+([@gagebenne] - [#116072]) ([documentation](/integrations/ecobee))
+
+[@gagebenne]: https://github.com/gagebenne
+[#116072]: https://github.com/home-assistant/core/pull/116072
+
+{% enddetails %}
+
+{% details "Honeywell Total Connect Comfort (US)" %}
+
+The auxiliary heat climate option has been deprecated and will be removed in
+Home Assistant 2024.10.
+
+Use the newly added emergency heat switch entity to set the thermostat mode
+to the previous auxiliary heat mode.
+
+([@mkmer] - [#114110]) ([documentation](/integrations/honeywell))
+
+[@mkmer]: https://github.com/mkmer
+[#114110]: https://github.com/home-assistant/core/pull/114110
+
+{% enddetails %}
+
+{% details "IMAP" %}
+
+The default for new entries is that the `text` and `headers` will no longer be
+included in the `imap_content` event data. Instead, if needed, you can fetch
+the email content using the `imap.fetch` service.
+
+It will not break for existing entries where we assume `text` and `headers`
+are included.
+
+([@luca-angemi] - [#115108]) ([documentation](/integrations/imap))
+
+[@luca-angemi]: https://github.com/luca-angemi
+[#115108]: https://github.com/home-assistant/core/pull/115108
+
+{% enddetails %}
+
+{% details "Insteon" %}
+
+The Insteon configuration panel, which was previously on the Home Assistant
+sidebar, has moved to the integration page in
+**Settings -> Device & services -> Insteon -> Configure**.
+
+([@teharris1] - [#105581]) ([documentation](/integrations/insteon))
+
+[@teharris1]: https://github.com/teharris1
+[#105581]: https://github.com/home-assistant/core/pull/105581
+
+{% enddetails %}
+
+{% details "Netatmo" %}
+
+The state of the Netatmo wind and gust direction sensor provided by
+the weather station now exposes the state in lowercase.
+
+([@joostlek] - [#115413]) ([documentation](/integrations/netatmo))
+
+[@joostlek]: https://github.com/joostlek
+[#115413]: https://github.com/home-assistant/core/pull/115413
+
+---
+
+The state of the Netatmo health index sensor provided by the weather station
+now exposes the state in lowercase.
+
+([@joostlek] - [#115409]) ([documentation](/integrations/netatmo))
+
+[@joostlek]: https://github.com/joostlek
+[#115409]: https://github.com/home-assistant/core/pull/115409
+
+{% enddetails %}
+
+{% details "Recorder" %}
+
+Previously, `recorder.purge_entities` called with no arguments would purge all
+entities. This PR makes this call raise an error instead.
+
+It was too easy for users to accidentally purge their entire database using the
+old logic. Users who want to purge all entities can still use
+the `recorder.purge` service to achieve the same effect, and that service
+is more obvious in how it behaves.
+
+([@karwosts] - [#110066]) ([documentation](/integrations/recorder))
+
+[@karwosts]: https://github.com/karwosts
+[#110066]: https://github.com/home-assistant/core/pull/110066
+
+{% enddetails %}
+
+{% details "Traccar Server" %}
+
+The following attributes have been removed from `device_tracker` entities
+provided by the Traccar server integration:
+
+- `address`
+- `altitude`
+- `battery_level`
+- `geofence`
+- `speed`
+
+All of these are now dedicated sensor entities that you can enable.
+
+([@ludeeus] - [#111374]) ([documentation](/integrations/traccar_server))
+
+[@ludeeus]: https://github.com/ludeeus
+[#111374]: https://github.com/home-assistant/core/pull/111374
+
+---
+
+The following attributes have been removed from `device_tracker` entities
+provided by the Traccar server integration:
+
+- `motion`
+- `status`
+
+All of these are now dedicated binary sensor entities that you can enable.
+
+([@ludeeus] - [#114719]) ([documentation](/integrations/traccar_server))
+
+[@ludeeus]: https://github.com/ludeeus
+[#114719]: https://github.com/home-assistant/core/pull/114719
+
+{% enddetails %}
+
+If you are a custom integration developer and want to learn about breaking
+changes and new features available for your integration: Be sure to follow our
+[developer blog][devblog]. The following are the most notable for this release:
+
+- [Always reload after a successful re-auth flow](https://developers.home-assistant.io/blog/2024/04/25/always-reload-after-successful-reauth-flow)
+- [Deprecate old backports and typing alias](https://developers.home-assistant.io/blog/2024/04/08/deprecated-backports-and-typing-aliases/)
+- [Deprecating `async_add_hass_job`](https://developers.home-assistant.io/blog/2024/04/07/deprecate_add_hass_job/)
+- [New notify entity platform](https://developers.home-assistant.io/blog/2024/04/10/new-notify-entity-platform/)
+- [Replacing `async_track_state_change` with `async_track_state_change_event`](https://developers.home-assistant.io/blog/2024/04/13/deprecate_async_track_state_change/)
+- [Store runtime data inside the config entry](https://developers.home-assistant.io/blog/2024/04/30/store-runtime-data-inside-config-entry/)
+
+[devblog]: https://developers.home-assistant.io/blog/
+
+## Farewell to the following
+
+The following {% term integrations %} are also no longer available as of this
+release:
+
+- **Epson Workforce** has been removed. The source package/dependency this
+ integration uses, is no longer available.
+ ([@joostlek] - [#115201])
+
+[@joostlek]: https://github.com/joostlek
+[#115201]: https://github.com/home-assistant/core/pull/115201
+
+## All changes
+
+Of course, there is a lot more in this release. You can find a list of
+all changes made here: [Full changelog for Home Assistant Core 2024.5](/changelogs/core-2024.5)
diff --git a/source/_posts/2024-16-03-voice-assistant-community-contest-winners-annoucement.markdown b/source/_posts/2024-16-03-voice-assistant-community-contest-winners-annoucement.markdown
new file mode 100644
index 000000000000..e629e1e76405
--- /dev/null
+++ b/source/_posts/2024-16-03-voice-assistant-community-contest-winners-annoucement.markdown
@@ -0,0 +1,129 @@
+---
+layout: post
+title: "And the winners of our voice assistant community contest are 🥁 ..."
+description: "We organized a voice assistant contest. Here are the winners!"
+date: 2024-03-16 00:00:01
+date_formatted: "March 16, 2024"
+author: Jean-Loïc Pouffier
+comments: true
+categories: Assist
+og_image: /images/blog/2024-01-11-voice-assistant-contest/banner.png
+---
+
+
+
+2023 was the [Year of the Voice](/blog/2022/12/20/year-of-voice/). It was a yearly goal to let users control Home Assistant in their own language. We organized a contest to celebrate what our voice assistants could enable with the community. The contest entries have been all amazing, the work produced outstanding. Personally, I learnt so much just reviewing all the entries, I learnt that our community is so creative and relentless. My personal project list grew quite a lot as I want to implement half of the entries at home! Today is the day we announce the winners!
+
+
+
+It is important to note that while Year of the Voice is over, voice is now part of Home Assistant just like automations or dashboards.
+The sharp focus is over, but voice will get updates forever, just like every other part of Home Assistant.
+
+The contest was split into 4 categories:
+
+- Most creative satellite ideas
+- Best Starting Guides
+- Best events organized, best group effort
+- Best voice experiences
+
+You can read more about the contest specifics in the [blog post announcing the contest](/blog/2024/01/17/voice-assistant-contest/).
+
+Due to a lack of entries, we removed the category “Best events organized, best group effort”.
+
+
+## Most creative satellite ideas
+
+The competition was the most fierce in that category!
+
+On the one hand, it pleases me to see how many of you managed to create something unique, quirky, and creative using our voice assistant functionalities. This means that our voice assistant is indeed aligned with our value of Choice. On the other hand, it made picking a winner even more complex 😬.
+
+So without further ado, the winner of the “most creative satellite ideas” category is [dirtyharriv](https://community.home-assistant.io/u/dirtyharriv) and their [Bender Voice Assistant](https://community.home-assistant.io/t/bender-voice-assistant/682041).
+
+Congratulations on your entry! Your voice assistant embodies perfectly what we think when we talk about choice: Custom wake word, custom voice, in-character responses, a beautiful 3D printed case, LEDs… It’s perfect!
+
+
+
+**[Dirtyharriv](https://community.home-assistant.io/u/dirtyharriv) wins a Home Assistant Green, a Home Assistant SkyConnect, and a spot on our livestream on the 10th of April to present their project!**
+
+We also have a lot of runners-up in this category, **they all win a Home Assistant SkyConnect!**
+
+- [Smartsaver](https://community.home-assistant.io/u/smartsaver) with their [Assist Mirror Satellite](https://community.home-assistant.io/t/assist-mirror-satellite/699264).
+- [Abrakhim](https://community.home-assistant.io/u/abrakhim) with their [R2D2 Satellite](https://community.home-assistant.io/t/r2d2-satellite/690701).
+- [Journeywithlogan](https://community.home-assistant.io/u/journeywithlogan) with their [LOLA59 Voice Assistant](https://community.home-assistant.io/t/lola59-voice-assistant-multisensor-apple-airplay/701723).
+- [DaWheelz](https://community.home-assistant.io/u/DaWheelz) with their [Jarvis Assistant](https://community.home-assistant.io/t/jarvis-assistant/695720).
+- [Johnd126](https://community.home-assistant.io/u/johnd126) with their [Old timey radio](https://community.home-assistant.io/t/my-old-timey-radio-voice-assistant-satellite-contest-entry/698238).
+- [NonaSuomy](https://community.home-assistant.io/u/NonaSuomy) with their [Vector voice assistant](https://community.home-assistant.io/t/vector-home-assistant-control/675165).
+- [Tesat](https://community.home-assistant.io/u/Tesat) with their [SmoT robot](https://community.home-assistant.io/t/smot-your-homeassistant-companion-robot/696369).
+- [MetalOnes](https://community.home-assistant.io/u/MetalOnes) with their [Vintage Radio](https://community.home-assistant.io/t/vintage-radio-voice-assistant/699049).
+- [Ejlane](https://community.home-assistant.io/u/ejlane) with their [Death Star Voice Assistant](https://community.home-assistant.io/t/death-star-voice-assistant/701706).
+- [Tpage](https://community.home-assistant.io/u/tpage) with their [Egg Voice Assistant](https://community.home-assistant.io/t/egg-voice-assistant/698819).
+
+## Best Starting Guides
+
+Again, lots of entries in this category, it amazes me to see how many of you tried hard to provide something that could be re-used by other members of the community, whether it was a device that you can purchase, hack, or build yourself, or a series of videos you can follow to set something up in your own home.
+
+Building something is already hard, but building something to offer it to others is even harder. This category was, to me, the category with the biggest amount of work done by the contestants, congratulations to you all.
+
+The winner of the “best starting guides” category is [landonr](https://community.home-assistant.io/u/landonr) with their [homeThing S3](https://community.home-assistant.io/t/homething-s3-ipod-smart-home-remote-with-voice-control/702666).
+
+The homeThing blew us away, it's an iPod-style remote for your home that ticks so many boxes: Rotary dial, screen, IR blaster, microphone, speaker, battery ...
+
+Everything is open source, up to the custom PCB that [landonr](https://community.home-assistant.io/u/landonr) created. The ESPHome configuration is open source. This is the perfect device to have in your home!
+
+
+
+**[Landonr](https://community.home-assistant.io/u/landonr) wins a Home Assistant Green, a Home Assistant SkyConnect, and a spot on our livestream on the 10th of April to present their project!**
+
+We also have a few runners-up in this category, **they all win a Home Assistant SkyConnect!**
+
+- [FutureProofHomes](https://community.home-assistant.io/u/FutureProofHomes) and their [video series on the Wyoming protocol](https://community.home-assistant.io/t/futureproofhomes-wyoming-enhancements-yt-series-contest-entry/693723).
+- [Thorsten-voice](https://community.home-assistant.io/u/thorsten-voice) and their [tutorial series “Home Assistant ❤️ Voice”](https://community.home-assistant.io/t/yt-tutorial-series-home-assistant-voice-cooking-recipe-style/696644).
+- [Thatguy_za](https://community.home-assistant.io/u/thatguy_za) and their [simple ESP32 voice assistant](https://community.home-assistant.io/t/my-esp32-based-voice-assistant-with-wake-word/697153).
+
+## Best voice experiences
+
+This category was not about hardware, it was about providing the best software experience that elevates the voice experience in Home Assistant. I had the most fun reviewing this category because most of the entries can be re-used at home without any particular hardware! Instant improvement of my system!
+
+The winner of the “best voice experiences” category is [dinki](https://community.home-assistant.io/u/dinki) with their [View Assist](https://community.home-assistant.io/t/view-assist-visual-feedback-for-assist-voice-assistant-on-an-android-tablet-install-info-provided-on-wiki/699659).
+
+View Assist is a complete UI for Assist running on an old Android tablet that tries to replicate the UI of devices such as an Amazon Echo Show. It is very complete and well-documented, and I think can be a candidate for fully replacing a screen-based voice assistant such as an Amazon Echo Show or a Google Nest Hub.
+
+
+
+**[Dinki](https://community.home-assistant.io/u/dinki) wins a Home Assistant Green, a Home Assistant SkyConnect, and a spot on our livestream on the 10th of April to present their project!**
+
+We also have a lot of runners-up in this category, **they all win a Home Assistant SkyConnect!**
+
+- [ACiDGRiM](https://community.home-assistant.io/u/ACiDGRiM) and their [NodeRed ChatGPT-powered bedtime story agent](https://community.home-assistant.io/t/replace-yourself-with-ai-nodered-bedtime-story-from-chatgpt/699843).
+- [Lajos](https://community.home-assistant.io/u/Lajos) and their [improvement of the S3 Box firmware to display text](https://community.home-assistant.io/t/a-jrpg-style-conversation-with-the-voice-assistant-on-the-s3-box-3/697172).
+- [Amorfinv](https://community.home-assistant.io/u/amorfinv) and their [dice-activated voice assistant](https://community.home-assistant.io/t/dice-activated-voice-assistant/680506).
+- [JT1](https://community.home-assistant.io/u/JT1) and their [implementation of reminders in assist](https://community.home-assistant.io/t/local-voice-reminders-created-with-assist/698875).
+- [Nfragment](https://community.home-assistant.io/u/nfragment) and their [Linux UI using wyoming satellite](https://community.home-assistant.io/t/advanced-virtual-assistant-using-linux-as-a-wyoming-satellite/702013).
+- [DonNL](https://community.home-assistant.io/u/DonNL) and their [simple Assist goodnight routine](https://community.home-assistant.io/t/voice-assistent-contest-assist-goodnight-routine-for-everyone/676224).
+- [Richard_Albritton](https://community.home-assistant.io/u/Richard_Albritton) and their [cute Executive Dysfunction Automated Audio Medication Reminder monster](https://community.home-assistant.io/t/executive-dysfunction-automated-audio-medication-reminder-proof-of-concept/700668).
+- [Wishy](https://community.home-assistant.io/u/wishy) and their [food label printing solution](https://community.home-assistant.io/t/food-labels-via-a-dymo-label-printer/701986).
+
+I want to give a small shout-out to one of the runner-up: [Lajos](https://community.home-assistant.io/u/Lajos) and their [improvement of the S3 Box firmware to display text](https://community.home-assistant.io/t/a-jrpg-style-conversation-with-the-voice-assistant-on-the-s3-box-3/697172), you did something I personally considered impossible in the S3 box, and never tried to implement it because of this false assumption. Seeing your entry pushed me to give it a try and I am happy to announce that [very soon](https://github.com/esphome/firmware/pull/177), the official voice assistant firmware for the S3 boxes will allow everyone to display the spoken text of the request and the response on the screen.
+
+## Community choice
+
+We also asked you to vote for your favorite entry, the votes were fierce but one entry skyrocketed above the rest.
+
+It is my pleasure to announce that the community vote is [Rellu](https://community.home-assistant.io/u/Rellu) and their [HA-Visual-Voice-Assistant](https://community.home-assistant.io/t/voice-assistant-contest-ha-visual-voice-assistant/687593).
+
+HA-Visual-Voice-Assistant is an impressive voice experience that creates on-the-fly AI-generated videos of characters as visual feedback for Assist. The video that [Rellu](https://community.home-assistant.io/u/Rellu) provides in his entry is really complete, with the ability to change characters and language directly via voice. Great job!
+
+
+
+**[Rellu](https://community.home-assistant.io/u/Rellu) wins a Home Assistant Green, a Home Assistant SkyConnect, and a spot on our livestream on the 10th of April to present their project!**
+
+## Thank you
+
+Thank you to the Home Assistant community for subscribing to [Home Assistant Cloud](https://www.nabucasa.com/) to support Year of the Voice and the development of Home Assistant, ESPHome, and other projects in general.
+
+We will contact all winners and runners-up in the next few days to organize shipping.
+We are looking forward to having the winners on the livestream with us on the 10th of April.
+
+I hope you enjoyed this first Home Assistant contest, rest assured that it won’t be the last.
+
+JLo, Over and Out.
\ No newline at end of file
diff --git a/source/_redirects b/source/_redirects
index 8dca5272e139..bafbee11a592 100644
--- a/source/_redirects
+++ b/source/_redirects
@@ -4,7 +4,7 @@ layout: null
# These redirects are handled by Netlify
#
-{% assign recent_release_post = site.categories['Core'].first %}
+{% assign release_notes = site.categories['Release-Notes'] %}
# General use redirects
/join-chat https://discord.gg/home-assistant
@@ -18,9 +18,9 @@ layout: null
/community https://community.home-assistant.io/
/latest-security-alert /security/
-# Link to latest release note
-/latest-release-notes/ {{ recent_release_post.url }}{{ site.patch_version_notes }} 302!
-
+# Link to latest release notes
+/latest-release-notes/ {{ release_notes | where: "categories", "Core" | map: 'url' | first }}{{ site.patch_version_notes }} 302!
+/latest-ios-release-notes/ {{ release_notes | where: "categories", "iOS" | map: 'url' | first }} 302!
# Matter workshop June 2022
/skyconnect-interest https://docs.google.com/forms/d/e/1FAIpQLScEjHSBJszUZfgO3MIDO51IHr3Oeohcs8BLpRIjY1liJ58IpA/viewform?usp=sf_link
@@ -34,6 +34,9 @@ layout: null
/yellow https://yellow.home-assistant.io
/blog/2021/09/13/home-assistant-amber/ /blog/2021/09/13/home-assistant-yellow/
+# User research
+/join-research https://forms.clickup.com/2533032/f/2d9n8-12931/52N1KK00E9BXEW71TN
+
# Older development pages
/developers https://developers.home-assistant.io
/developers/add_new_platform https://developers.home-assistant.io/docs/creating_platform_index/
@@ -205,7 +208,6 @@ layout: null
/components/image_processing.* /integrations/:splat
/components/light.* /integrations/:splat
/components/lock.* /integrations/:splat
-/components/mailbox.* /integrations/:splat
/components/media_player.* /integrations/:splat
/components/notify.* /integrations/:splat
/components/remote.* /integrations/:splat
@@ -251,12 +253,22 @@ layout: null
/docs/assist/using_voice_assistants_overview/ /voice_control/
/docs/assist/voice_remote_expose_devices/ /voice_control/voice_remote_expose_devices/
/docs/assist/voice_remote_local_assistant/ /voice_control/voice_remote_local_assistant/
+# Redirect for the QR Codes on the S3 Box
+/s3-box-no-wifi /voice_control/troubleshooting_the_s3_box/#error-unable-to-connect-to-wi-fi
+/s3-box-no-ha /voice_control/troubleshooting_the_s3_box/#error-no-home-assistant
+
/docs/assist/troubleshooting/ /voice_control/troubleshooting/
/docs/assist/worlds-most-private-voice-assistant/ /voice_control/worlds-most-private-voice-assistant/
/projects/worlds-most-private-voice-assistant/ /voice_control/worlds-most-private-voice-assistant/
/docs/assist/thirteen-usd-voice-remote/ /voice_control/thirteen-usd-voice-remote/
+/draw_assist /voice_control/s3-box-customize/#to-draw-your-own-images
/projects/thirteen-usd-voice-remote/ /voice_control/thirteen-usd-voice-remote/
/docs/backend/updater /integrations/analytics
+/docs/configuration/basic/#allowlist_external_urls /integrations/homeassistant/#allowlist_external_urls
+/docs/configuration/basic/#allowlist_external_dirs /integrations/homeassistant/#allowlist_external_dirs
+/docs/configuration/basic/#external_urls /integrations/homeassistant/#external_urls
+/docs/configuration/customizing-devices/#device-class /integrations/homeassistant/#device-class
+/docs/configuration/customizing-devices/#customizing-entities /integrations/homeassistant/#editing-the-entity-settings-in-yaml
/docs/ecosystem/ios/ https://companion.home-assistant.io/
/docs/ecosystem/ios/devices_file https://companion.home-assistant.io/
/docs/ecosystem/ios/integration https://companion.home-assistant.io/docs/integrations/integrations
@@ -323,7 +335,6 @@ layout: null
/getting-started/automation-trigger /docs/automation/trigger
/getting-started/automation-templating /docs/automation/templating
/getting-started/basic /docs/configuration/basic
-/getting-started/browsers /docs/frontend/browsers
/getting-started/customizing-devices /docs/configuration/customizing-devices
/getting-started/installation /docs/installation
/getting-started/installation-docker /docs/installation/docker
@@ -351,6 +362,8 @@ layout: null
/topics/state_object /docs/configuration/state_object
/topics/templating /docs/configuration/templating
/common-tasks /common-tasks/os
+/common-tasks/os/#flashing-an-odroid-m1s /installation/odroid#flashing-an-odroid-m1s
+/common-tasks/os/#flashing-an-odroid-n2 /installation/odroid#flashing-an-odroid-n2
/docs/installation /installation
/docs/installation/docker /installation
/docs/installation/raspberry-pi /installation
@@ -461,19 +474,24 @@ 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
/state-of-the-union /blog/2019/11/22/state-of-the-union
/blog/2022/03/30/release-20224 /blog/2022/04/06/release-20224/
+/blog/2024/01/11/voice-assistant-contest /blog/2024/01/17/voice-assistant-contest
# Removed integrations
/integrations/alarmdotcom /more-info/removed-integration 301
/integrations/almond /more-info/removed-integration 301
/integrations/ambee /more-info/removed-integration 301
+/integrations/ambiclimate /more-info/removed-integration 301
/integrations/apns /more-info/removed-integration 301
/integrations/arlo /more-info/removed-integration 301
/integrations/arduino /more-info/removed-integration 301
+/integrations/asterisk_cdr /more-info/removed-integration 301
+/integrations/asterisk_mbox /more-info/removed-integration 301
/integrations/bbb_gpio /more-info/removed-integration 301
/integrations/bh1750 /more-info/removed-integration 301
/integrations/binary_sensor.mychevy /more-info/removed-integration 301
@@ -482,6 +500,7 @@ layout: null
/integrations/bme680 /more-info/removed-integration 301
/integrations/bmp280 /more-info/removed-integration 301
/integrations/bom /more-info/removed-integration 301
+/integrations/circuit /more-info/removed-integration 301
/integrations/ciscospark /more-info/removed-integration 301
/integrations/coinmarketcap /more-info/removed-integration 301
/integrations/coronavirus /more-info/removed-integration 301
@@ -498,8 +517,9 @@ 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/epsonworkforce /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
/integrations/flunearyou /more-info/removed-integration 301
/integrations/fortigate /more-info/removed-integration 301
@@ -518,15 +538,18 @@ layout: null
/integrations/hydroquebec /more-info/removed-integration 301
/integrations/ialarm_xr /more-info/removed-integration 301
/integrations/iota /more-info/removed-integration 301
+/integrations/life360 /more-info/removed-integration 301
/integrations/lifx_legacy /more-info/removed-integration 301
/integrations/linksys_ap /more-info/removed-integration 301
/integrations/linky /more-info/removed-integration 301
/integrations/liveboxplaytv /more-info/removed-integration 301
/integrations/lockitron /more-info/removed-integration 301
+/integrations/logi_circle /more-info/removed-integration 301
/integrations/loop_energy /more-info/removed-integration 301
/integrations/loopenergy /more-info/removed-integration 301
/integrations/lyft /more-info/removed-integration 301
/integrations/magicseaweed /more-info/removed-integration 301
+/integrations/mailbox /more-info/removed-integration 301
/integrations/mazda /more-info/removed-integration 301
/integrations/mcp23017 /more-info/removed-integration 301
/integrations/mhz19 /more-info/removed-integration 301
@@ -542,8 +565,10 @@ layout: null
/integrations/nuimo_controller /more-info/removed-integration 301
/integrations/openalpr /more-info/removed-integration 301
/integrations/openalpr_local /more-info/removed-integration 301
+/integrations/opencv /more-info/removed-integration 301
/integrations/orangepi_gpio /more-info/removed-integration 301
/integrations/ozw /more-info/removed-integration 301
+/integrations/panel_iframe /more-info/removed-integration 301
/integrations/pcal9535a /more-info/removed-integration 301
/integrations/pi4ioe5v9xxxx /more-info/removed-integration 301
/integrations/piglow /more-info/removed-integration 301
diff --git a/source/blueprints/integrations/traccar_server_device_enter_geofence.yaml b/source/blueprints/integrations/traccar_server_device_enter_geofence.yaml
new file mode 100644
index 000000000000..d35494b13352
--- /dev/null
+++ b/source/blueprints/integrations/traccar_server_device_enter_geofence.yaml
@@ -0,0 +1,52 @@
+blueprint:
+ name: Do something when a device enters a geofence
+ description: |
+ Requirements:
+ - The Traccar Server integration
+ - At least one device in Traccar that is tracked by that integration
+ - Configured geofences in Traccar
+ domain: automation
+ author: ludeeus
+ homeassistant:
+ min_version: 2024.5.0
+ input:
+ devices:
+ name: Device geofences
+ description: The Traccar sensor that holds the geofence you want to act upon
+ selector:
+ entity:
+ multiple: true
+ filter:
+ integration: "traccar_server"
+ domain: "sensor"
+ geofence:
+ name: Geofence
+ description: The name of the geofence
+ selector:
+ text:
+
+ conditions:
+ name: Conditions
+ description: |
+ Extra conditions you may want to add to this automation
+ (Example: Home occupied, TV on, etc)
+ default: []
+ selector:
+ condition:
+
+ actions:
+ name: Actions
+ description: |
+ What you want to do when a device enters the defined geofence
+ (Example: Notification, turn on lights etc.)
+ default: []
+ selector:
+ action:
+
+trigger:
+ - platform: state
+ entity_id: !input devices
+ to: !input geofence
+condition: !input conditions
+action: !input actions
+mode: queued
diff --git a/source/blueprints/integrations/traccar_server_device_speed_limit.yaml b/source/blueprints/integrations/traccar_server_device_speed_limit.yaml
new file mode 100644
index 000000000000..6159e66ee1fd
--- /dev/null
+++ b/source/blueprints/integrations/traccar_server_device_speed_limit.yaml
@@ -0,0 +1,51 @@
+blueprint:
+ name: Do something when a device are speeding
+ description: |
+ Requirements:
+ - The Traccar Server integration
+ - At least one device in Traccar that is tracked by that integration
+ domain: automation
+ author: ludeeus
+ homeassistant:
+ min_version: 2024.5.0
+ input:
+ devices:
+ name: Devices
+ description: The Traccar sensor that holds the speed you want to act upon
+ selector:
+ entity:
+ multiple: true
+ filter:
+ integration: "traccar_server"
+ domain: "sensor"
+ speed:
+ name: Geofence
+ description: The speed limit
+ selector:
+ number:
+
+ conditions:
+ name: Conditions
+ description: |
+ Extra conditions you may want to add to this automation
+ (Example: Home occupied, TV on, etc)
+ default: []
+ selector:
+ condition:
+
+ actions:
+ name: Actions
+ description: |
+ What you want to do when a device enters the defined geofence
+ (Example: Notification, turn on lights etc.)
+ default: []
+ selector:
+ action:
+
+trigger:
+ - platform: numeric_state
+ entity_id: !input devices
+ above: !input speed
+condition: !input conditions
+action: !input actions
+mode: queued
diff --git a/source/changelogs/core-2023.12.markdown b/source/changelogs/core-2023.12.markdown
index 6adeee604054..0ec4d13dcd5f 100644
--- a/source/changelogs/core-2023.12.markdown
+++ b/source/changelogs/core-2023.12.markdown
@@ -785,6 +785,119 @@ For a summary in a more readable format:
- Fix typo in v2c strings.json ([@lunmay] - [#105104])
- Bump intents to 2023.12.05 ([@synesthesiam] - [#105116])
+## Release 2023.12.1 - December 8
+
+- Initialize energy_state without price ([@Excentyl] - [#97031])
+- Bump yolink-api to 0.3.4 ([@matrixd2] - [#105124])
+- Bump apple_weatherkit to 1.1.2 ([@tjhorner] - [#105140])
+- Correct smtp error message string ([@jbouwh] - [#105148])
+- Expose todo entities to Assist by default ([@synesthesiam] - [#105150])
+- Disable scenarios (scenes) for local API in Overkiz ([@iMicknl] - [#105153])
+- Improve LIDL christmas light detection in deCONZ ([@Kane610] - [#105155])
+- Bump reolink_aio to 0.8.2 ([@starkillerOG] - [#105157])
+- Don't return TTS URL in Assist pipeline ([@synesthesiam] - [#105164])
+- Bump Météo-France to 1.3.0 ([@Quentame] - [#105170])
+- Fix ZHA quirk ID custom entities matching all devices ([@TheJulianJES] - [#105184])
+- Fix missing apostrophe in smtp ([@lunmay] - [#105189])
+- Set ping interval to 15 seconds instead of 5 minutes ([@nohn] - [#105191])
+- Increase ping update interval to 30 seconds ([@jpbede] - [#105199])
+- Fix bug in roon incremental volume control. ([@pavoni] - [#105201])
+- fix supportedFanOscillationModes is null ([@haimn] - [#105205])
+- Disable config flow progress in peco config flow ([@emontnemery] - [#105222])
+- Fix Fritzbox light setup ([@flabbamann] - [#105232])
+- Fix check_date service in workday ([@gjohansson-ST] - [#105241])
+- Fix AsusWrt invalid data type with tuple type ([@ollo69] - [#105247])
+- Explicit check for None in Discovergy entity if condition ([@jpbede] - [#105248])
+- Add migration for old HomeWizard sensors ([@DCSBL] - [#105251])
+- Fix update of uncategorized OurGroceries items ([@OnFreund] - [#105255])
+- Bump pyunifiprotect to 4.22.0 ([@bdraco] - [#105265])
+- Set device id and forward errors to Wyoming satellites ([@synesthesiam] - [#105266])
+- Fix mqtt json light state updates using deprecated color handling ([@jbouwh] - [#105283])
+- Always set _attr_current_option in Nobø Hub select entities ([@oyvindwe] - [#105289])
+- Update frontend to 20231208.2 ([@piitaya] - [#105299])
+- Add test for energy cost sensor for late price sensor ([@emontnemery] - [#105312])
+- Use area id for context instead of name ([@synesthesiam] - [#105313])
+- Add workaround for orjson not handling subclasses of str ([@emontnemery] - [#105314])
+- Add rollback on exception that needs rollback in SQL ([@gjohansson-ST] - [#104948])
+- Workaround `to_json` template filter in parsing dict key ([@jbouwh] - [#105327])
+- Bump plugwise to v0.34.5 ([@bouwew] - [#105330])
+
+## Release 2023.12.2 - December 13
+
+- Fix Lyric LCC thermostats auto mode ([@apt-itude] - [#104853])
+- Bump zeroconf to 0.128.0 ([@bdraco] - [#104936])
+- Fix CI test_invalid_rrule_fix test by freezing the time ([@jbouwh] - [#105294])
+- Add missing configuration for services.yaml in blink ([@mkmer] - [#105310])
+- Bump pyschlage to 2023.12.0 ([@dknowles2] - [#105349])
+- Fix preset modes error in Smartthings ([@gjohansson-ST] - [#105375])
+- Fix service missing key in Blink ([@mkmer] - [#105387])
+- Fix adding/updating todo items with due date in CalDAV integration ([@DerFlob] - [#105435])
+- Check if heat area exists when setting up valve opening and battery sensors in moehlenhoff alpha2 ([@j-a-n] - [#105437])
+- Bump hatasmota to 0.8.0 ([@emontnemery] - [#105440])
+- Bump plugwise to v0.35.3 ([@bouwew] - [#105442])
+- Fix alexa calling not featured cover services ([@jbouwh] - [#105444])
+- Fix fitbit oauth reauth debug logging ([@allenporter] - [#105450])
+- Write Enphase Envoy data to log when in debug mode ([@catsmanac] - [#105456])
+- Bump ical to 6.1.1 ([@allenporter] - [#105462])
+- Bump zeroconf to 0.128.4 ([@bdraco] - [#105465])
+- Remove Aftership import issue when entry already exists ([@joostlek] - [#105476])
+- Disconnect before reconnecting to satellite ([@synesthesiam] - [#105500])
+- Bump caldav to 1.3.8 ([@FrnchFrgg] - [#105508])
+- Bump pyhiveapi to v0.5.16 ([@KJonline] - [#105513])
+- Fix setup Fast.com ([@gjohansson-ST] - [#105580])
+- Add name slot to HassClimateGetTemperature intent ([@synesthesiam] - [#105585])
+- Skip TTS events entirely with empty text ([@synesthesiam] - [#105617])
+- Rename "satellite enabled" to "mute" ([@synesthesiam] - [#105619])
+- Fix timing issue in Withings ([@joostlek] - [#105203])
+- Update pylint to 3.0.3 ([@cdce8p] - [#105491])
+- Reload ZHA integration on any error, not just recoverable ones ([@puddly] - [#105659])
+- Bump ZHA dependencies ([@puddly] - [#105661])
+
+## Release 2023.12.3 - December 14
+
+- Ensure platform setup for all AVM FRITZ!SmartHome devices ([@mib1185] - [#105515])
+- Update AEMET-OpenData to v0.4.7 ([@Noltari] - [#105676])
+- Fix restoring UniFi clients with old unique id ([@Kane610] - [#105691])
+- Bump zeroconf to 0.128.5 ([@bdraco] - [#105694])
+- Add missing rest_command reload service to services.yaml ([@jpbede] - [#105714])
+- Fix issue clearing renault schedules ([@epenet] - [#105719])
+- Fix Fully Kiosk Browser MQTT event callbacks with non-standard event topics ([@cgarwood] - [#105735])
+- Disable user profiles on login screen ([@frenck] - [#105749])
+
+## Release 2023.12.4 - December 27
+
+- Pass timeout to httpx in RESTful Switch ([@vexofp] - [#105364])
+- Add Raspberry Pi 5 specific container image ([@agners] - [#105488])
+- Set todo item status in intent ([@synesthesiam] - [#105743])
+- Bump aioairzone to v0.7.0 ([@Noltari] - [#105807])
+- Update aioairzone to v0.7.2 ([@Noltari] - [#105811])
+- Fix HVAC mode duplication for Shelly Gen2 climate platform ([@bieniu] - [#105812])
+- Fix Airzone temperature range on new climate card ([@Noltari] - [#105830])
+- Bump pyunifiprotect to 4.22.3 ([@bdraco] - [#105833])
+- Address late review comments on AVM FRITZ!SmartHome ([@mib1185] - [#105860])
+- Set WiFi QR code entity to unknown when Fritzbox is not available ([@mib1185] - [#105870])
+- Bump reolink_aio to 0.8.3 ([@starkillerOG] - [#105489])
+- Bump reolink_aio to 0.8.4 ([@starkillerOG] - [#105946])
+- Bump motionblinds to 0.6.19 ([@starkillerOG] - [#105951])
+- Fix unreachable Netatmo sensor returning false values ([@cgtobi] - [#105954])
+- Add Raspberry Pi 5 to version and hardware integration ([@agners] - [#105992])
+- Bump blinkpy 0.22.4 ([@mkmer] - [#105993])
+- Don't fetch unchanged OurGroceries lists ([@OnFreund] - [#105998])
+- Bump pyatmo to 8.0.1 ([@cgtobi] - [#106094])
+- Bump surepy to 0.9.0 ([@benleb] - [#106101])
+- Bump pyenphase to 1.15.2 ([@bdraco] - [#106134])
+- Bump ZHA dependencies ([@puddly] - [#106147])
+- Bump life360 to 6.0.1 ([@pnbruckner] - [#106149])
+- Fix bug with non-existent Notion bridge IDs ([@bachya] - [#106152])
+- Fix Netatmo light switching states by assuming state until next update ([@cgtobi] - [#106162])
+- Bump Devialet to 1.4.4 ([@fwestenberg] - [#106171])
+- Bump ring-doorbell to 0.8.5 ([@sdb9696] - [#106178])
+- Bump Devialet to 1.4.5 ([@fwestenberg] - [#106184])
+- Bump aiopulse to 0.4.4 ([@atmurray] - [#106239])
+- Fix Shelly consumption_types ([@emontnemery] - [#106273])
+- Missing exception on relogin in Honeywell ([@mkmer] - [#106324])
+- Redact unique id from diagnostics in blink ([@mkmer] - [#106413])
+
[#101186]: https://github.com/home-assistant/core/pull/101186
[#101196]: https://github.com/home-assistant/core/pull/101196
[#101349]: https://github.com/home-assistant/core/pull/101349
@@ -1492,6 +1605,7 @@ For a summary in a more readable format:
[#104914]: https://github.com/home-assistant/core/pull/104914
[#104941]: https://github.com/home-assistant/core/pull/104941
[#104947]: https://github.com/home-assistant/core/pull/104947
+[#104948]: https://github.com/home-assistant/core/pull/104948
[#104961]: https://github.com/home-assistant/core/pull/104961
[#104966]: https://github.com/home-assistant/core/pull/104966
[#104972]: https://github.com/home-assistant/core/pull/104972
@@ -1511,6 +1625,39 @@ For a summary in a more readable format:
[#105099]: https://github.com/home-assistant/core/pull/105099
[#105104]: https://github.com/home-assistant/core/pull/105104
[#105116]: https://github.com/home-assistant/core/pull/105116
+[#105124]: https://github.com/home-assistant/core/pull/105124
+[#105135]: https://github.com/home-assistant/core/pull/105135
+[#105140]: https://github.com/home-assistant/core/pull/105140
+[#105148]: https://github.com/home-assistant/core/pull/105148
+[#105150]: https://github.com/home-assistant/core/pull/105150
+[#105153]: https://github.com/home-assistant/core/pull/105153
+[#105155]: https://github.com/home-assistant/core/pull/105155
+[#105157]: https://github.com/home-assistant/core/pull/105157
+[#105164]: https://github.com/home-assistant/core/pull/105164
+[#105170]: https://github.com/home-assistant/core/pull/105170
+[#105184]: https://github.com/home-assistant/core/pull/105184
+[#105189]: https://github.com/home-assistant/core/pull/105189
+[#105191]: https://github.com/home-assistant/core/pull/105191
+[#105199]: https://github.com/home-assistant/core/pull/105199
+[#105201]: https://github.com/home-assistant/core/pull/105201
+[#105205]: https://github.com/home-assistant/core/pull/105205
+[#105222]: https://github.com/home-assistant/core/pull/105222
+[#105232]: https://github.com/home-assistant/core/pull/105232
+[#105241]: https://github.com/home-assistant/core/pull/105241
+[#105247]: https://github.com/home-assistant/core/pull/105247
+[#105248]: https://github.com/home-assistant/core/pull/105248
+[#105251]: https://github.com/home-assistant/core/pull/105251
+[#105255]: https://github.com/home-assistant/core/pull/105255
+[#105265]: https://github.com/home-assistant/core/pull/105265
+[#105266]: https://github.com/home-assistant/core/pull/105266
+[#105283]: https://github.com/home-assistant/core/pull/105283
+[#105289]: https://github.com/home-assistant/core/pull/105289
+[#105299]: https://github.com/home-assistant/core/pull/105299
+[#105312]: https://github.com/home-assistant/core/pull/105312
+[#105313]: https://github.com/home-assistant/core/pull/105313
+[#105314]: https://github.com/home-assistant/core/pull/105314
+[#105327]: https://github.com/home-assistant/core/pull/105327
+[#105330]: https://github.com/home-assistant/core/pull/105330
[#71034]: https://github.com/home-assistant/core/pull/71034
[#71644]: https://github.com/home-assistant/core/pull/71644
[#72363]: https://github.com/home-assistant/core/pull/72363
@@ -1547,6 +1694,7 @@ For a summary in a more readable format:
[#95722]: https://github.com/home-assistant/core/pull/95722
[#95954]: https://github.com/home-assistant/core/pull/95954
[#96370]: https://github.com/home-assistant/core/pull/96370
+[#97031]: https://github.com/home-assistant/core/pull/97031
[#97280]: https://github.com/home-assistant/core/pull/97280
[#97553]: https://github.com/home-assistant/core/pull/97553
[#98164]: https://github.com/home-assistant/core/pull/98164
@@ -1558,45 +1706,8 @@ For a summary in a more readable format:
[#99438]: https://github.com/home-assistant/core/pull/99438
[#99450]: https://github.com/home-assistant/core/pull/99450
[#99500]: https://github.com/home-assistant/core/pull/99500
-[@Adi146]: https://github.com/Adi146
-[@Bre77]: https://github.com/Bre77
-[@CFenner]: https://github.com/CFenner
-[@Cereal2nd]: https://github.com/Cereal2nd
-[@CodingSquirrel]: https://github.com/CodingSquirrel
-[@DCSBL]: https://github.com/DCSBL
-[@Danielhiversen]: https://github.com/Danielhiversen
-[@Djelibeybi]: https://github.com/Djelibeybi
-[@Floyer007]: https://github.com/Floyer007
-[@FredericMa]: https://github.com/FredericMa
-[@GeoffAtHome]: https://github.com/GeoffAtHome
-[@Haerteleric]: https://github.com/Haerteleric
-[@Hejki]: https://github.com/Hejki
-[@IceBotYT]: https://github.com/IceBotYT
-[@IsakNyberg]: https://github.com/IsakNyberg
-[@Kane610]: https://github.com/Kane610
-[@KapJI]: https://github.com/KapJI
-[@Lash-L]: https://github.com/Lash-L
-[@MTrab]: https://github.com/MTrab
-[@Mappenhei]: https://github.com/Mappenhei
-[@Marco98]: https://github.com/Marco98
-[@MartinHjelmare]: https://github.com/MartinHjelmare
-[@MislavMandaric]: https://github.com/MislavMandaric
-[@MrBartusek]: https://github.com/MrBartusek
-[@Narmishka]: https://github.com/Narmishka
-[@Noltari]: https://github.com/Noltari
-[@OnFreund]: https://github.com/OnFreund
-[@ProstoSanja]: https://github.com/ProstoSanja
-[@Quentame]: https://github.com/Quentame
-[@Shulyaka]: https://github.com/Shulyaka
-[@Shutgun]: https://github.com/Shutgun
-[@Sibgatulin]: https://github.com/Sibgatulin
-[@StevenLooman]: https://github.com/StevenLooman
-[@TheJulianJES]: https://github.com/TheJulianJES
-[@TheKalpit]: https://github.com/TheKalpit
-[@Vaarlion]: https://github.com/Vaarlion
-[@ViViDboarder]: https://github.com/ViViDboarder
-[@Xitee1]: https://github.com/Xitee1
[@abmantis]: https://github.com/abmantis
+[@Adi146]: https://github.com/Adi146
[@akx]: https://github.com/akx
[@allenporter]: https://github.com/allenporter
[@apt-itude]: https://github.com/apt-itude
@@ -1604,6 +1715,7 @@ For a summary in a more readable format:
[@azogue]: https://github.com/azogue
[@balloob]: https://github.com/balloob
[@bdraco]: https://github.com/bdraco
+[@bdraco]: https://github.com/bdraco
[@bieniu]: https://github.com/bieniu
[@bilak]: https://github.com/bilak
[@blastoise186]: https://github.com/blastoise186
@@ -1611,21 +1723,29 @@ For a summary in a more readable format:
[@boswelja]: https://github.com/boswelja
[@bouwew]: https://github.com/bouwew
[@bramkragten]: https://github.com/bramkragten
+[@Bre77]: https://github.com/Bre77
[@c0ffeeca7]: https://github.com/c0ffeeca7
[@catsmanac]: https://github.com/catsmanac
[@ccrepin]: https://github.com/ccrepin
[@cdce8p]: https://github.com/cdce8p
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@CFenner]: https://github.com/CFenner
[@cgarwood]: https://github.com/cgarwood
[@cgtobi]: https://github.com/cgtobi
[@chrisx8]: https://github.com/chrisx8
+[@CodingSquirrel]: https://github.com/CodingSquirrel
[@codyc1515]: https://github.com/codyc1515
[@codyhackw]: https://github.com/codyhackw
[@coffeehorn]: https://github.com/coffeehorn
[@cronjefourie]: https://github.com/cronjefourie
+[@Danielhiversen]: https://github.com/Danielhiversen
[@davet2001]: https://github.com/davet2001
+[@DCSBL]: https://github.com/DCSBL
+[@DCSBL]: https://github.com/DCSBL
[@deosrc]: https://github.com/deosrc
[@dgomes]: https://github.com/dgomes
[@disforw]: https://github.com/disforw
+[@Djelibeybi]: https://github.com/Djelibeybi
[@dknowles2]: https://github.com/dknowles2
[@dotvav]: https://github.com/dotvav
[@dsypniewski]: https://github.com/dsypniewski
@@ -1635,59 +1755,99 @@ For a summary in a more readable format:
[@eifinger]: https://github.com/eifinger
[@elupus]: https://github.com/elupus
[@emontnemery]: https://github.com/emontnemery
+[@emontnemery]: https://github.com/emontnemery
[@engrbm87]: https://github.com/engrbm87
[@erwindouna]: https://github.com/erwindouna
+[@Excentyl]: https://github.com/Excentyl
[@farmio]: https://github.com/farmio
[@fb22]: https://github.com/fb22
[@fetzerch]: https://github.com/fetzerch
[@ffourcot]: https://github.com/ffourcot
+[@flabbamann]: https://github.com/flabbamann
+[@Floyer007]: https://github.com/Floyer007
+[@FredericMa]: https://github.com/FredericMa
+[@frenck]: https://github.com/frenck
[@frenck]: https://github.com/frenck
[@fwestenberg]: https://github.com/fwestenberg
[@gaaf]: https://github.com/gaaf
[@geirra]: https://github.com/geirra
+[@GeoffAtHome]: https://github.com/GeoffAtHome
[@gigatexel]: https://github.com/gigatexel
[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@gjohansson-ST]: https://github.com/gjohansson-ST
[@gladhorn]: https://github.com/gladhorn
[@glanch]: https://github.com/glanch
+[@Haerteleric]: https://github.com/Haerteleric
[@hahn-th]: https://github.com/hahn-th
+[@haimn]: https://github.com/haimn
+[@Hejki]: https://github.com/Hejki
[@hesselonline]: https://github.com/hesselonline
+[@IceBotYT]: https://github.com/IceBotYT
+[@iMicknl]: https://github.com/iMicknl
[@iMicknl]: https://github.com/iMicknl
+[@IsakNyberg]: https://github.com/IsakNyberg
[@jakubcermak]: https://github.com/jakubcermak
[@janiversen]: https://github.com/janiversen
[@jbouwh]: https://github.com/jbouwh
+[@jbouwh]: https://github.com/jbouwh
[@jflefebvre06]: https://github.com/jflefebvre06
[@jimmyd-be]: https://github.com/jimmyd-be
[@jmwhite5]: https://github.com/jmwhite5
[@joostlek]: https://github.com/joostlek
[@joseph39]: https://github.com/joseph39
[@jpbede]: https://github.com/jpbede
+[@jpbede]: https://github.com/jpbede
[@jrieger]: https://github.com/jrieger
+[@Kane610]: https://github.com/Kane610
+[@Kane610]: https://github.com/Kane610
+[@KapJI]: https://github.com/KapJI
[@killer0071234]: https://github.com/killer0071234
[@klaasnicolaas]: https://github.com/klaasnicolaas
[@kroimon]: https://github.com/kroimon
+[@Lash-L]: https://github.com/Lash-L
[@laurentriffard]: https://github.com/laurentriffard
[@ludeeus]: https://github.com/ludeeus
[@lunmay]: https://github.com/lunmay
+[@lunmay]: https://github.com/lunmay
+[@Mappenhei]: https://github.com/Mappenhei
[@marcelveldt]: https://github.com/marcelveldt
+[@Marco98]: https://github.com/Marco98
[@marcolivierarsenault]: https://github.com/marcolivierarsenault
[@marthoc]: https://github.com/marthoc
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@matrixd2]: https://github.com/matrixd2
[@maximweb]: https://github.com/maximweb
[@mheath]: https://github.com/mheath
[@mib1185]: https://github.com/mib1185
+[@MislavMandaric]: https://github.com/MislavMandaric
[@mkmer]: https://github.com/mkmer
[@mletenay]: https://github.com/mletenay
+[@MrBartusek]: https://github.com/MrBartusek
[@mricharz]: https://github.com/mricharz
+[@MTrab]: https://github.com/MTrab
[@muppet3000]: https://github.com/muppet3000
[@myztillx]: https://github.com/myztillx
[@nachonam]: https://github.com/nachonam
+[@Narmishka]: https://github.com/Narmishka
[@natekspencer]: https://github.com/natekspencer
+[@nohn]: https://github.com/nohn
+[@Noltari]: https://github.com/Noltari
[@ollo69]: https://github.com/ollo69
+[@ollo69]: https://github.com/ollo69
+[@OnFreund]: https://github.com/OnFreund
+[@OnFreund]: https://github.com/OnFreund
+[@oyvindwe]: https://github.com/oyvindwe
[@oyvindwe]: https://github.com/oyvindwe
[@pavoni]: https://github.com/pavoni
+[@pavoni]: https://github.com/pavoni
[@pdecat]: https://github.com/pdecat
[@piitaya]: https://github.com/piitaya
+[@piitaya]: https://github.com/piitaya
[@pjanuario]: https://github.com/pjanuario
+[@ProstoSanja]: https://github.com/ProstoSanja
[@puddly]: https://github.com/puddly
+[@Quentame]: https://github.com/Quentame
+[@Quentame]: https://github.com/Quentame
[@r01k]: https://github.com/r01k
[@raman325]: https://github.com/raman325
[@rappenze]: https://github.com/rappenze
@@ -1698,21 +1858,157 @@ For a summary in a more readable format:
[@scop]: https://github.com/scop
[@sdb9696]: https://github.com/sdb9696
[@sergeymaysak]: https://github.com/sergeymaysak
+[@Shulyaka]: https://github.com/Shulyaka
+[@Shutgun]: https://github.com/Shutgun
+[@Sibgatulin]: https://github.com/Sibgatulin
[@slovdahl]: https://github.com/slovdahl
[@starkillerOG]: https://github.com/starkillerOG
+[@starkillerOG]: https://github.com/starkillerOG
[@stegm]: https://github.com/stegm
+[@StevenLooman]: https://github.com/StevenLooman
[@suaveolent]: https://github.com/suaveolent
[@syepes]: https://github.com/syepes
[@synesthesiam]: https://github.com/synesthesiam
+[@synesthesiam]: https://github.com/synesthesiam
[@teharris1]: https://github.com/teharris1
[@tetele]: https://github.com/tetele
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@TheKalpit]: https://github.com/TheKalpit
[@thijsputman]: https://github.com/thijsputman
[@timmo001]: https://github.com/timmo001
[@tjhorner]: https://github.com/tjhorner
+[@tjhorner]: https://github.com/tjhorner
[@tkdrob]: https://github.com/tkdrob
[@tronikos]: https://github.com/tronikos
[@ufodone]: https://github.com/ufodone
+[@Vaarlion]: https://github.com/Vaarlion
[@vangorra]: https://github.com/vangorra
[@vhartikainen]: https://github.com/vhartikainen
+[@ViViDboarder]: https://github.com/ViViDboarder
+[@Xitee1]: https://github.com/Xitee1
[@yuxincs]: https://github.com/yuxincs
[@zxdavb]: https://github.com/zxdavb
+[#104853]: https://github.com/home-assistant/core/pull/104853
+[#104936]: https://github.com/home-assistant/core/pull/104936
+[#105135]: https://github.com/home-assistant/core/pull/105135
+[#105203]: https://github.com/home-assistant/core/pull/105203
+[#105294]: https://github.com/home-assistant/core/pull/105294
+[#105310]: https://github.com/home-assistant/core/pull/105310
+[#105324]: https://github.com/home-assistant/core/pull/105324
+[#105349]: https://github.com/home-assistant/core/pull/105349
+[#105375]: https://github.com/home-assistant/core/pull/105375
+[#105387]: https://github.com/home-assistant/core/pull/105387
+[#105435]: https://github.com/home-assistant/core/pull/105435
+[#105437]: https://github.com/home-assistant/core/pull/105437
+[#105440]: https://github.com/home-assistant/core/pull/105440
+[#105442]: https://github.com/home-assistant/core/pull/105442
+[#105444]: https://github.com/home-assistant/core/pull/105444
+[#105450]: https://github.com/home-assistant/core/pull/105450
+[#105456]: https://github.com/home-assistant/core/pull/105456
+[#105462]: https://github.com/home-assistant/core/pull/105462
+[#105465]: https://github.com/home-assistant/core/pull/105465
+[#105476]: https://github.com/home-assistant/core/pull/105476
+[#105491]: https://github.com/home-assistant/core/pull/105491
+[#105500]: https://github.com/home-assistant/core/pull/105500
+[#105508]: https://github.com/home-assistant/core/pull/105508
+[#105513]: https://github.com/home-assistant/core/pull/105513
+[#105580]: https://github.com/home-assistant/core/pull/105580
+[#105585]: https://github.com/home-assistant/core/pull/105585
+[#105617]: https://github.com/home-assistant/core/pull/105617
+[#105619]: https://github.com/home-assistant/core/pull/105619
+[#105659]: https://github.com/home-assistant/core/pull/105659
+[#105661]: https://github.com/home-assistant/core/pull/105661
+[@DerFlob]: https://github.com/DerFlob
+[@FrnchFrgg]: https://github.com/FrnchFrgg
+[@KJonline]: https://github.com/KJonline
+[@allenporter]: https://github.com/allenporter
+[@apt-itude]: https://github.com/apt-itude
+[@bdraco]: https://github.com/bdraco
+[@bouwew]: https://github.com/bouwew
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@dknowles2]: https://github.com/dknowles2
+[@emontnemery]: https://github.com/emontnemery
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@j-a-n]: https://github.com/j-a-n
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@mkmer]: https://github.com/mkmer
+[@puddly]: https://github.com/puddly
+[@synesthesiam]: https://github.com/synesthesiam
+[#105135]: https://github.com/home-assistant/core/pull/105135
+[#105324]: https://github.com/home-assistant/core/pull/105324
+[#105515]: https://github.com/home-assistant/core/pull/105515
+[#105655]: https://github.com/home-assistant/core/pull/105655
+[#105676]: https://github.com/home-assistant/core/pull/105676
+[#105691]: https://github.com/home-assistant/core/pull/105691
+[#105694]: https://github.com/home-assistant/core/pull/105694
+[#105714]: https://github.com/home-assistant/core/pull/105714
+[#105719]: https://github.com/home-assistant/core/pull/105719
+[#105735]: https://github.com/home-assistant/core/pull/105735
+[#105749]: https://github.com/home-assistant/core/pull/105749
+[@Kane610]: https://github.com/Kane610
+[@Noltari]: https://github.com/Noltari
+[@bdraco]: https://github.com/bdraco
+[@cgarwood]: https://github.com/cgarwood
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@jpbede]: https://github.com/jpbede
+[@mib1185]: https://github.com/mib1185
+[#105135]: https://github.com/home-assistant/core/pull/105135
+[#105324]: https://github.com/home-assistant/core/pull/105324
+[#105364]: https://github.com/home-assistant/core/pull/105364
+[#105488]: https://github.com/home-assistant/core/pull/105488
+[#105489]: https://github.com/home-assistant/core/pull/105489
+[#105655]: https://github.com/home-assistant/core/pull/105655
+[#105743]: https://github.com/home-assistant/core/pull/105743
+[#105757]: https://github.com/home-assistant/core/pull/105757
+[#105807]: https://github.com/home-assistant/core/pull/105807
+[#105811]: https://github.com/home-assistant/core/pull/105811
+[#105812]: https://github.com/home-assistant/core/pull/105812
+[#105830]: https://github.com/home-assistant/core/pull/105830
+[#105833]: https://github.com/home-assistant/core/pull/105833
+[#105860]: https://github.com/home-assistant/core/pull/105860
+[#105870]: https://github.com/home-assistant/core/pull/105870
+[#105946]: https://github.com/home-assistant/core/pull/105946
+[#105951]: https://github.com/home-assistant/core/pull/105951
+[#105954]: https://github.com/home-assistant/core/pull/105954
+[#105992]: https://github.com/home-assistant/core/pull/105992
+[#105993]: https://github.com/home-assistant/core/pull/105993
+[#105998]: https://github.com/home-assistant/core/pull/105998
+[#106094]: https://github.com/home-assistant/core/pull/106094
+[#106101]: https://github.com/home-assistant/core/pull/106101
+[#106134]: https://github.com/home-assistant/core/pull/106134
+[#106147]: https://github.com/home-assistant/core/pull/106147
+[#106149]: https://github.com/home-assistant/core/pull/106149
+[#106152]: https://github.com/home-assistant/core/pull/106152
+[#106162]: https://github.com/home-assistant/core/pull/106162
+[#106171]: https://github.com/home-assistant/core/pull/106171
+[#106178]: https://github.com/home-assistant/core/pull/106178
+[#106184]: https://github.com/home-assistant/core/pull/106184
+[#106239]: https://github.com/home-assistant/core/pull/106239
+[#106273]: https://github.com/home-assistant/core/pull/106273
+[#106324]: https://github.com/home-assistant/core/pull/106324
+[#106413]: https://github.com/home-assistant/core/pull/106413
+[@Noltari]: https://github.com/Noltari
+[@OnFreund]: https://github.com/OnFreund
+[@agners]: https://github.com/agners
+[@atmurray]: https://github.com/atmurray
+[@bachya]: https://github.com/bachya
+[@bdraco]: https://github.com/bdraco
+[@benleb]: https://github.com/benleb
+[@bieniu]: https://github.com/bieniu
+[@cgtobi]: https://github.com/cgtobi
+[@emontnemery]: https://github.com/emontnemery
+[@frenck]: https://github.com/frenck
+[@fwestenberg]: https://github.com/fwestenberg
+[@mib1185]: https://github.com/mib1185
+[@mkmer]: https://github.com/mkmer
+[@pnbruckner]: https://github.com/pnbruckner
+[@puddly]: https://github.com/puddly
+[@sdb9696]: https://github.com/sdb9696
+[@starkillerOG]: https://github.com/starkillerOG
+[@synesthesiam]: https://github.com/synesthesiam
+[@vexofp]: https://github.com/vexofp
diff --git a/source/changelogs/core-2024.1.markdown b/source/changelogs/core-2024.1.markdown
new file mode 100644
index 000000000000..5372553cfa96
--- /dev/null
+++ b/source/changelogs/core-2024.1.markdown
@@ -0,0 +1,1969 @@
+---
+title: Full changelog for Home Assistant Core 2024.1
+description: Detailed changelog for the Home Assistant Core 2024.1 release
+replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$
+---
+
+These are all the changes included in the Home Assistant Core 2024.1 release.
+
+For a summary in a more readable format:
+[Release notes blog for this release](/blog/2024/01/03/release-20241/).
+
+## All changes
+
+- Bump version to 2024.1.0dev0 ([@frenck] - [#104746])
+- Add faa_delays to strict typing ([@joostlek] - [#104720])
+- Move Faa delays state attributes to entity description ([@joostlek] - [#104748])
+- Add entity translations to faa_delays ([@joostlek] - [#104749])
+- Add strict typing to push bullet ([@engrbm87] - [#99538])
+- Reolink cleanup when CAM disconnected from NVR ([@starkillerOG] - [#103888])
+- Migrate GDACS to has entity name ([@joostlek] - [#104733])
+- Add common reolink entity description ([@starkillerOG] - [#104142])
+- Cleanup Reolink formatting (late review) ([@starkillerOG] - [#104793])
+- Make the minimum number of samples used by the trend sensor configurable ([@jpbede] - [#101102])
+- Add Flexit bacnet integration ([@lellky] - [#104275])
+- Add significant Change support for remote ([@mib1185] - [#104627])
+- Add codeowner to vesync ([@cdnninja] - [#104809])
+- Bump evohome-async to 0.4.9 ([@zxdavb] - [#103660])
+- Added typing for return value for async_migrate func. ([@sergeymaysak] - [#104828])
+- Improve decorator type annotations ([@cdce8p] - [#104821])
+- Improve decorator type annotations [matter] ([@cdce8p] - [#104822])
+- Improve decorator type annotations [sabnzbd] ([@cdce8p] - [#104823])
+- Improve decorator type annotations [core] ([@cdce8p] - [#104826])
+- Always create APCUPS device ([@joostlek] - [#104716])
+- Improve decorator type annotations [sensibo] ([@cdce8p] - [#104824])
+- Use orjson to load HomeWizard test fixtures ([@frenck] - [#104832])
+- Vesync constant cleanup ([@cdnninja] - [#104842])
+- Let executor CI test pass under worse conditions ([@jbouwh] - [#104849])
+- Change pytest fixture scope from core fixtures ([@frenck] - [#104831])
+- Add temperature to the light color mode parameter fallbacks ([@nmaggioni] - [#86026])
+- Bump bluetooth-data-tools to 0.16.0 ([@bdraco] - [#104854])
+- Fix powerwall typing ([@cdce8p] - [#104875])
+- Migrate to using faster monotonic_time_coarse from bluetooth-data-tools ([@bdraco] - [#104882])
+- Reolink only fetch data for enabled entities ([@starkillerOG] - [#104157])
+- Adjust roku type hint ([@cdce8p] - [#104877])
+- Improve decorator type annotations [esphome] ([@cdce8p] - [#104878])
+- Correct SerialException import in dsmr, firmata, landysgyr_heat_meater and rfxtrx integrations ([@jbouwh] - [#104889])
+- Add number entities for program temperature in ViCare integration ([@CFenner] - [#103960])
+- Add alarm sensor to Aurora ABB ([@davet2001] - [#104503])
+- Add MELCloud token refresh upon firmware upgrade ([@erwindouna] - [#104391])
+- Refactor bluetooth scanners for better seperation of concerns ([@bdraco] - [#104909])
+- Bump python-holidays to 0.37 ([@jrieger] - [#104937])
+- Remove CONF_PRECISION remainder from dsmr ([@jbouwh] - [#104919])
+- Add Holiday integration ([@jrieger] - [#103795])
+- Bump bluetooth-data-tools to 1.17.0 ([@bdraco] - [#104935])
+- Relocate base Bluetooth scanner code into an external library ([@bdraco] - [#104930])
+- Bump plexapi to 4.15.6 ([@jjlawren] - [#104949])
+- Add StreamLabsWater to strict typing ([@joostlek] - [#104957])
+- Bump habluetooth to 0.4.0 ([@bdraco] - [#104958])
+- Use constants in config flow scaffold ([@joostlek] - [#104964])
+- Fix bug in config flow scaffold ([@joostlek] - [#104965])
+- Add virtual integration Fujitsu anywAIR ([@Bre77] - [#102978])
+- Bump habluetooth to 0.5.1 ([@bdraco] - [#104969])
+- Bump evohome-async to 0.4.13 ([@zxdavb] - [#104960])
+- Bump screenlogicpy to v0.10.0 ([@dieselrabbit] - [#104866])
+- Remove monotonic_time_coarse datetime helper ([@bdraco] - [#104892])
+- Update balboa strings.json ([@Betacart] - [#104977])
+- Bump dbus-fast to 2.20.0 ([@bdraco] - [#104978])
+- Squeezebox to Synology DSM: add host field description ([@c0ffeeca7] - [#104864])
+- Add telegram message timestamp to event data ([@mdunda] - [#87493])
+- Allow passing breaks_in_ha_version to deprecation helper decorators ([@emontnemery] - [#104985])
+- Add scaling utils for brightness and fanspeed ([@jbouwh] - [#104753])
+- Bump opower==0.0.40 ([@tronikos] - [#104986])
+- Move config_per_platform and extract_domain_configs to config.py ([@emontnemery] - [#104989])
+- Remove "swap: none" from modbus ([@janiversen] - [#104713])
+- Refactor lock default code handling ([@jbouwh] - [#104807])
+- Make `cv.string` return subclasses of str as is ([@emontnemery] - [#103916])
+- Reverse component path ([@emontnemery] - [#104087])
+- Avoid double URL creation for hassio ingress ([@bdraco] - [#105052])
+- Bump habluetooth to 0.6.1 ([@bdraco] - [#105029])
+- Make season types translatable ([@jpbede] - [#105027])
+- Remove breaks_in_ha_version from deprecated YAML classes ([@emontnemery] - [#105062])
+- Deprecate and remove lazy_error from modbus ([@janiversen] - [#105037])
+- Add fields cancelled & extra to result of the departure HVV sensor ([@tzahari] - [#105030])
+- Improve matrix typing ([@cdce8p] - [#105067])
+- Add optional dsmr timestamp sensor ([@dupondje] - [#104979])
+- Use modern platform path when reporting platform config errors ([@emontnemery] - [#104238])
+- Add domain key config validation ([@emontnemery] - [#104242])
+- Add calendar entity to Radarr ([@tkdrob] - [#79077])
+- Finish scaffold config flow with either abort or create entry ([@joostlek] - [#105012])
+- Remove logic converting empty or falsy YAML to empty dict ([@emontnemery] - [#103912])
+- Improve yamaha tests ([@emontnemery] - [#105077])
+- Move local bluetooth scanner code into habluetooth library ([@bdraco] - [#104970])
+- Update energyzero lib to v2.0.0 ([@klaasnicolaas] - [#105080])
+- Improve raise contains mocks ([@emontnemery] - [#105078])
+- Add significant Change support for weather ([@mib1185] - [#104840])
+- Move Bluetooth advertisement tracker to habluetooth library ([@bdraco] - [#105083])
+- Split bluetooth manager so it can be extracted into the habluetooth lib ([@bdraco] - [#105015])
+- Increase frequency of weatherkit updates ([@tjhorner] - [#105094])
+- Bump renson library to version 1.7.1 ([@jimmyd-be] - [#105096])
+- Trigger Home Assistant shutdown automations right before the stop event instead of during it ([@tetele] - [#91165])
+- Update easyenergy lib to v2.0.0 ([@klaasnicolaas] - [#105108])
+- Bump aioesphomeapi to 19.3.0 ([@bdraco] - [#105114])
+- Bump habluetooth to 0.8.0 ([@bdraco] - [#105109])
+- Fix flakey logbook tests ([@bdraco] - [#105111])
+- Bump actions/setup-python from 4.7.1 to 4.8.0 (@dependabot - [#105117])
+- bump evohome-async to 0.4.15 ([@zxdavb] - [#105119])
+- Address late review for Holiday ([@jrieger] - [#105121])
+- Add Huawei LTE network mode select ([@scop] - [#104614])
+- Use freezegun in utility_meter tests ([@jpbede] - [#105123])
+- Bump python-opensky to 1.0.0 ([@joostlek] - [#105131])
+- Improve decorator type annotations [zwave_js] ([@cdce8p] - [#104825])
+- Add preset modes to ESPHome fan entities ([@mill1000] - [#103781])
+- Modernize and cleanup trend tests ([@jpbede] - [#105010])
+- Add Modbus fan speed support ([@cian] - [#104577])
+- Add extra tests for HomeWizard for unsupported entity creation ([@DCSBL] - [#105149])
+- Bump actions/setup-python from 4.8.0 to 5.0.0 (@dependabot - [#105193])
+- Use brightness scaling util in HomeWizard Number entity ([@DCSBL] - [#105147])
+- Add custom services for renson fans ([@jimmyd-be] - [#94497])
+- Add Seattle City Light virtual integration via Opower ([@dewdropawoo] - [#104997])
+- Bump easyenergy lib to v2.1.0 ([@klaasnicolaas] - [#105224])
+- Bump energyzero lib to v2.1.0 ([@klaasnicolaas] - [#105228])
+- Migrate auth tests to use freezegun ([@jpbede] - [#105243])
+- Use freezegun in cert_expiry tests ([@jpbede] - [#105125])
+- Migrate Gree to has entity name ([@joostlek] - [#104739])
+- Migrate non-component tests to use freezegun/freezer ([@jpbede] - [#105142])
+- Add Wyoming satellite audio settings ([@synesthesiam] - [#105261])
+- Add OSO Energy integration ([@osohotwateriot] - [#70365])
+- Bump actions/stale from 8.0.0 to 9.0.0 (@dependabot - [#105275])
+- Bump github/codeql-action from 2.22.8 to 2.22.9 (@dependabot - [#105274])
+- Bump habluetooth to 0.10.0 ([@bdraco] - [#105118])
+- Adjust stale bot policy for PRs ([@frenck] - [#105280])
+- Remove workaround for default lock code in Matter ([@oyvindwe] - [#105173])
+- Update yarl to 1.9.4 ([@frenck] - [#105282])
+- Replace apcaccess dependency with aioapcaccess in apcupsd ([@yuxincs] - [#104571])
+- Migrate samsungtv tests to use freezegun ([@jpbede] - [#105286])
+- Add support for accessing Squeezebox over over https ([@rajlaud] - [#95088])
+- Add A. O. Smith integration ([@bdr99] - [#104976])
+- Migrate homeassistant component tests to use freezegun ([@jpbede] - [#105333])
+- Add myself as code owner for co2signal ([@VIKTORVAV99] - [#105302])
+- Replace aiohttp mock with patch in Advantage Air ([@Bre77] - [#104932])
+- Fix SSLCipherList typing error in IMAP coordinator ([@vexofp] - [#105362])
+- Sun WEG integration ([@rokam] - [#88272])
+- Migrate template tests to use freezegun ([@jpbede] - [#105341])
+- Make network fixture scoped to session to speed up tests ([@bdraco] - [#105353])
+- Migrate gree tests to use freezegun ([@jpbede] - [#105340])
+- Fix the ruff-format error ([@Bre77] - [#105376])
+- Update freezegun to 1.3.1 ([@cdce8p] - [#105377])
+- Migrate unifi tests to use freezegun ([@jpbede] - [#105343])
+- Add data descriptions to Reolink ([@starkillerOG] - [#105298])
+- Bump `aioshelly` to version 7.0.0 ([@bieniu] - [#105384])
+- Avoid ffmpeg subprocess for many component tests ([@bdraco] - [#105354])
+- Migrate time_date tests to use freezegun ([@jpbede] - [#105409])
+- Prevent duplicate default SSLContext instances ([@vexofp] - [#105348])
+- Remove zwave_js device on device reset ([@raman325] - [#104291])
+- Accept HTTP 200 through 206 as success for RESTful Switch ([@vexofp] - [#105358])
+- Add Tessie Integration ([@Bre77] - [#104684])
+- Migrate roku tests to use freezegun ([@jpbede] - [#105418])
+- Make API init async in Minecraft Server ([@elmurato] - [#105403])
+- Add reauth to Tessie ([@Bre77] - [#105419])
+- Migrate mqtt tests to use freezegun ([@jpbede] - [#105414])
+- Improve Amazon Alexa endpoint validation ([@frenck] - [#105287])
+- Add reauth to A. O. Smith integration ([@bdr99] - [#105320])
+- Bump pylitejet to v0.6.0 ([@joncar] - [#105472])
+- Migrate tag & tts tests to use freezegun ([@jpbede] - [#105411])
+- Migrate octoprint tests to use freezegun ([@jpbede] - [#105408])
+- Migrate sonarr tests to use freezegun ([@jpbede] - [#105410])
+- Bump python-holidays to 0.38 ([@jrieger] - [#105482])
+- Make Workday UI setup nicer ([@gjohansson-ST] - [#105407])
+- Bump openai end switch from dall-e-2 to dall-e-3 ([@Shulyaka] - [#104998])
+- Follow Alpine 3.18 raspberrypi package updates ([@agners] - [#105486])
+- Reduce modbus validator for "swap" (remove special handling) ([@janiversen] - [#105021])
+- Improve test of config entry store ([@emontnemery] - [#105487])
+- Update typing-extensions to 4.9.0 ([@cdce8p] - [#105490])
+- Correctly report unavailable battery for value 255 of percentage ([@elupus] - [#104566])
+- Make it possible to inherit EntityDescription in frozen and mutable dataclasses ([@emontnemery] - [#105211])
+- Add typing in Melcloud config flow ([@erwindouna] - [#105510])
+- Relocate Bluetooth manager to habluetooth library ([@bdraco] - [#105110])
+- Add config flow to Suez water ([@joostlek] - [#104730])
+- Add Fastdotcom DataUpdateCoordinator ([@erwindouna] - [#104839])
+- Add support for Shelly Gen3 devices ([@bieniu] - [#104874])
+- Remove unneeded class _EntityDescriptionBase ([@emontnemery] - [#105518])
+- Improve tests in Tessie ([@Bre77] - [#105430])
+- Updates V2C sensor icons ([@dgomes] - [#105534])
+- Bump sigstore/cosign-installer from 3.2.0 to 3.3.0 (@dependabot - [#105537])
+- Bump anyio to 4.1.0 ([@bdraco] - [#105529])
+- Update stale doc strings in entity platform tests ([@jbouwh] - [#105526])
+- Migrate device_sun_light_trigger tests to use freezegun ([@jpbede] - [#105520])
+- Migrate geonetnz_* tests to use freezegun ([@jpbede] - [#105521])
+- Bump bluetooth libraries ([@bdraco] - [#105522])
+- Add minor version to config entries ([@emontnemery] - [#105479])
+- Add Fast.com Device Info ([@erwindouna] - [#105528])
+- Add Tado error handling to fetching devices ([@erwindouna] - [#105546])
+- Patch aiohttp server app router freeze in tests ([@MartinHjelmare] - [#105555])
+- Add Suez Water to strict typing ([@joostlek] - [#105559])
+- Use mocked entity platform for lock service tests ([@jbouwh] - [#105020])
+- Add Airvisual pro to strict typing ([@joostlek] - [#105568])
+- Add support for Happy Eyeballs to homekit_controller ([@bdraco] - [#105454])
+- Bump dbus-fast to 2.21.0 ([@bdraco] - [#105536])
+- Bump aiohomekit to 3.1.0 ([@bdraco] - [#105584])
+- Bump aioesphomeapi to 20.0.0 ([@bdraco] - [#105586])
+- Migrate homematicip_cloud tests to use freezegun ([@jpbede] - [#105592])
+- Bump PyTado to 0.17.0 ([@erwindouna] - [#105573])
+- Add Apprise to strict typing ([@joostlek] - [#105575])
+- Add Aranet to strict typing ([@joostlek] - [#105577])
+- Add Android IP webcam to strict typing ([@joostlek] - [#105570])
+- Add Fastdotcom service ([@erwindouna] - [#105553])
+- Improve FrozenOrThawed ([@emontnemery] - [#105541])
+- Refactor all Bluetooth scanners to inherit from BaseHaRemoteScanner ([@bdraco] - [#105523])
+- Add Adax to strict typing ([@joostlek] - [#105562])
+- Mark more entities secondary on Fully Kiosk Browser ([@frenck] - [#105595])
+- Bump `brother` library, use `pysnmp-lextudio` with SNMP integration ([@bieniu] - [#105591])
+- Bump aioesphomeapi to 20.1.0 ([@bdraco] - [#105602])
+- Add sensor platform to A. O. Smith integration ([@bdr99] - [#105604])
+- Bump aioesphomeapi to 21.0.0 ([@bdraco] - [#105609])
+- Bump github/codeql-action from 2.22.9 to 2.22.10 (@dependabot - [#105620])
+- Add diagnostics platform to BraviaTV ([@bieniu] - [#105603])
+- Refactor Bluetooth scanners to avoid the need to pass a callback ([@bdraco] - [#105607])
+- Allow inheriting `FrozenOrThawed` with custom init ([@emontnemery] - [#105624])
+- Fix entity descriptions in philips_js ([@emontnemery] - [#105625])
+- Reduce code duplication in Suez config flow ([@joostlek] - [#105558])
+- Use issue registry fixture ([@joostlek] - [#105633])
+- Add diagnostics download to goodwe integration ([@mletenay] - [#102928])
+- Improve cloud http api tests ([@MartinHjelmare] - [#105610])
+- Clean cloud client fixture from cloud http api tests ([@MartinHjelmare] - [#105649])
+- Deduplicate constants A-D ([@joostlek] - [#105638])
+- Migrate demo test to use freezegun ([@jpbede] - [#105644])
+- Fix goodwe tests ([@emontnemery] - [#105653])
+- Avoid mutating entity descriptions in efergy ([@emontnemery] - [#105626])
+- Avoid mutating entity descriptions in lidarr ([@emontnemery] - [#105628])
+- Avoid mutating entity descriptions in airthings_ble ([@emontnemery] - [#105627])
+- Add country code constant ([@joostlek] - [#105640])
+- Avoid mutating entity descriptions in melcloud ([@emontnemery] - [#105629])
+- Deduplicate constants E-Z ([@joostlek] - [#105657])
+- Add volume_step property to MediaPlayerEntity ([@emontnemery] - [#105574])
+- Keep capabilities up to date in the entity registry ([@emontnemery] - [#101748])
+- Migrate homekit_controller tests to use freezegun ([@jpbede] - [#105646])
+- Use Textselector in Trafikverket Camera ([@gjohansson-ST] - [#105677])
+- Set volume_step in sonos media_player ([@emontnemery] - [#105671])
+- Add error translations for Sensibo ([@gjohansson-ST] - [#105600])
+- Add error translations to Yale Smart Living ([@gjohansson-ST] - [#105678])
+- Set volume_step in enigma2 media_player ([@emontnemery] - [#105669])
+- Bump zeroconf to 0.129.0 ([@bdraco] - [#105701])
+- Remove context_recent_time property from entity base class ([@emontnemery] - [#105652])
+- Remove device_state_attributes property from entity base class ([@emontnemery] - [#105650])
+- Bump iammeter to 0.2.1 ([@yangbo1979] - [#95885])
+- Remove cloud details from assist pipeline ([@MartinHjelmare] - [#105687])
+- Allow multiple configs for srp energy ([@briglx] - [#96573])
+- Avoid mutating entity descriptions in efergy tests ([@emontnemery] - [#105717])
+- Replace Starline horn switch with button ([@Anonym-tsk] - [#105728])
+- Bump bluetooth-data-tools to 1.18.0 ([@bdraco] - [#105685])
+- Bump sunweg to 2.0.1 ([@rokam] - [#105613])
+- Add France to picnic countries ([@slhad] - [#105722])
+- Small speed up to data entry flow steps ([@bdraco] - [#105713])
+- Migrate ESPHome bleak implementation to bleak-esphome library ([@bdraco] - [#105611])
+- Include Envoy firmware version in Enphase diagnostics ([@cgarwood] - [#105742])
+- Bump bleak-esphome to 0.3.0 ([@bdraco] - [#105748])
+- Bump pytrafikverket to 0.3.9.2 ([@gjohansson-ST] - [#105752])
+- Bump brottsplatskartan 1.0.5 ([@gjohansson-ST] - [#105759])
+- Refactor cloud assist pipeline ([@MartinHjelmare] - [#105723])
+- Set volume_step in monoprice media_player ([@emontnemery] - [#105670])
+- Set volume_step in bluesound media_player ([@emontnemery] - [#105672])
+- Set volume_step in aquostv media_player ([@emontnemery] - [#105665])
+- Set volume_step in clementine media_player ([@emontnemery] - [#105666])
+- Set volume_step in cmus media_player ([@emontnemery] - [#105667])
+- Avoid mutating entity descriptions in solaredge tests ([@emontnemery] - [#105718])
+- Fix mqtt tests modifying globals ([@jbouwh] - [#105774])
+- Partly migrate Plex to has entity name ([@joostlek] - [#98841])
+- Bump opower to 0.0.41 ([@tronikos] - [#105791])
+- Add data descriptions to MQTT config flow. ([@jbouwh] - [#105301])
+- Fix translation keys in Tessie ([@Bre77] - [#105824])
+- Quality fixes for Tessie ([@Bre77] - [#105838])
+- Add Binary Sensor platform to Tessie ([@Bre77] - [#105421])
+- Bump soco to 0.30.0 ([@jjlawren] - [#105823])
+- Add Unifi device state for additional diagnostics ([@JosephBlock] - [#105138])
+- Reduce overhead to connect dispatcher ([@bdraco] - [#105715])
+- Allow inheriting base component entity descriptions in frozen dataclasses ([@emontnemery] - [#105512])
+- Update pre-commit to 3.6.0 ([@cdce8p] - [#105856])
+- Update coverage to 7.3.3 ([@cdce8p] - [#105855])
+- Update feedparser to 6.0.11 ([@cdce8p] - [#105857])
+- Ensure bluetooth auto recovery does not run in tests ([@bdraco] - [#105841])
+- Bump glances-api to 0.5.0 ([@cohenchris] - [#105813])
+- Bump bthome_ble to 3.3.1 ([@Ernst79] - [#105834])
+- Bump qingping_ble to 0.9.0 ([@Ernst79] - [#105876])
+- Fix cloud tests doing socket I/O ([@bdraco] - [#105874])
+- Bump aiodiscover to 1.6.0 ([@bdraco] - [#105885])
+- Bump bluetooth-adapters to 0.16.2 ([@bdraco] - [#105878])
+- Refactor ESPHome Bluetooth connection logic to prepare for esphome-bleak ([@bdraco] - [#105747])
+- Migrate file test to use freezegun ([@jpbede] - [#105892])
+- Bump zeroconf to 0.130.0 ([@bdraco] - [#105868])
+- Bump bleak-esphome to 0.4.0 ([@bdraco] - [#105909])
+- Remove bluetooth-data-tools dep from ESPHome ([@bdraco] - [#105912])
+- Use library constants instead of literals in Evohome ([@zxdavb] - [#105039])
+- Bump lru-dict to 1.3.0 ([@bdraco] - [#105914])
+- Add first TypeVarTuple annotations ([@cdce8p] - [#105379])
+- Implement Review Feedback for Tessie ([@Bre77] - [#105937])
+- Bump pyasuswrt to 0.1.21 ([@ollo69] - [#105922])
+- Bump asyncsleepiq to v1.4.0 ([@kbickar] - [#105939])
+- Address late review comments for A. O. Smith reauth ([@bdr99] - [#105941])
+- Add Tailwind integration ([@frenck] - [#105926])
+- Add prices service calls for easyEnergy ([@klaasnicolaas] - [#105175])
+- Add AndroidTV remote to strict typing ([@joostlek] - [#105571])
+- Add Tailwind zeroconf discovery ([@frenck] - [#105949])
+- Set volume_step in frontier_silicon media_player ([@emontnemery] - [#105953])
+- Reolink change ir to switch ([@starkillerOG] - [#105916])
+- Add reauth support to Tailwind ([@frenck] - [#105959])
+- Bump opower to 0.1.0 ([@tronikos] - [#105957])
+- Improve rfxtrx typing ([@cdce8p] - [#105966])
+- Fix easyenergy async_setup_services declaration ([@edenhaus] - [#105947])
+- Avoid mutating entity descriptions in solaredge ([@emontnemery] - [#105974])
+- Avoid mutating entity descriptions in tomorrowio ([@emontnemery] - [#105975])
+- Avoid mutating entity descriptions in onewire ([@emontnemery] - [#105970])
+- Avoid mutating entity descriptions in radarr ([@emontnemery] - [#105972])
+- Avoid mutating entity descriptions in ovo_energy ([@emontnemery] - [#105971])
+- Fix typo in deprecated comment ([@mkmer] - [#105969])
+- Add diagnostics platform to Tailwind ([@frenck] - [#105965])
+- Bump google-generativeai to 0.3.1 ([@tronikos] - [#105783])
+- Remove HaAsyncServiceBrowser from zeroconf ([@bdraco] - [#105881])
+- Add button platform to Tailwind integration ([@frenck] - [#105961])
+- Migrate directv test to use freezegun ([@jpbede] - [#105894])
+- Add significant Change support for camera ([@mib1185] - [#105866])
+- Improve logging util typing ([@cdce8p] - [#105968])
+- Allow step size any for number selector in slider mode ([@emontnemery] - [#105978])
+- Rename zamg to GeoSphere Austria ([@killer0071234] - [#105494])
+- Add DHCP discovery to Tailwind ([@frenck] - [#105981])
+- Improve Transmission Entity description class ([@engrbm87] - [#105924])
+- Avoid mutating entity descriptions in screenlogic ([@emontnemery] - [#105983])
+- Add Valve integration ([@cibernox] - [#102184])
+- Avoid mutating entity descriptions in unifiprotect ([@emontnemery] - [#105976])
+- Avoid mutating entity descriptions in sunweg ([@emontnemery] - [#105982])
+- Add new price sensors with API token access to pvpc hourly pricing ([@azogue] - [#85769])
+- Add PLC PHY rates as sensor to devolo Home Network ([@Shutgun] - [#87039])
+- Set aiohttp shutdown_timeout on AppRunner instead of TCPSite ([@cdce8p] - [#105973])
+- Add significant change helper check_valid_float ([@mib1185] - [#106005])
+- Remove leftover logging in onewire ([@epenet] - [#105986])
+- Avoid mutating entity descriptions in screenlogic ([@emontnemery] - [#106022])
+- Fix entity descriptions in upnp ([@emontnemery] - [#106023])
+- Avoid mutating entity descriptions in sunweg tests ([@emontnemery] - [#106024])
+- Update enigma2 codeowners ([@autinerd] - [#106000])
+- Bump Roborock to 0.38.0 ([@Lash-L] - [#106025])
+- Upgrade gardena_bluetooth to 1.4.1 ([@elupus] - [#106017])
+- Freeze integration entity descriptions ([@emontnemery] - [#105984])
+- Clean up device registry for doors that no longer exist in Aladdin Connect ([@mkmer] - [#99743])
+- Fix opower for AEP utilities ([@tronikos] - [#106010])
+- Correct logic in honeywell for cleaning up stale devices ([@mkmer] - [#106018])
+- Add significant Change support for alarm control panel ([@mib1185] - [#106021])
+- Bump devolo_home_control_api to 0.18.3 ([@Shutgun] - [#106035])
+- Remove ipma entity description required fields mixin ([@jpbede] - [#106039])
+- Remove gree switch entity description required fields mixin ([@jpbede] - [#105849])
+- Add significant Change support for water heater ([@mib1185] - [#106003])
+- Add binary sensor platform to Tailwind integration ([@frenck] - [#106033])
+- Remove sun entity description required fields mixin ([@jpbede] - [#105848])
+- Add myself as code owner for rest_command ([@jpbede] - [#106047])
+- Use freezegun in ign_sismologia test ([@jpbede] - [#106051])
+- Use freezegun in nsw_rural_fire_service_feed test ([@jpbede] - [#106050])
+- Use freezegun in qld_bushfire test ([@jpbede] - [#106049])
+- Use freezegun in image_upload test ([@jpbede] - [#106045])
+- Add significant Change support for climate ([@mib1185] - [#106020])
+- Use check_valid_float helper in significant change support of sensor and weather ([@mib1185] - [#106013])
+- Workday create repair if named holiday missing ([@gjohansson-ST] - [#101201])
+- Deprecate binary sensor device class constants ([@edenhaus] - [#105736])
+- Add cover platform to Tailwind integration ([@frenck] - [#106042])
+- Bump hass-nabucasa from 0.74.0 to 0.75.1 ([@ludeeus] - [#105958])
+- Update gotailwind to 0.2.2 ([@frenck] - [#106054])
+- Add dir_with_deprecated_constants function to deprecation helper ([@edenhaus] - [#106059])
+- Move common function for testing derepcation constants to util ([@edenhaus] - [#106063])
+- Upgrade Prusa Link to new Digest Authentication and /v1/ API ([@Skaronator] - [#103396])
+- Improve tests for easyEnergy ([@klaasnicolaas] - [#105989])
+- Deprecate deprecated automation constants ([@edenhaus] - [#106067])
+- Add valve support to switch_as_x ([@emontnemery] - [#105988])
+- Bump async-upnp-client to 0.38.0 ([@chishm] - [#105980])
+- Small cleanup in Tailwind ([@frenck] - [#106073])
+- Bump switchbot-api to 1.3.0 ([@raww] - [#105594])
+- Bump aioesphomeapi to 21.0.1 ([@bdraco] - [#106079])
+- Move shared enigma2 constants ([@autinerd] - [#106064])
+- Add MQTT valve platform ([@jbouwh] - [#105766])
+- Add Starline Service Mode switch ([@Anonym-tsk] - [#105741])
+- Use patch.dict in deprecation test "test_check_if_deprecated_constant" ([@edenhaus] - [#106117])
+- Add water_heater to alexa ([@jbouwh] - [#106011])
+- Deprecate deprecated remote constants ([@edenhaus] - [#106116])
+- Deprecate deprecated number constants ([@edenhaus] - [#106114])
+- Bump zeroconf to 0.131.0 ([@bdraco] - [#106037])
+- Deprecate deprecated fan constants ([@edenhaus] - [#106111])
+- Deprecate deprecated cover constants ([@edenhaus] - [#106098])
+- Deprecate deprecated humidifier constants ([@edenhaus] - [#106112])
+- Deprecate deprecated device tracker constants ([@edenhaus] - [#106099])
+- Deprecate deprecated lock constants ([@edenhaus] - [#106113])
+- Deprecate deprecated alarm control panel constants ([@edenhaus] - [#106058])
+- Move prusalink migration to async_migrate_entry and use a minor version bump ([@edenhaus] - [#106109])
+- Deprecate deprecated siren constants ([@edenhaus] - [#106121])
+- Improve error mqtt valve error logging ([@jbouwh] - [#106129])
+- Add note on overkiz measurement sensor fix ([@jbouwh] - [#105141])
+- Add water_heater to google_assistant ([@jbouwh] - [#105915])
+- Update Ruff to 0.1.8, avoid linter/formatter conflicts ([@scop] - [#106080])
+- Remove unneeded usage of run_callback_threadsafe in entity helper ([@bdraco] - [#106138])
+- Deprecate deprecated climate constants ([@edenhaus] - [#106096])
+- Deprecate deprecated sensor constants ([@edenhaus] - [#106120])
+- Break out the ESPHome Bluetooth scanner connection logic into bleak-esphome ([@bdraco] - [#105908])
+- Fix ESPHome Bluetooth diagnostics ([@bdraco] - [#106151])
+- Add climate platform to Tessie ([@Bre77] - [#105420])
+- Add switch platform to Tessie ([@Bre77] - [#106153])
+- Add virtual integrations for AEP utilities supported by opower ([@tronikos] - [#106146])
+- Add Select platform to Tessie ([@Bre77] - [#105423])
+- Update habluetooth to 2.0.0 ([@bdraco] - [#106145])
+- Bump SunWEG to 2.0.3 ([@rokam] - [#106135])
+- Refactor media_player test classes ([@emontnemery] - [#105630])
+- Bump bluetooth-data-tools to 1.19.0 ([@bdraco] - [#106156])
+- Add flags to EntityDescriptions in Tessie ([@Bre77] - [#105847])
+- Improve performance of dhcp integration client processing ([@bdraco] - [#106137])
+- Allow Fronius devices to be deleted ([@farmio] - [#106141])
+- Refactor ranging utils for mqtt cover ([@jbouwh] - [#105739])
+- Migrate google related tests to use freezegun ([@jpbede] - [#105552])
+- Fix typo's en and improve language on MQTT data descriptions ([@jbouwh] - [#106165])
+- Add update platform to Tessie ([@Bre77] - [#106093])
+- Remove warning message on BMW initialization ([@rikroe] - [#106169])
+- Make evohome strictly typed ([@zxdavb] - [#106012])
+- Remove gios sensor description required fields mixin ([@jpbede] - [#106174])
+- Move cloud stt engine to config entry ([@MartinHjelmare] - [#99608])
+- Improve entity tests ([@emontnemery] - [#106175])
+- Add Energyzero get_gas_prices and get_energy_price services ([@iamrgroot] - [#101374])
+- Bump pyvlx to 0.2.21 ([@DeerMaximum] - [#105800])
+- Improve performance of dhcp on high activity networks ([@bdraco] - [#105884])
+- Swiss public transport config flow ([@miaucl] - [#105648])
+- Bump httpx to 0.26.0 and httpcore to 1.0.2 ([@Shulyaka] - [#106194])
+- Update mypy to 1.8.0 ([@cdce8p] - [#106189])
+- Bump python-opendata-transport to 0.4.0 ([@miaucl] - [#106199])
+- Skip logging deprecated constant if the calling integration couldn't be indentified ([@edenhaus] - [#106181])
+- Fix lacrosse view sensor units ([@killercode] - [#106203])
+- Bump aiohttp-zlib-ng to 0.1.2 ([@bdraco] - [#106193])
+- Use call_soon_threadsafe in face processing of image_processing ([@jpbede] - [#106168])
+- Deprecate legacy_templates ([@edenhaus] - [#105556])
+- Add device tracker to Tessie ([@Bre77] - [#105428])
+- Add button platform to Tessie ([@Bre77] - [#106210])
+- Bump pylitejet to v0.6.2 ([@joncar] - [#106222])
+- Quality improvements for Tessie ([@Bre77] - [#106218])
+- Add lock platform to Tessie ([@Bre77] - [#106216])
+- Add cover platform to Tessie ([@Bre77] - [#105422])
+- Deprecate deprecated device_registry helper constants ([@edenhaus] - [#106227])
+- Deprecate deprecated water_heater constants ([@edenhaus] - [#106226])
+- Deprecate deprecated switch constants ([@edenhaus] - [#106225])
+- Increase version default timeout from 10 to 30 seconds ([@N3rdix] - [#106158])
+- Add number platform to Tessie ([@Bre77] - [#106205])
+- Add integration for Vogel's MotionMount ([@RJPoelstra] - [#103498])
+- Add media player platform to Tessie ([@Bre77] - [#106214])
+- Add valve support to Amazon Alexa ([@jbouwh] - [#106053])
+- Add Refoss integration ([@ashionky] - [#100573])
+- Add starline binary sensors ([@Anonym-tsk] - [#105724])
+- Add DROP integration ([@pfrazer] - [#104319])
+- Don't make huawei_lte entity classes dataclasses ([@emontnemery] - [#106160])
+- Update coverage to 7.3.4 ([@cdce8p] - [#106233])
+- Add consider home interval to ping ([@jpbede] - [#104881])
+- Update pytest warnings filter ([@cdce8p] - [#106234])
+- Return multiple trains in Trafikverket Train ([@gjohansson-ST] - [#106206])
+- Add location selector to Islamic prayer times ([@engrbm87] - [#105911])
+- Clean up swiss public transport ([@joostlek] - [#106245])
+- Add bluecurrent integration ([@Floris272] - [#82483])
+- Add full test coverage to Trafikverket Train ([@gjohansson-ST] - [#106247])
+- Log when swiss_public_transport loses connection ([@miaucl] - [#106200])
+- Add foscam coordinator ([@krmarien] - [#92665])
+- Add support for re-ordering Google Tasks ([@allenporter] - [#104769])
+- Add binary sensors to drop_connect integration ([@pfrazer] - [#106248])
+- Improve cloud binary sensor tests ([@MartinHjelmare] - [#106238])
+- Add support for caching entity properties ([@emontnemery] - [#100601])
+- Filter by supported features for todo services ([@bramkragten] - [#106241])
+- Reduce Life360 update time by fetching Places & Members in parallel ([@pnbruckner] - [#106277])
+- Add support for attribute caching to the humidifier platform ([@bdraco] - [#106271])
+- Add support for attribute caching to the number platform ([@bdraco] - [#106254])
+- Add subwoofer crossover support to Sonos Amp devices ([@jjlawren] - [#106290])
+- Add support for attribute caching to the update platform ([@bdraco] - [#106261])
+- Improve cloud system health tests ([@MartinHjelmare] - [#106235])
+- Fix flaky Tailwind tests by fixing via_device ([@frenck] - [#106294])
+- Deprecate deprecated camera constants ([@edenhaus] - [#106095])
+- Add significant Change support for humidifier ([@mib1185] - [#106015])
+- Reduce zeroconf matcher complexity ([@bdraco] - [#105880])
+- Bump github/codeql-action from 2.22.10 to 3.22.12 (@dependabot - [#106221])
+- Add support for attribute caching to the lock platform ([@bdraco] - [#106275])
+- Add support for attribute caching to the remote platform ([@bdraco] - [#106274])
+- Add support for attribute caching to the button platform ([@bdraco] - [#106259])
+- Add support for attribute caching to the text platform ([@bdraco] - [#106262])
+- Add support for attribute caching to ToggleEntity ([@bdraco] - [#106272])
+- Add support for attribute caching to the binary_sensor platform ([@bdraco] - [#106253])
+- Add support for attribute caching to the sensor platform ([@bdraco] - [#106252])
+- Add significant Change support for vacuum ([@mib1185] - [#106002])
+- Deprecate deprecated data entry flow constants ([@edenhaus] - [#106229])
+- Add support for attribute caching to the fan platform ([@bdraco] - [#106269])
+- Add diagnostics support to Tankerkoenig ([@mib1185] - [#106301])
+- Apply units of measure provided in API when available in LaCrosse View ([@doggkruse] - [#106299])
+- Rework entity description functions in Tessie ([@Bre77] - [#106287])
+- Fix mqtt valve is not resetting opening or closing state ([@jbouwh] - [#106240])
+- Restructure enigma2 integration to use async ([@autinerd] - [#104206])
+- Improve mikrotik error handling ([@Marco98] - [#106244])
+- Add switches to drop_connect integration ([@pfrazer] - [#106264])
+- Add valve platform support to google_assistant ([@jbouwh] - [#106139])
+- Fix feedreader date comparison to allow RSS entries with identical timestamps ([@mattmattmatt] - [#104925])
+- Add energy usage sensor to A. O. Smith integration ([@bdr99] - [#105616])
+- ISY994: remove reference to reload service ([@c0ffeeca7] - [#106302])
+- Add support for attribute caching to the cover platform ([@bdraco] - [#106268])
+- Add support for attribute caching to the alarm_control_panel platform ([@bdraco] - [#106265])
+- Add support for attribute caching to the light platform ([@bdraco] - [#106260])
+- Add support for attribute caching to the select platform ([@bdraco] - [#106255])
+- Improve typing on drop_connect switch entity description ([@jbouwh] - [#106314])
+- Add entity translations to Steamist ([@joostlek] - [#96182])
+- Update psutil to 5.9.7 ([@frenck] - [#106295])
+- Deprecate some deprecated const constants ([@edenhaus] - [#106230])
+- Add support for attribute caching to the switch platform ([@bdraco] - [#106258])
+- New integration Midea ccm15 climate ([@ocalvo] - [#94824])
+- Ensure MQTT attributes are bound to the respective platform entity ([@bdraco] - [#106316])
+- Add support for attribute caching to the climate platform ([@bdraco] - [#106266])
+- Update test data for screenlogic ([@dieselrabbit] - [#106325])
+- Use shorthand attributes in enigma2 ([@autinerd] - [#106318])
+- Remove unnecessary async_add_job in face processing of image_processing ([@jpbede] - [#106323])
+- Add support for attribute caching to the camera platform ([@bdraco] - [#106256])
+- Fix native_step in number not looking at _attr_native_step ([@bdraco] - [#106327])
+- Add 4 more entities in V2C Trydan EVSE ([@dgomes] - [#105531])
+- Add support for attribute caching to the event platform ([@bdraco] - [#106330])
+- Optimize use_device_name check in base entity class ([@bdraco] - [#106209])
+- Add support for attribute caching to the media_player platform ([@bdraco] - [#106257])
+- Add support for attribute caching to the image platform ([@bdraco] - [#106333])
+- Add support for attribute caching to the siren platform ([@bdraco] - [#106337])
+- Add support for attribute caching to the weather platform ([@bdraco] - [#106334])
+- Add support for attribute caching to the lawn_mower platform ([@bdraco] - [#106335])
+- Add support for attribute caching to the water_heater platform ([@bdraco] - [#106336])
+- Add support for attribute caching to the date platform ([@bdraco] - [#106338])
+- Add support for attribute caching to the time platform ([@bdraco] - [#106339])
+- Add support for attribute caching to the datetime platform ([@bdraco] - [#106340])
+- Add support for attribute caching to the todo platform ([@bdraco] - [#106341])
+- Add Airnow to strict typing ([@joostlek] - [#105566])
+- Add diagnostics to ccm15 ([@joostlek] - [#106329])
+- Add support for attribute caching to the vacuum platform ([@bdraco] - [#106332])
+- Bump openwebifpy to 4.0.2 ([@autinerd] - [#106345])
+- Bump temperusb to 1.6.1 ([@davet2001] - [#106346])
+- Add select platform to drop_connect integration ([@pfrazer] - [#106309])
+- Deprecate parameter "retries" in modbus ([@janiversen] - [#105024])
+- Split out shared screenlogic switch code ([@dieselrabbit] - [#106344])
+- Add missing sensors for Shelly Pro Dimmer 2PM ([@bieniu] - [#105008])
+- Add delay to manual refresh in Advantage Air ([@Bre77] - [#104918])
+- Add full coverage to Fast.com ([@gjohansson-ST] - [#105596])
+- Add data model to Tessie ([@Bre77] - [#106285])
+- Enable toggle on valve/cover start in google_assistant ([@jbouwh] - [#106378])
+- Use identity checks for sensor device class enums ([@bdraco] - [#106383])
+- Avoid clearing the attr cache in setter when nothing has changed ([@bdraco] - [#106384])
+- Bump getmac 0.9.4 ([@mari8i] - [#106321])
+- Add config flow to Netgear LTE ([@tkdrob] - [#93002])
+- Bump zwave-js-server-python to 0.55.1 ([@raman325] - [#105502])
+- Use shorthand attrs for more tplink light attributes ([@bdraco] - [#106399])
+- Add valve platform for Shelly Gas Valve ([@bieniu] - [#106087])
+- Cache media player url hashing ([@bdraco] - [#106400])
+- Avoid recreating a set each time sensor unit_of_measurement is called ([@bdraco] - [#106401])
+- Improve drop_connect typing ([@cdce8p] - [#106404])
+- Switch unifi_direct to external library ([@tofuSCHNITZEL] - [#105046])
+- Move cloud binary sensor to config entry ([@MartinHjelmare] - [#106409])
+- Fix pytest test collection warning ([@cdce8p] - [#106405])
+- Add alarm platform to Comelit ([@chemelli74] - [#104718])
+- Add config flow to System Monitor ([@gjohansson-ST] - [#104906])
+- Add missing translations to Tessie Button platform ([@Bre77] - [#106232])
+- Fix freeze entity description ([@chemelli74] - [#106418])
+- Use faster contains check in camera for stream feature ([@bdraco] - [#106429])
+- Add config flow to Streamlabs water ([@joostlek] - [#104962])
+- Add more binary sensors to Tessie ([@Bre77] - [#106212])
+- Add install to Tessie update platform ([@Bre77] - [#106352])
+- Use faster contains check in climate ([@bdraco] - [#106430])
+- Use faster contains check in fan ([@bdraco] - [#106431])
+- Add Support for SleepIQ Foot Warmers ([@kbickar] - [#105931])
+- Handle Auto Fan and MyFan in Advantage Air ([@Bre77] - [#95594])
+- Use faster contains check in media_player ([@bdraco] - [#106434])
+- Handle failed updates in Tessie ([@Bre77] - [#106450])
+- Move Trunks from Button to Cover in Tessie ([@Bre77] - [#106448])
+- Add names to all Tessie entities ([@Bre77] - [#106267])
+- Deprecate deprecated core constants ([@edenhaus] - [#106456])
+- Use faster contains check in vacuum ([@bdraco] - [#106437])
+- Use faster contains check in remote ([@bdraco] - [#106435])
+- Use faster contains check in update ([@bdraco] - [#106436])
+- Use faster contains check in humidifier ([@bdraco] - [#106433])
+- Add attr caching support to the geo_location platform ([@bdraco] - [#106432])
+- Improve cloud tts tests ([@MartinHjelmare] - [#106427])
+- Use faster contains check in water_heater ([@bdraco] - [#106438])
+- Raise HomeAssistantError if event is triggered with invalid event_type ([@jbouwh] - [#106357])
+- Use translation placeholders in Swiss public transport ([@joostlek] - [#106416])
+- Deprecate deprecated unit of measurement constants ([@edenhaus] - [#106455])
+- Raise ServiceValidationError on invalid select option ([@jbouwh] - [#106350])
+- Add qBittorrent torrent sensors ([@finder39] - [#105781])
+- Flip around Tailwind locked out binary sensor ([@frenck] - [#106457])
+- Remove IP / mDNS validation in airq integration setup ([@Sibgatulin] - [#106326])
+- Update quality scale for Aladdin ([@mkmer] - [#99342])
+- Revert "Raise HomeAssistantError if event is triggered with invalid event_type" ([@frenck] - [#106458])
+- Add error handling to Tailwind service methods ([@frenck] - [#106463])
+- Fix Comelit alarm state ([@chemelli74] - [#106466])
+- Fix update platform in Tessie ([@Bre77] - [#106465])
+- Mark Tailwind a platinum quality integration ([@frenck] - [#106468])
+- Bump millheater to 0.11.8 ([@Danielhiversen] - [#106464])
+- Add preselect_remember_me to `/auth/providers` ([@edenhaus] - [#106462])
+- Fix RainMachine bugs ([@kingy444] - [#106231])
+- Fix MQTT retained event messages should be discarded ([@jbouwh] - [#106425])
+- Add translation to ServiceValidationError in Lock ([@gjohansson-ST] - [#105746])
+- Add typing to config flow A ([@joostlek] - [#105721])
+- Add coordinator to Swiss public transport ([@miaucl] - [#106278])
+- Improve glances tests ([@engrbm87] - [#106402])
+- Add significant Change support for fan ([@mib1185] - [#105867])
+- Add significant Change support for media player ([@mib1185] - [#105999])
+- Add supports_response to ServiceRegistry.register() ([@rikroe] - [#106164])
+- Changed setup of easyEnergy services ([@klaasnicolaas] - [#106288])
+- Add translatable title to Persistent Notification ([@steffenrapp] - [#104661])
+- Allow clearing To-do list item extended fields ([@allenporter] - [#106208])
+- Fix Hydrawise watering time duration unit ([@dknowles2] - [#105919])
+- Revert "Add preselect_remember_me to `/auth/providers`" ([@frenck] - [#106472])
+- Fix roon volume truncation bug ([@pavoni] - [#105696])
+- Use entity descriptions in Netgear LTE ([@joostlek] - [#106414])
+- Adjust the GitHub config flow ([@ludeeus] - [#105295])
+- Bump PyViCare to 2.32.0 ([@CFenner] - [#106467])
+- Fix Generic Camera interval calculation ([@dschall] - [#105820])
+- Use snapshot assertion in homekit_controller diagnostics tests ([@jpbede] - [#105647])
+- Refactor Tado to use OAuth in the DeviceTracker ([@erwindouna] - [#102610])
+- Add config flow to trend ([@jpbede] - [#99761])
+- Implement mode validation in Climate entity component ([@gjohansson-ST] - [#105745])
+- Add device to swiss public transport ([@miaucl] - [#106475])
+- Jinja filter and function for `median` and `statistical_mode` ([@TheFes] - [#105554])
+- Remove initial entity update from swiss_public_transport ([@miaucl] - [#106478])
+- Remove hardcoded bits from LiteJet integration ([@joncar] - [#106281])
+- Delay all ZHA polling until initialization of entities has completed ([@dmulcahey] - [#105814])
+- Add Comelit alarm zones sensor ([@chemelli74] - [#106421])
+- Add significant Change support for number ([@mib1185] - [#105863])
+- Add more fine grained control over Matter server commissioning for the Companion apps ([@marcelveldt] - [#106237])
+- Add more Withings measurement sensors ([@joostlek] - [#105561])
+- Fix Starline attributes timezone ([@Anonym-tsk] - [#105645])
+- Match ZHA Custom ClusterHandler on a Custom Cluster using a unique id for the quirk ([@Caius-Bonus] - [#101709])
+- Add query type validation independent of declaration position for SQL ([@dougiteixeira] - [#105921])
+- Update frontend to 20231227.0 ([@bramkragten] - [#106486])
+- Check and register cloud hook if needed for mobile_app ([@edenhaus] - [#106461])
+- Add significant Change support for cover ([@mib1185] - [#106016])
+- Bump aiohttp-zlib-ng to 0.1.3 ([@bdraco] - [#106489])
+- Add Color Night Vision switch for UniFi Protect ([@cmsimike] - [#106500])
+- Bump zwave-js-server-python to 0.55.2 ([@MartinHjelmare] - [#106496])
+- Bump ZHA quirks to 109 and add associated configuration entities ([@dmulcahey] - [#106492])
+- Add ZHA configuration number entity to set/get thermostat cluster local temperature offset ([@theorlangur] - [#105765])
+- Opentherm gateway: Set unit of measurement for count sensors ([@bajansen] - [#106313])
+- Synchronize and cache Generic Camera still image fetching ([@dschall] - [#105821])
+- Add AsusWrt temperature sensors provided by http protocol ([@ollo69] - [#105692])
+- Move services to entity services in blink ([@mkmer] - [#105413])
+- Skip activating/deactivating Vicare standby preset ([@barche] - [#106476])
+- Handle AttributeError in ViCare integration ([@CFenner] - [#106470])
+- Avoid changing state of reduced preset in ViCare integration ([@CFenner] - [#105642])
+- Use correct state for emulated_hue covers ([@Tho85] - [#106516])
+- Fix Tessie honk button ([@Bre77] - [#106518])
+- Fix run errors in Tessie ([@Bre77] - [#106521])
+- Add missing disks to Systemmonitor ([@gjohansson-ST] - [#106541])
+- Bump python-holidays to 0.39 ([@gjohansson-ST] - [#106550])
+- Remove default value from modbus retries ([@janiversen] - [#106551])
+- Fix holiday HA language not supported ([@gjohansson-ST] - [#106554])
+- Update frontend to 20231228.0 ([@bramkragten] - [#106556])
+- Replace dash in language if needed ([@gjohansson-ST] - [#106559])
+- Remove default value for modbus lazy_error ([@janiversen] - [#106561])
+- Only check known attributes in significant change support ([@mib1185] - [#106572])
+- Bump plexapi to 4.15.7 ([@jjlawren] - [#106576])
+- Revert "Set volume_step in aquostv media_player" ([@emontnemery] - [#106577])
+- Revert "Set volume_step in clementine media_player" ([@emontnemery] - [#106578])
+- Revert "Set volume_step in cmus media_player" ([@emontnemery] - [#106579])
+- Revert "Set volume_step in monoprice media_player" ([@emontnemery] - [#106580])
+- Revert "Set volume_step in sonos media_player" ([@emontnemery] - [#106581])
+- Revert "Set volume_step in bluesound media_player" ([@emontnemery] - [#106582])
+- Revert "Set volume_step in frontier_silicon media_player" ([@emontnemery] - [#106583])
+- Systemmonitor always load imported disks ([@gjohansson-ST] - [#106546])
+- Cleanup Sonos subscription used during setup ([@jjlawren] - [#106575])
+- Revert "Set volume_step in enigma2 media_player" ([@emontnemery] - [#106584])
+- Bump aiohomekit to 3.1.1 ([@bdraco] - [#106591])
+- Update platform back-compat for custom components without UpdateEntityFeature ([@bdraco] - [#106528])
+- Camera platform back-compat for custom components without CameraEntityFeature ([@bdraco] - [#106529])
+- Rename domain aepohio to aep_ohio ([@tronikos] - [#106536])
+- Move aeptexas to aep_texas ([@joostlek] - [#106595])
+- Fix Netgear LTE halting startup ([@tkdrob] - [#106598])
+- Add helper to report deprecated entity supported features magic numbers ([@bdraco] - [#106602])
+- Fix count bug in qBittorrent ([@finder39] - [#106603])
+- Climate platform back-compat for custom components without ClimateEntityFeature ([@bdraco] - [#106605])
+- Fan platform back-compat for custom components without FanEntityFeature ([@bdraco] - [#106607])
+- Water heater platform back-compat for custom components without WaterHeaterEntityFeature ([@bdraco] - [#106608])
+- Remote platform back-compat for custom components without RemoteEntityFeature ([@bdraco] - [#106609])
+- Humidifier platform back-compat for custom components without HumidifierEntityFeature ([@bdraco] - [#106613])
+- Vacuum platform back-compat for custom components without VacuumEntityFeature ([@bdraco] - [#106614])
+- Media player platform back-compat for custom components without MediaPlayerEntityFeature ([@bdraco] - [#106616])
+- Add deprecation warning for cover supported features when using magic numbers ([@bdraco] - [#106618])
+- Add deprecation warning for alarm_control_panel supported features when using magic numbers ([@bdraco] - [#106619])
+- Add deprecation warning for lock supported features when using magic numbers ([@bdraco] - [#106620])
+- Add deprecation warning for siren supported features when using magic numbers ([@bdraco] - [#106621])
+- Migrate light entity to use contains for LightEntityFeature with deprecation warnings ([@bdraco] - [#106622])
+- Fix missing await when running shutdown jobs ([@emontnemery] - [#106632])
+- Ensure it's safe to call Entity.__repr__ on non added entity ([@emontnemery] - [#106032])
+- Fix typo in Blink strings ([@Betacart] - [#106641])
+- Fixed native apparent temperature in WeatherEntity ([@kukulich] - [#106645])
+- Fix yolink entity descriptions ([@emontnemery] - [#106649])
+- Use set instead of list in Systemmonitor ([@gjohansson-ST] - [#106650])
+- Handle no permission for disks in Systemmonitor ([@gjohansson-ST] - [#106653])
+- Fix changed_variables in automation traces ([@emontnemery] - [#106665])
+- Bump thermobeacon-ble to 0.6.2 ([@bdraco] - [#106676])
+- Bump roombapy to 1.6.10 ([@bdraco] - [#106678])
+- Bump asyncsleepiq to v1.4.1 ([@kbickar] - [#106682])
+- Fix missed cached_property for hvac_mode in climate ([@bdraco] - [#106692])
+- Pin lxml to 4.9.4 ([@bdraco] - [#106694])
+- Add missing vacuum toggle service description ([@frenck] - [#106729])
+- Fix Zlinky energy polling in ZHA ([@dmulcahey] - [#106738])
+- Bump reolink_aio to 0.8.5 ([@starkillerOG] - [#106747])
+- Bump pyunifiprotect to 4.22.4 ([@bdraco] - [#106749])
+- Bump habluetooth to 2.0.1 ([@bdraco] - [#106750])
+- Bump ZHA dependencies ([@puddly] - [#106756])
+- Bump pyatmo to v8.0.2 ([@cgtobi] - [#106758])
+- Constrain dacite to at least 1.7.0 ([@Lash-L] - [#105709])
+- Fix Hydrawise data not refreshing ([@dknowles2] - [#105923])
+- Fix fints account type check ([@kilrogg] - [#106082])
+- Bump pyunifiprotect to v4.22.5 ([@AngellusMortis] - [#106781])
+- Bump pyschlage to 2023.12.1 ([@dknowles2] - [#106782])
+- Fix emulated_hue brightness check ([@bdraco] - [#106783])
+- Bump pyduotecno to 2024.1.1 ([@Cereal2nd] - [#106801])
+- Update frontend to 20240101.0 ([@bramkragten] - [#106808])
+- Bump bleak-retry-connector to 3.4.0 ([@bdraco] - [#106831])
+- Bump pySwitchbot to 0.43.0 ([@bdraco] - [#106833])
+- Bump yalexs-ble to 2.4.0 ([@bdraco] - [#106834])
+- Fix incorrect state in Yale Access Bluetooth when lock status is unknown ([@bdraco] - [#106851])
+- Map missing preset mapping for heat mode "ready" in smarttub ([@mdz] - [#106856])
+- Don't use entity_id in __repr__ of not added entity ([@emontnemery] - [#106861])
+- Changed setup of EnergyZero services ([@iamrgroot] - [#106224])
+- Move urllib3 constraint to pyproject.toml ([@autinerd] - [#106768])
+- Update switchbot to use close_stale_connections_by_address ([@bdraco] - [#106835])
+- Close stale connections in yalexs_ble to ensure setup can proceed ([@bdraco] - [#106842])
+- Bump Zigpy to 0.60.4 ([@dmulcahey] - [#106870])
+- Improve fitbit authentication error handling ([@allenporter] - [#106885])
+- Improve To-do service error handling ([@allenporter] - [#106886])
+- Update frontend to 20240102.0 ([@bramkragten] - [#106898])
+- Apply late review comments on media player ([@mib1185] - [#106727])
+- Add try-catch for invalid auth to Tado ([@erwindouna] - [#106774])
+- Bump intents to 2024.1.2 ([@synesthesiam] - [#106909])
+- Avoid triggering ping device tracker `home` after restore ([@jpbede] - [#106913])
+- Remove group_members from significant attributes in media player ([@mib1185] - [#106916])
+- Change Tado deprecation version to 2024.7.0 ([@erwindouna] - [#106938])
+- Update frontend to 20240103.0 ([@bramkragten] - [#106942])
+
+## Release 2024.1.1 - January 5
+
+- Enable strict typing for airthings_ble ([@cdce8p] - [#106815])
+- Fix qBittorrent torrent count when empty ([@finder39] - [#106903])
+- Bump dropmqttapi to 1.0.2 ([@pfrazer] - [#106978])
+- bump openwebifpy to 4.0.3 ([@autinerd] - [#106593])
+- Close stale connections (Airthings BLE) ([@LaStrada] - [#106748])
+- Bump openwebifpy to 4.0.4 ([@autinerd] - [#107000])
+- Get Shelly RPC device `gen` from config entry data ([@bieniu] - [#107019])
+- Fix missing backwards compatiblity layer for humidifier supported_features ([@bdraco] - [#107026])
+- Use async_register in streamlabswater ([@joostlek] - [#107060])
+- Fix data access in streamlabs water ([@joostlek] - [#107062])
+- Fix mobile_app cloudhook creation ([@edenhaus] - [#107068])
+- Deduplicate handling of duplicated constants ([@emontnemery] - [#107074])
+- Fix missing backwards compatibility layer for water_heater supported_features ([@bdraco] - [#107091])
+- Bump habluetooth to 2.0.2 ([@bdraco] - [#107097])
+- Include deprecated constants in wildcard imports ([@emontnemery] - [#107114])
+- Update frontend to 20240104.0 ([@bramkragten] - [#107155])
+- Bump Orvibo to 1.1.2 ([@emericklaw] - [#107162])
+- Bump aiohomekit to 3.1.2 ([@bdraco] - [#107177])
+- Bump to PyTado 0.17.3 ([@erwindouna] - [#107181])
+- Fix switch states in AVM FRITZ!Box Tools ([@mib1185] - [#107183])
+- Hotfix cache logic bug in Tessie ([@Bre77] - [#107187])
+- Disable IPv6 in the opower integration to fix AEP utilities ([@tronikos] - [#107203])
+- Fix entity property cache creation arguments ([@ppetru] - [#107221])
+- Use supported_features_compat in update.install service ([@ludeeus] - [#107224])
+- Bump zwave-js-server-python to 0.55.3 ([@raman325] - [#107225])
+
+[#106593]: https://github.com/home-assistant/core/pull/106593
+[#106748]: https://github.com/home-assistant/core/pull/106748
+[#106815]: https://github.com/home-assistant/core/pull/106815
+[#106903]: https://github.com/home-assistant/core/pull/106903
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#106978]: https://github.com/home-assistant/core/pull/106978
+[#107000]: https://github.com/home-assistant/core/pull/107000
+[#107019]: https://github.com/home-assistant/core/pull/107019
+[#107026]: https://github.com/home-assistant/core/pull/107026
+[#107060]: https://github.com/home-assistant/core/pull/107060
+[#107062]: https://github.com/home-assistant/core/pull/107062
+[#107068]: https://github.com/home-assistant/core/pull/107068
+[#107074]: https://github.com/home-assistant/core/pull/107074
+[#107091]: https://github.com/home-assistant/core/pull/107091
+[#107097]: https://github.com/home-assistant/core/pull/107097
+[#107114]: https://github.com/home-assistant/core/pull/107114
+[#107155]: https://github.com/home-assistant/core/pull/107155
+[#107162]: https://github.com/home-assistant/core/pull/107162
+[#107177]: https://github.com/home-assistant/core/pull/107177
+[#107181]: https://github.com/home-assistant/core/pull/107181
+[#107183]: https://github.com/home-assistant/core/pull/107183
+[#107187]: https://github.com/home-assistant/core/pull/107187
+[#107203]: https://github.com/home-assistant/core/pull/107203
+[#107221]: https://github.com/home-assistant/core/pull/107221
+[#107224]: https://github.com/home-assistant/core/pull/107224
+[#107225]: https://github.com/home-assistant/core/pull/107225
+[@Bre77]: https://github.com/Bre77
+[@LaStrada]: https://github.com/LaStrada
+[@autinerd]: https://github.com/autinerd
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@cdce8p]: https://github.com/cdce8p
+[@edenhaus]: https://github.com/edenhaus
+[@emericklaw]: https://github.com/emericklaw
+[@emontnemery]: https://github.com/emontnemery
+[@erwindouna]: https://github.com/erwindouna
+[@finder39]: https://github.com/finder39
+[@frenck]: https://github.com/frenck
+[@joostlek]: https://github.com/joostlek
+[@ludeeus]: https://github.com/ludeeus
+[@mib1185]: https://github.com/mib1185
+[@pfrazer]: https://github.com/pfrazer
+[@ppetru]: https://github.com/ppetru
+[@raman325]: https://github.com/raman325
+[@tronikos]: https://github.com/tronikos
+
+## Release 2024.1.2 - January 6
+
+- Fix support for play/pause functionality in System Bridge ([@timmo001] - [#103423])
+- Fix passing correct location id to streamlabs water ([@joostlek] - [#107291])
+- Fix Shelly missing Gen value for older devices ([@thecode] - [#107294])
+- enigma2: fix exception when device in deep sleep, fix previous track ([@autinerd] - [#107296])
+- Fix assertion error when unloading ZHA with pollable entities ([@dmulcahey] - [#107311])
+
+[#103423]: https://github.com/home-assistant/core/pull/103423
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#107239]: https://github.com/home-assistant/core/pull/107239
+[#107291]: https://github.com/home-assistant/core/pull/107291
+[#107294]: https://github.com/home-assistant/core/pull/107294
+[#107296]: https://github.com/home-assistant/core/pull/107296
+[#107311]: https://github.com/home-assistant/core/pull/107311
+[@autinerd]: https://github.com/autinerd
+[@dmulcahey]: https://github.com/dmulcahey
+[@frenck]: https://github.com/frenck
+[@joostlek]: https://github.com/joostlek
+[@thecode]: https://github.com/thecode
+[@timmo001]: https://github.com/timmo001
+
+## Release 2024.1.3 - January 12
+
+- Add diagnostics to A. O. Smith integration ([@bdr99] - [#106343])
+- Catch missing inverter in Enphase Envoy ([@catsmanac] - [#106730])
+- Prevent toggle from calling stop on covers which do not support it ([@vexofp] - [#106848])
+- Fix missing unique_id for spt integration ([@miaucl] - [#107087])
+- Add support for the Spotify DJ ([@BTMorton] - [#107268])
+- Fix evohome high_precision temps not retreived consistently ([@zxdavb] - [#107366])
+- Reduce polling rate in Blink ([@mkmer] - [#107386])
+- Fix KNX telegram device trigger not firing after integration reload ([@farmio] - [#107388])
+- Fix language flavors in holiday ([@gjohansson-ST] - [#107392])
+- Handle OSError during setup for System Monitor ([@gjohansson-ST] - [#107396])
+- Remove name from faa_delays ([@joostlek] - [#107418])
+- Fix Swiss public transport initial data for attributes ([@miaucl] - [#107452])
+- Fix reauth flow for Comelit VEDO ([@chemelli74] - [#107461])
+- Fix asyncio.gather call ([@cdce8p] - [#107500])
+- Fix Luftdaten sensor id string ([@mrueg] - [#107506])
+- Bump zm-py version to v0.5.3 for zoneminder ([@nabbi] - [#107331])
+- Retry zoneminder connection setup ([@nabbi] - [#107519])
+- Don't include position in binary valve attributes ([@emontnemery] - [#107531])
+- Bump blinkpy to 0.22.5 ([@mkmer] - [#107537])
+- Bump reolink_aio to 0.8.6 ([@starkillerOG] - [#107541])
+- Bump mcstatus to v11.1.1 ([@elmurato] - [#107546])
+- Bump aioshelly to 7.1.0 ([@thecode] - [#107593])
+- Fix Tado unique mobile device dispatcher ([@erwindouna] - [#107631])
+- Fix tplink_lte setup ([@cdce8p] - [#107642])
+- Prevent overriding cached attribute as property ([@emontnemery] - [#107657])
+- Set max and min temp for flexit_bacnet climate entity ([@lellky] - [#107665])
+- Fix duplicated resource issue in System Monitor ([@gjohansson-ST] - [#107671])
+- Fix invalid alexa climate or water_heater state report with double listed targetSetpoint ([@jbouwh] - [#107673])
+- Redact sensitive data in alexa debug logging ([@jbouwh] - [#107676])
+- Fix `device_class` type for Shelly Gen1 sleeping sensors ([@bieniu] - [#107683])
+- Clamp tplink color temp to valid range ([@bdraco] - [#107695])
+- Fix cloud tts loading ([@MartinHjelmare] - [#107714])
+- Allow configuration of min_gradient from UI to be negative in Trend ([@jpbede] - [#107720])
+- Bump aioswitcher to 3.4.1 ([@YogevBokobza] - [#107730])
+- Fix mqtt text text min max config params can not be equal ([@jbouwh] - [#107738])
+- Fix "not-logged" edge cases for Comelit VEDO ([@chemelli74] - [#107741])
+- Fix Mac address check in kef integration ([@eugenet8k] - [#107746])
+- Fix ld2410_ble not being able to setup because it has a stale connection ([@bdraco] - [#107754])
+- Bump pyunifiprotect to 4.23.1 ([@AngellusMortis] - [#107758])
+- Bump pyunifiprotect to 4.23.2 ([@AngellusMortis] - [#107769])
+- Rework events for UniFi Protect ([@AngellusMortis] - [#107771])
+- Fix switcher kis logging incorrect property for device's name ([@idofl] - [#107775])
+- Bump bluetooth deps ([@bdraco] - [#107816])
+- Fix Tailwind cover stuck in closing state ([@frenck] - [#107827])
+- Fix for exception in screenlogic.set_color_mode ([@dieselrabbit] - [#107850])
+- Bump aio_geojson_generic_client to 0.4 ([@exxamalte] - [#107866])
+
+[#106343]: https://github.com/home-assistant/core/pull/106343
+[#106730]: https://github.com/home-assistant/core/pull/106730
+[#106848]: https://github.com/home-assistant/core/pull/106848
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#107087]: https://github.com/home-assistant/core/pull/107087
+[#107239]: https://github.com/home-assistant/core/pull/107239
+[#107268]: https://github.com/home-assistant/core/pull/107268
+[#107331]: https://github.com/home-assistant/core/pull/107331
+[#107365]: https://github.com/home-assistant/core/pull/107365
+[#107366]: https://github.com/home-assistant/core/pull/107366
+[#107386]: https://github.com/home-assistant/core/pull/107386
+[#107388]: https://github.com/home-assistant/core/pull/107388
+[#107392]: https://github.com/home-assistant/core/pull/107392
+[#107396]: https://github.com/home-assistant/core/pull/107396
+[#107418]: https://github.com/home-assistant/core/pull/107418
+[#107452]: https://github.com/home-assistant/core/pull/107452
+[#107461]: https://github.com/home-assistant/core/pull/107461
+[#107500]: https://github.com/home-assistant/core/pull/107500
+[#107506]: https://github.com/home-assistant/core/pull/107506
+[#107519]: https://github.com/home-assistant/core/pull/107519
+[#107531]: https://github.com/home-assistant/core/pull/107531
+[#107537]: https://github.com/home-assistant/core/pull/107537
+[#107541]: https://github.com/home-assistant/core/pull/107541
+[#107546]: https://github.com/home-assistant/core/pull/107546
+[#107593]: https://github.com/home-assistant/core/pull/107593
+[#107631]: https://github.com/home-assistant/core/pull/107631
+[#107642]: https://github.com/home-assistant/core/pull/107642
+[#107657]: https://github.com/home-assistant/core/pull/107657
+[#107665]: https://github.com/home-assistant/core/pull/107665
+[#107671]: https://github.com/home-assistant/core/pull/107671
+[#107673]: https://github.com/home-assistant/core/pull/107673
+[#107676]: https://github.com/home-assistant/core/pull/107676
+[#107683]: https://github.com/home-assistant/core/pull/107683
+[#107695]: https://github.com/home-assistant/core/pull/107695
+[#107714]: https://github.com/home-assistant/core/pull/107714
+[#107720]: https://github.com/home-assistant/core/pull/107720
+[#107730]: https://github.com/home-assistant/core/pull/107730
+[#107738]: https://github.com/home-assistant/core/pull/107738
+[#107741]: https://github.com/home-assistant/core/pull/107741
+[#107746]: https://github.com/home-assistant/core/pull/107746
+[#107754]: https://github.com/home-assistant/core/pull/107754
+[#107758]: https://github.com/home-assistant/core/pull/107758
+[#107769]: https://github.com/home-assistant/core/pull/107769
+[#107771]: https://github.com/home-assistant/core/pull/107771
+[#107775]: https://github.com/home-assistant/core/pull/107775
+[#107816]: https://github.com/home-assistant/core/pull/107816
+[#107827]: https://github.com/home-assistant/core/pull/107827
+[#107850]: https://github.com/home-assistant/core/pull/107850
+[#107866]: https://github.com/home-assistant/core/pull/107866
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@BTMorton]: https://github.com/BTMorton
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@YogevBokobza]: https://github.com/YogevBokobza
+[@bdr99]: https://github.com/bdr99
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@dieselrabbit]: https://github.com/dieselrabbit
+[@elmurato]: https://github.com/elmurato
+[@emontnemery]: https://github.com/emontnemery
+[@erwindouna]: https://github.com/erwindouna
+[@eugenet8k]: https://github.com/eugenet8k
+[@exxamalte]: https://github.com/exxamalte
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@idofl]: https://github.com/idofl
+[@jbouwh]: https://github.com/jbouwh
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@lellky]: https://github.com/lellky
+[@miaucl]: https://github.com/miaucl
+[@mkmer]: https://github.com/mkmer
+[@mrueg]: https://github.com/mrueg
+[@nabbi]: https://github.com/nabbi
+[@starkillerOG]: https://github.com/starkillerOG
+[@thecode]: https://github.com/thecode
+[@vexofp]: https://github.com/vexofp
+[@zxdavb]: https://github.com/zxdavb
+
+## Release 2024.1.4 - January 19
+
+- Fix MatrixBot not resolving room aliases per-command ([@PaarthShah] - [#106347])
+- Bump Pyenphase to 1.16.0 ([@catsmanac] - [#107719])
+- Fix loading empty yaml files with include_dir_named ([@pedrolamas] - [#107853])
+- Bump openwebifpy to 4.2.1 ([@autinerd] - [#107894])
+- Bump aiohomekit to 3.1.3 ([@bdraco] - [#107929])
+- Skip disk types in System Monitor ([@gjohansson-ST] - [#107943])
+- Fix duplicate unique id in System Monitor (again) ([@gjohansson-ST] - [#107947])
+- Bump pyenphase to 1.17.0 ([@catsmanac] - [#107950])
+- Update sleep period for Shelly devices with buggy fw ([@chemelli74] - [#107961])
+- Reload ZHA only a single time when the connection is lost multiple times ([@puddly] - [#107963])
+- Don't load entities for docker virtual ethernet interfaces in System Monitor ([@gjohansson-ST] - [#107966])
+- Improve coordinator logic in Tessie to allow sleep ([@Bre77] - [#107988])
+- Fix Shelly Gen1 entity description restore ([@thecode] - [#108052])
+- Fix malformed user input error on MJPEG config flow ([@codyc1515] - [#108058])
+- Fix turning on the light with a specific color ([@marcelveldt] - [#108080])
+- Bump Jinja2 to 3.1.3 ([@edenhaus] - [#108082])
+- Use compat for supported features in media player ([@joostlek] - [#108102])
+- Speed up ZHA initialization and improve startup responsiveness ([@puddly] - [#108103])
+- Bump `aioridwell` to 2024.01.0 ([@bachya] - [#108126])
+- Bump flipr-api to 1.5.1 ([@cnico] - [#108130])
+- Send target temp to Shelly TRV in F when needed ([@jra3] - [#108188])
+- Use cache update for WIFI blinds ([@starkillerOG] - [#108224])
+- Bump reolink_aio to 0.8.7 ([@starkillerOG] - [#108248])
+- Bump PyTado to 0.17.4 ([@erwindouna] - [#108255])
+- Bump aiounifi to v69 to improve websocket logging ([@Kane610] - [#108265])
+- Bump ZHA dependency zigpy to 0.60.6 ([@puddly] - [#108266])
+
+[#106347]: https://github.com/home-assistant/core/pull/106347
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#107239]: https://github.com/home-assistant/core/pull/107239
+[#107365]: https://github.com/home-assistant/core/pull/107365
+[#107719]: https://github.com/home-assistant/core/pull/107719
+[#107853]: https://github.com/home-assistant/core/pull/107853
+[#107883]: https://github.com/home-assistant/core/pull/107883
+[#107894]: https://github.com/home-assistant/core/pull/107894
+[#107929]: https://github.com/home-assistant/core/pull/107929
+[#107943]: https://github.com/home-assistant/core/pull/107943
+[#107947]: https://github.com/home-assistant/core/pull/107947
+[#107950]: https://github.com/home-assistant/core/pull/107950
+[#107961]: https://github.com/home-assistant/core/pull/107961
+[#107963]: https://github.com/home-assistant/core/pull/107963
+[#107966]: https://github.com/home-assistant/core/pull/107966
+[#107988]: https://github.com/home-assistant/core/pull/107988
+[#108052]: https://github.com/home-assistant/core/pull/108052
+[#108058]: https://github.com/home-assistant/core/pull/108058
+[#108080]: https://github.com/home-assistant/core/pull/108080
+[#108082]: https://github.com/home-assistant/core/pull/108082
+[#108102]: https://github.com/home-assistant/core/pull/108102
+[#108103]: https://github.com/home-assistant/core/pull/108103
+[#108126]: https://github.com/home-assistant/core/pull/108126
+[#108130]: https://github.com/home-assistant/core/pull/108130
+[#108134]: https://github.com/home-assistant/core/pull/108134
+[#108188]: https://github.com/home-assistant/core/pull/108188
+[#108224]: https://github.com/home-assistant/core/pull/108224
+[#108248]: https://github.com/home-assistant/core/pull/108248
+[#108255]: https://github.com/home-assistant/core/pull/108255
+[#108265]: https://github.com/home-assistant/core/pull/108265
+[#108266]: https://github.com/home-assistant/core/pull/108266
+[@Bre77]: https://github.com/Bre77
+[@Kane610]: https://github.com/Kane610
+[@PaarthShah]: https://github.com/PaarthShah
+[@allenporter]: https://github.com/allenporter
+[@autinerd]: https://github.com/autinerd
+[@bachya]: https://github.com/bachya
+[@bdraco]: https://github.com/bdraco
+[@catsmanac]: https://github.com/catsmanac
+[@chemelli74]: https://github.com/chemelli74
+[@cnico]: https://github.com/cnico
+[@codyc1515]: https://github.com/codyc1515
+[@edenhaus]: https://github.com/edenhaus
+[@erwindouna]: https://github.com/erwindouna
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@joostlek]: https://github.com/joostlek
+[@jra3]: https://github.com/jra3
+[@marcelveldt]: https://github.com/marcelveldt
+[@pedrolamas]: https://github.com/pedrolamas
+[@puddly]: https://github.com/puddly
+[@starkillerOG]: https://github.com/starkillerOG
+[@thecode]: https://github.com/thecode
+
+## Release 2024.1.5 - January 20
+
+- Bump async-upnp-client to 0.38.1 ([@StevenLooman] - [#108382])
+- Fix empty files included by !include_dir_named ([@emontnemery] - [#108489])
+- Pin pandas to 2.1.4 ([@frenck] - [#108509])
+
+[#108382]: https://github.com/home-assistant/core/pull/108382
+[#108489]: https://github.com/home-assistant/core/pull/108489
+[#108509]: https://github.com/home-assistant/core/pull/108509
+[@StevenLooman]: https://github.com/StevenLooman
+[@emontnemery]: https://github.com/emontnemery
+[@frenck]: https://github.com/frenck
+
+## Release 2024.1.6 - January 30
+
+- Pass default SSLContext instances to Octoprint custom HTTP sessions ([@vexofp] - [#105351])
+- Reduce overhead for google calendar state updates ([@allenporter] - [#108133])
+- Fix SleepIQ setting FootWarmer timer ([@jmwaldrip] - [#108433])
+- Fix zha illuminance measured value mapping ([@floriankisser] - [#108547])
+- Bump yolink-api to 0.3.6 fix aiomqtt breaking changes ([@matrixd2] - [#108555])
+- Update openerz-api to 0.3.0 ([@misialq] - [#108575])
+- Bump aiovodafone to 0.5.4 ([@chemelli74] - [#108592])
+- Bump airthings-ble to 0.6.0 ([@LaStrada] - [#108612])
+- Fix alexa fails reporting the state in specific cases ([@jbouwh] - [#108743])
+- Reduce log level of ZHA endpoint handler init ([@puddly] - [#108749])
+- Fix google_assistant climate modes might be None ([@jbouwh] - [#108793])
+- Fix unhandled exception on humidifier intent when available_modes is None ([@jbouwh] - [#108802])
+- Fix processing supported color modes for emulated_hue ([@jbouwh] - [#108803])
+- Reduce log level for creating ZHA cluster handler ([@TheJulianJES] - [#108809])
+- Fix stalls in config flow of APCUPSD ([@yuxincs] - [#108931])
+- Add strings to Sensirion BLE ([@joostlek] - [#109001])
+- Fix entity naming for heatpump heatings in ViCare ([@CFenner] - [#109013])
+- Bump aiohttp to 3.9.3 ([@bdraco] - [#109025])
+- Bump ZHA dependency zigpy to 0.60.7 ([@puddly] - [#109082])
+- Add missing abort message for Spotify ([@joostlek] - [#109102])
+
+[#105351]: https://github.com/home-assistant/core/pull/105351
+[#106970]: https://github.com/home-assistant/core/pull/106970
+[#107239]: https://github.com/home-assistant/core/pull/107239
+[#107365]: https://github.com/home-assistant/core/pull/107365
+[#107883]: https://github.com/home-assistant/core/pull/107883
+[#108133]: https://github.com/home-assistant/core/pull/108133
+[#108379]: https://github.com/home-assistant/core/pull/108379
+[#108433]: https://github.com/home-assistant/core/pull/108433
+[#108502]: https://github.com/home-assistant/core/pull/108502
+[#108547]: https://github.com/home-assistant/core/pull/108547
+[#108555]: https://github.com/home-assistant/core/pull/108555
+[#108575]: https://github.com/home-assistant/core/pull/108575
+[#108592]: https://github.com/home-assistant/core/pull/108592
+[#108612]: https://github.com/home-assistant/core/pull/108612
+[#108743]: https://github.com/home-assistant/core/pull/108743
+[#108749]: https://github.com/home-assistant/core/pull/108749
+[#108793]: https://github.com/home-assistant/core/pull/108793
+[#108802]: https://github.com/home-assistant/core/pull/108802
+[#108803]: https://github.com/home-assistant/core/pull/108803
+[#108809]: https://github.com/home-assistant/core/pull/108809
+[#108931]: https://github.com/home-assistant/core/pull/108931
+[#109001]: https://github.com/home-assistant/core/pull/109001
+[#109013]: https://github.com/home-assistant/core/pull/109013
+[#109025]: https://github.com/home-assistant/core/pull/109025
+[#109082]: https://github.com/home-assistant/core/pull/109082
+[#109102]: https://github.com/home-assistant/core/pull/109102
+[@CFenner]: https://github.com/CFenner
+[@LaStrada]: https://github.com/LaStrada
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@allenporter]: https://github.com/allenporter
+[@bdraco]: https://github.com/bdraco
+[@chemelli74]: https://github.com/chemelli74
+[@floriankisser]: https://github.com/floriankisser
+[@frenck]: https://github.com/frenck
+[@jbouwh]: https://github.com/jbouwh
+[@jmwaldrip]: https://github.com/jmwaldrip
+[@joostlek]: https://github.com/joostlek
+[@matrixd2]: https://github.com/matrixd2
+[@misialq]: https://github.com/misialq
+[@puddly]: https://github.com/puddly
+[@vexofp]: https://github.com/vexofp
+[@yuxincs]: https://github.com/yuxincs
+
+[#100573]: https://github.com/home-assistant/core/pull/100573
+[#100601]: https://github.com/home-assistant/core/pull/100601
+[#101102]: https://github.com/home-assistant/core/pull/101102
+[#101201]: https://github.com/home-assistant/core/pull/101201
+[#101374]: https://github.com/home-assistant/core/pull/101374
+[#101709]: https://github.com/home-assistant/core/pull/101709
+[#101748]: https://github.com/home-assistant/core/pull/101748
+[#102184]: https://github.com/home-assistant/core/pull/102184
+[#102610]: https://github.com/home-assistant/core/pull/102610
+[#102928]: https://github.com/home-assistant/core/pull/102928
+[#102978]: https://github.com/home-assistant/core/pull/102978
+[#103396]: https://github.com/home-assistant/core/pull/103396
+[#103498]: https://github.com/home-assistant/core/pull/103498
+[#103660]: https://github.com/home-assistant/core/pull/103660
+[#103781]: https://github.com/home-assistant/core/pull/103781
+[#103795]: https://github.com/home-assistant/core/pull/103795
+[#103888]: https://github.com/home-assistant/core/pull/103888
+[#103912]: https://github.com/home-assistant/core/pull/103912
+[#103916]: https://github.com/home-assistant/core/pull/103916
+[#103960]: https://github.com/home-assistant/core/pull/103960
+[#104087]: https://github.com/home-assistant/core/pull/104087
+[#104142]: https://github.com/home-assistant/core/pull/104142
+[#104157]: https://github.com/home-assistant/core/pull/104157
+[#104206]: https://github.com/home-assistant/core/pull/104206
+[#104238]: https://github.com/home-assistant/core/pull/104238
+[#104242]: https://github.com/home-assistant/core/pull/104242
+[#104275]: https://github.com/home-assistant/core/pull/104275
+[#104291]: https://github.com/home-assistant/core/pull/104291
+[#104319]: https://github.com/home-assistant/core/pull/104319
+[#104391]: https://github.com/home-assistant/core/pull/104391
+[#104503]: https://github.com/home-assistant/core/pull/104503
+[#104566]: https://github.com/home-assistant/core/pull/104566
+[#104571]: https://github.com/home-assistant/core/pull/104571
+[#104577]: https://github.com/home-assistant/core/pull/104577
+[#104614]: https://github.com/home-assistant/core/pull/104614
+[#104627]: https://github.com/home-assistant/core/pull/104627
+[#104661]: https://github.com/home-assistant/core/pull/104661
+[#104684]: https://github.com/home-assistant/core/pull/104684
+[#104713]: https://github.com/home-assistant/core/pull/104713
+[#104716]: https://github.com/home-assistant/core/pull/104716
+[#104718]: https://github.com/home-assistant/core/pull/104718
+[#104720]: https://github.com/home-assistant/core/pull/104720
+[#104730]: https://github.com/home-assistant/core/pull/104730
+[#104733]: https://github.com/home-assistant/core/pull/104733
+[#104739]: https://github.com/home-assistant/core/pull/104739
+[#104746]: https://github.com/home-assistant/core/pull/104746
+[#104748]: https://github.com/home-assistant/core/pull/104748
+[#104749]: https://github.com/home-assistant/core/pull/104749
+[#104753]: https://github.com/home-assistant/core/pull/104753
+[#104769]: https://github.com/home-assistant/core/pull/104769
+[#104793]: https://github.com/home-assistant/core/pull/104793
+[#104807]: https://github.com/home-assistant/core/pull/104807
+[#104809]: https://github.com/home-assistant/core/pull/104809
+[#104821]: https://github.com/home-assistant/core/pull/104821
+[#104822]: https://github.com/home-assistant/core/pull/104822
+[#104823]: https://github.com/home-assistant/core/pull/104823
+[#104824]: https://github.com/home-assistant/core/pull/104824
+[#104825]: https://github.com/home-assistant/core/pull/104825
+[#104826]: https://github.com/home-assistant/core/pull/104826
+[#104828]: https://github.com/home-assistant/core/pull/104828
+[#104831]: https://github.com/home-assistant/core/pull/104831
+[#104832]: https://github.com/home-assistant/core/pull/104832
+[#104839]: https://github.com/home-assistant/core/pull/104839
+[#104840]: https://github.com/home-assistant/core/pull/104840
+[#104842]: https://github.com/home-assistant/core/pull/104842
+[#104849]: https://github.com/home-assistant/core/pull/104849
+[#104854]: https://github.com/home-assistant/core/pull/104854
+[#104864]: https://github.com/home-assistant/core/pull/104864
+[#104866]: https://github.com/home-assistant/core/pull/104866
+[#104874]: https://github.com/home-assistant/core/pull/104874
+[#104875]: https://github.com/home-assistant/core/pull/104875
+[#104877]: https://github.com/home-assistant/core/pull/104877
+[#104878]: https://github.com/home-assistant/core/pull/104878
+[#104881]: https://github.com/home-assistant/core/pull/104881
+[#104882]: https://github.com/home-assistant/core/pull/104882
+[#104889]: https://github.com/home-assistant/core/pull/104889
+[#104892]: https://github.com/home-assistant/core/pull/104892
+[#104906]: https://github.com/home-assistant/core/pull/104906
+[#104909]: https://github.com/home-assistant/core/pull/104909
+[#104918]: https://github.com/home-assistant/core/pull/104918
+[#104919]: https://github.com/home-assistant/core/pull/104919
+[#104925]: https://github.com/home-assistant/core/pull/104925
+[#104930]: https://github.com/home-assistant/core/pull/104930
+[#104932]: https://github.com/home-assistant/core/pull/104932
+[#104935]: https://github.com/home-assistant/core/pull/104935
+[#104937]: https://github.com/home-assistant/core/pull/104937
+[#104949]: https://github.com/home-assistant/core/pull/104949
+[#104957]: https://github.com/home-assistant/core/pull/104957
+[#104958]: https://github.com/home-assistant/core/pull/104958
+[#104960]: https://github.com/home-assistant/core/pull/104960
+[#104962]: https://github.com/home-assistant/core/pull/104962
+[#104964]: https://github.com/home-assistant/core/pull/104964
+[#104965]: https://github.com/home-assistant/core/pull/104965
+[#104969]: https://github.com/home-assistant/core/pull/104969
+[#104970]: https://github.com/home-assistant/core/pull/104970
+[#104976]: https://github.com/home-assistant/core/pull/104976
+[#104977]: https://github.com/home-assistant/core/pull/104977
+[#104978]: https://github.com/home-assistant/core/pull/104978
+[#104979]: https://github.com/home-assistant/core/pull/104979
+[#104985]: https://github.com/home-assistant/core/pull/104985
+[#104986]: https://github.com/home-assistant/core/pull/104986
+[#104989]: https://github.com/home-assistant/core/pull/104989
+[#104997]: https://github.com/home-assistant/core/pull/104997
+[#104998]: https://github.com/home-assistant/core/pull/104998
+[#105008]: https://github.com/home-assistant/core/pull/105008
+[#105010]: https://github.com/home-assistant/core/pull/105010
+[#105012]: https://github.com/home-assistant/core/pull/105012
+[#105015]: https://github.com/home-assistant/core/pull/105015
+[#105020]: https://github.com/home-assistant/core/pull/105020
+[#105021]: https://github.com/home-assistant/core/pull/105021
+[#105024]: https://github.com/home-assistant/core/pull/105024
+[#105027]: https://github.com/home-assistant/core/pull/105027
+[#105029]: https://github.com/home-assistant/core/pull/105029
+[#105030]: https://github.com/home-assistant/core/pull/105030
+[#105037]: https://github.com/home-assistant/core/pull/105037
+[#105039]: https://github.com/home-assistant/core/pull/105039
+[#105046]: https://github.com/home-assistant/core/pull/105046
+[#105052]: https://github.com/home-assistant/core/pull/105052
+[#105062]: https://github.com/home-assistant/core/pull/105062
+[#105067]: https://github.com/home-assistant/core/pull/105067
+[#105077]: https://github.com/home-assistant/core/pull/105077
+[#105078]: https://github.com/home-assistant/core/pull/105078
+[#105080]: https://github.com/home-assistant/core/pull/105080
+[#105083]: https://github.com/home-assistant/core/pull/105083
+[#105094]: https://github.com/home-assistant/core/pull/105094
+[#105096]: https://github.com/home-assistant/core/pull/105096
+[#105108]: https://github.com/home-assistant/core/pull/105108
+[#105109]: https://github.com/home-assistant/core/pull/105109
+[#105110]: https://github.com/home-assistant/core/pull/105110
+[#105111]: https://github.com/home-assistant/core/pull/105111
+[#105114]: https://github.com/home-assistant/core/pull/105114
+[#105117]: https://github.com/home-assistant/core/pull/105117
+[#105118]: https://github.com/home-assistant/core/pull/105118
+[#105119]: https://github.com/home-assistant/core/pull/105119
+[#105121]: https://github.com/home-assistant/core/pull/105121
+[#105123]: https://github.com/home-assistant/core/pull/105123
+[#105125]: https://github.com/home-assistant/core/pull/105125
+[#105131]: https://github.com/home-assistant/core/pull/105131
+[#105138]: https://github.com/home-assistant/core/pull/105138
+[#105141]: https://github.com/home-assistant/core/pull/105141
+[#105142]: https://github.com/home-assistant/core/pull/105142
+[#105147]: https://github.com/home-assistant/core/pull/105147
+[#105149]: https://github.com/home-assistant/core/pull/105149
+[#105173]: https://github.com/home-assistant/core/pull/105173
+[#105175]: https://github.com/home-assistant/core/pull/105175
+[#105193]: https://github.com/home-assistant/core/pull/105193
+[#105211]: https://github.com/home-assistant/core/pull/105211
+[#105224]: https://github.com/home-assistant/core/pull/105224
+[#105228]: https://github.com/home-assistant/core/pull/105228
+[#105243]: https://github.com/home-assistant/core/pull/105243
+[#105261]: https://github.com/home-assistant/core/pull/105261
+[#105274]: https://github.com/home-assistant/core/pull/105274
+[#105275]: https://github.com/home-assistant/core/pull/105275
+[#105280]: https://github.com/home-assistant/core/pull/105280
+[#105282]: https://github.com/home-assistant/core/pull/105282
+[#105286]: https://github.com/home-assistant/core/pull/105286
+[#105287]: https://github.com/home-assistant/core/pull/105287
+[#105295]: https://github.com/home-assistant/core/pull/105295
+[#105298]: https://github.com/home-assistant/core/pull/105298
+[#105301]: https://github.com/home-assistant/core/pull/105301
+[#105302]: https://github.com/home-assistant/core/pull/105302
+[#105320]: https://github.com/home-assistant/core/pull/105320
+[#105333]: https://github.com/home-assistant/core/pull/105333
+[#105340]: https://github.com/home-assistant/core/pull/105340
+[#105341]: https://github.com/home-assistant/core/pull/105341
+[#105343]: https://github.com/home-assistant/core/pull/105343
+[#105348]: https://github.com/home-assistant/core/pull/105348
+[#105353]: https://github.com/home-assistant/core/pull/105353
+[#105354]: https://github.com/home-assistant/core/pull/105354
+[#105358]: https://github.com/home-assistant/core/pull/105358
+[#105362]: https://github.com/home-assistant/core/pull/105362
+[#105376]: https://github.com/home-assistant/core/pull/105376
+[#105377]: https://github.com/home-assistant/core/pull/105377
+[#105379]: https://github.com/home-assistant/core/pull/105379
+[#105384]: https://github.com/home-assistant/core/pull/105384
+[#105403]: https://github.com/home-assistant/core/pull/105403
+[#105407]: https://github.com/home-assistant/core/pull/105407
+[#105408]: https://github.com/home-assistant/core/pull/105408
+[#105409]: https://github.com/home-assistant/core/pull/105409
+[#105410]: https://github.com/home-assistant/core/pull/105410
+[#105411]: https://github.com/home-assistant/core/pull/105411
+[#105413]: https://github.com/home-assistant/core/pull/105413
+[#105414]: https://github.com/home-assistant/core/pull/105414
+[#105418]: https://github.com/home-assistant/core/pull/105418
+[#105419]: https://github.com/home-assistant/core/pull/105419
+[#105420]: https://github.com/home-assistant/core/pull/105420
+[#105421]: https://github.com/home-assistant/core/pull/105421
+[#105422]: https://github.com/home-assistant/core/pull/105422
+[#105423]: https://github.com/home-assistant/core/pull/105423
+[#105428]: https://github.com/home-assistant/core/pull/105428
+[#105430]: https://github.com/home-assistant/core/pull/105430
+[#105454]: https://github.com/home-assistant/core/pull/105454
+[#105472]: https://github.com/home-assistant/core/pull/105472
+[#105479]: https://github.com/home-assistant/core/pull/105479
+[#105482]: https://github.com/home-assistant/core/pull/105482
+[#105486]: https://github.com/home-assistant/core/pull/105486
+[#105487]: https://github.com/home-assistant/core/pull/105487
+[#105490]: https://github.com/home-assistant/core/pull/105490
+[#105494]: https://github.com/home-assistant/core/pull/105494
+[#105502]: https://github.com/home-assistant/core/pull/105502
+[#105510]: https://github.com/home-assistant/core/pull/105510
+[#105512]: https://github.com/home-assistant/core/pull/105512
+[#105518]: https://github.com/home-assistant/core/pull/105518
+[#105520]: https://github.com/home-assistant/core/pull/105520
+[#105521]: https://github.com/home-assistant/core/pull/105521
+[#105522]: https://github.com/home-assistant/core/pull/105522
+[#105523]: https://github.com/home-assistant/core/pull/105523
+[#105526]: https://github.com/home-assistant/core/pull/105526
+[#105528]: https://github.com/home-assistant/core/pull/105528
+[#105529]: https://github.com/home-assistant/core/pull/105529
+[#105531]: https://github.com/home-assistant/core/pull/105531
+[#105534]: https://github.com/home-assistant/core/pull/105534
+[#105536]: https://github.com/home-assistant/core/pull/105536
+[#105537]: https://github.com/home-assistant/core/pull/105537
+[#105541]: https://github.com/home-assistant/core/pull/105541
+[#105546]: https://github.com/home-assistant/core/pull/105546
+[#105552]: https://github.com/home-assistant/core/pull/105552
+[#105553]: https://github.com/home-assistant/core/pull/105553
+[#105554]: https://github.com/home-assistant/core/pull/105554
+[#105555]: https://github.com/home-assistant/core/pull/105555
+[#105556]: https://github.com/home-assistant/core/pull/105556
+[#105558]: https://github.com/home-assistant/core/pull/105558
+[#105559]: https://github.com/home-assistant/core/pull/105559
+[#105561]: https://github.com/home-assistant/core/pull/105561
+[#105562]: https://github.com/home-assistant/core/pull/105562
+[#105566]: https://github.com/home-assistant/core/pull/105566
+[#105568]: https://github.com/home-assistant/core/pull/105568
+[#105570]: https://github.com/home-assistant/core/pull/105570
+[#105571]: https://github.com/home-assistant/core/pull/105571
+[#105573]: https://github.com/home-assistant/core/pull/105573
+[#105574]: https://github.com/home-assistant/core/pull/105574
+[#105575]: https://github.com/home-assistant/core/pull/105575
+[#105577]: https://github.com/home-assistant/core/pull/105577
+[#105584]: https://github.com/home-assistant/core/pull/105584
+[#105586]: https://github.com/home-assistant/core/pull/105586
+[#105591]: https://github.com/home-assistant/core/pull/105591
+[#105592]: https://github.com/home-assistant/core/pull/105592
+[#105594]: https://github.com/home-assistant/core/pull/105594
+[#105595]: https://github.com/home-assistant/core/pull/105595
+[#105596]: https://github.com/home-assistant/core/pull/105596
+[#105600]: https://github.com/home-assistant/core/pull/105600
+[#105602]: https://github.com/home-assistant/core/pull/105602
+[#105603]: https://github.com/home-assistant/core/pull/105603
+[#105604]: https://github.com/home-assistant/core/pull/105604
+[#105607]: https://github.com/home-assistant/core/pull/105607
+[#105609]: https://github.com/home-assistant/core/pull/105609
+[#105610]: https://github.com/home-assistant/core/pull/105610
+[#105611]: https://github.com/home-assistant/core/pull/105611
+[#105613]: https://github.com/home-assistant/core/pull/105613
+[#105616]: https://github.com/home-assistant/core/pull/105616
+[#105620]: https://github.com/home-assistant/core/pull/105620
+[#105624]: https://github.com/home-assistant/core/pull/105624
+[#105625]: https://github.com/home-assistant/core/pull/105625
+[#105626]: https://github.com/home-assistant/core/pull/105626
+[#105627]: https://github.com/home-assistant/core/pull/105627
+[#105628]: https://github.com/home-assistant/core/pull/105628
+[#105629]: https://github.com/home-assistant/core/pull/105629
+[#105630]: https://github.com/home-assistant/core/pull/105630
+[#105633]: https://github.com/home-assistant/core/pull/105633
+[#105638]: https://github.com/home-assistant/core/pull/105638
+[#105640]: https://github.com/home-assistant/core/pull/105640
+[#105642]: https://github.com/home-assistant/core/pull/105642
+[#105644]: https://github.com/home-assistant/core/pull/105644
+[#105645]: https://github.com/home-assistant/core/pull/105645
+[#105646]: https://github.com/home-assistant/core/pull/105646
+[#105647]: https://github.com/home-assistant/core/pull/105647
+[#105648]: https://github.com/home-assistant/core/pull/105648
+[#105649]: https://github.com/home-assistant/core/pull/105649
+[#105650]: https://github.com/home-assistant/core/pull/105650
+[#105652]: https://github.com/home-assistant/core/pull/105652
+[#105653]: https://github.com/home-assistant/core/pull/105653
+[#105657]: https://github.com/home-assistant/core/pull/105657
+[#105665]: https://github.com/home-assistant/core/pull/105665
+[#105666]: https://github.com/home-assistant/core/pull/105666
+[#105667]: https://github.com/home-assistant/core/pull/105667
+[#105669]: https://github.com/home-assistant/core/pull/105669
+[#105670]: https://github.com/home-assistant/core/pull/105670
+[#105671]: https://github.com/home-assistant/core/pull/105671
+[#105672]: https://github.com/home-assistant/core/pull/105672
+[#105677]: https://github.com/home-assistant/core/pull/105677
+[#105678]: https://github.com/home-assistant/core/pull/105678
+[#105685]: https://github.com/home-assistant/core/pull/105685
+[#105687]: https://github.com/home-assistant/core/pull/105687
+[#105692]: https://github.com/home-assistant/core/pull/105692
+[#105696]: https://github.com/home-assistant/core/pull/105696
+[#105701]: https://github.com/home-assistant/core/pull/105701
+[#105709]: https://github.com/home-assistant/core/pull/105709
+[#105713]: https://github.com/home-assistant/core/pull/105713
+[#105715]: https://github.com/home-assistant/core/pull/105715
+[#105717]: https://github.com/home-assistant/core/pull/105717
+[#105718]: https://github.com/home-assistant/core/pull/105718
+[#105721]: https://github.com/home-assistant/core/pull/105721
+[#105722]: https://github.com/home-assistant/core/pull/105722
+[#105723]: https://github.com/home-assistant/core/pull/105723
+[#105724]: https://github.com/home-assistant/core/pull/105724
+[#105728]: https://github.com/home-assistant/core/pull/105728
+[#105736]: https://github.com/home-assistant/core/pull/105736
+[#105739]: https://github.com/home-assistant/core/pull/105739
+[#105741]: https://github.com/home-assistant/core/pull/105741
+[#105742]: https://github.com/home-assistant/core/pull/105742
+[#105745]: https://github.com/home-assistant/core/pull/105745
+[#105746]: https://github.com/home-assistant/core/pull/105746
+[#105747]: https://github.com/home-assistant/core/pull/105747
+[#105748]: https://github.com/home-assistant/core/pull/105748
+[#105752]: https://github.com/home-assistant/core/pull/105752
+[#105759]: https://github.com/home-assistant/core/pull/105759
+[#105765]: https://github.com/home-assistant/core/pull/105765
+[#105766]: https://github.com/home-assistant/core/pull/105766
+[#105774]: https://github.com/home-assistant/core/pull/105774
+[#105781]: https://github.com/home-assistant/core/pull/105781
+[#105783]: https://github.com/home-assistant/core/pull/105783
+[#105791]: https://github.com/home-assistant/core/pull/105791
+[#105800]: https://github.com/home-assistant/core/pull/105800
+[#105813]: https://github.com/home-assistant/core/pull/105813
+[#105814]: https://github.com/home-assistant/core/pull/105814
+[#105820]: https://github.com/home-assistant/core/pull/105820
+[#105821]: https://github.com/home-assistant/core/pull/105821
+[#105823]: https://github.com/home-assistant/core/pull/105823
+[#105824]: https://github.com/home-assistant/core/pull/105824
+[#105834]: https://github.com/home-assistant/core/pull/105834
+[#105838]: https://github.com/home-assistant/core/pull/105838
+[#105841]: https://github.com/home-assistant/core/pull/105841
+[#105847]: https://github.com/home-assistant/core/pull/105847
+[#105848]: https://github.com/home-assistant/core/pull/105848
+[#105849]: https://github.com/home-assistant/core/pull/105849
+[#105855]: https://github.com/home-assistant/core/pull/105855
+[#105856]: https://github.com/home-assistant/core/pull/105856
+[#105857]: https://github.com/home-assistant/core/pull/105857
+[#105863]: https://github.com/home-assistant/core/pull/105863
+[#105866]: https://github.com/home-assistant/core/pull/105866
+[#105867]: https://github.com/home-assistant/core/pull/105867
+[#105868]: https://github.com/home-assistant/core/pull/105868
+[#105874]: https://github.com/home-assistant/core/pull/105874
+[#105876]: https://github.com/home-assistant/core/pull/105876
+[#105878]: https://github.com/home-assistant/core/pull/105878
+[#105880]: https://github.com/home-assistant/core/pull/105880
+[#105881]: https://github.com/home-assistant/core/pull/105881
+[#105884]: https://github.com/home-assistant/core/pull/105884
+[#105885]: https://github.com/home-assistant/core/pull/105885
+[#105892]: https://github.com/home-assistant/core/pull/105892
+[#105894]: https://github.com/home-assistant/core/pull/105894
+[#105908]: https://github.com/home-assistant/core/pull/105908
+[#105909]: https://github.com/home-assistant/core/pull/105909
+[#105911]: https://github.com/home-assistant/core/pull/105911
+[#105912]: https://github.com/home-assistant/core/pull/105912
+[#105914]: https://github.com/home-assistant/core/pull/105914
+[#105915]: https://github.com/home-assistant/core/pull/105915
+[#105916]: https://github.com/home-assistant/core/pull/105916
+[#105919]: https://github.com/home-assistant/core/pull/105919
+[#105921]: https://github.com/home-assistant/core/pull/105921
+[#105922]: https://github.com/home-assistant/core/pull/105922
+[#105923]: https://github.com/home-assistant/core/pull/105923
+[#105924]: https://github.com/home-assistant/core/pull/105924
+[#105926]: https://github.com/home-assistant/core/pull/105926
+[#105931]: https://github.com/home-assistant/core/pull/105931
+[#105937]: https://github.com/home-assistant/core/pull/105937
+[#105939]: https://github.com/home-assistant/core/pull/105939
+[#105941]: https://github.com/home-assistant/core/pull/105941
+[#105947]: https://github.com/home-assistant/core/pull/105947
+[#105949]: https://github.com/home-assistant/core/pull/105949
+[#105953]: https://github.com/home-assistant/core/pull/105953
+[#105957]: https://github.com/home-assistant/core/pull/105957
+[#105958]: https://github.com/home-assistant/core/pull/105958
+[#105959]: https://github.com/home-assistant/core/pull/105959
+[#105961]: https://github.com/home-assistant/core/pull/105961
+[#105965]: https://github.com/home-assistant/core/pull/105965
+[#105966]: https://github.com/home-assistant/core/pull/105966
+[#105968]: https://github.com/home-assistant/core/pull/105968
+[#105969]: https://github.com/home-assistant/core/pull/105969
+[#105970]: https://github.com/home-assistant/core/pull/105970
+[#105971]: https://github.com/home-assistant/core/pull/105971
+[#105972]: https://github.com/home-assistant/core/pull/105972
+[#105973]: https://github.com/home-assistant/core/pull/105973
+[#105974]: https://github.com/home-assistant/core/pull/105974
+[#105975]: https://github.com/home-assistant/core/pull/105975
+[#105976]: https://github.com/home-assistant/core/pull/105976
+[#105978]: https://github.com/home-assistant/core/pull/105978
+[#105980]: https://github.com/home-assistant/core/pull/105980
+[#105981]: https://github.com/home-assistant/core/pull/105981
+[#105982]: https://github.com/home-assistant/core/pull/105982
+[#105983]: https://github.com/home-assistant/core/pull/105983
+[#105984]: https://github.com/home-assistant/core/pull/105984
+[#105986]: https://github.com/home-assistant/core/pull/105986
+[#105988]: https://github.com/home-assistant/core/pull/105988
+[#105989]: https://github.com/home-assistant/core/pull/105989
+[#105999]: https://github.com/home-assistant/core/pull/105999
+[#106000]: https://github.com/home-assistant/core/pull/106000
+[#106002]: https://github.com/home-assistant/core/pull/106002
+[#106003]: https://github.com/home-assistant/core/pull/106003
+[#106005]: https://github.com/home-assistant/core/pull/106005
+[#106010]: https://github.com/home-assistant/core/pull/106010
+[#106011]: https://github.com/home-assistant/core/pull/106011
+[#106012]: https://github.com/home-assistant/core/pull/106012
+[#106013]: https://github.com/home-assistant/core/pull/106013
+[#106015]: https://github.com/home-assistant/core/pull/106015
+[#106016]: https://github.com/home-assistant/core/pull/106016
+[#106017]: https://github.com/home-assistant/core/pull/106017
+[#106018]: https://github.com/home-assistant/core/pull/106018
+[#106020]: https://github.com/home-assistant/core/pull/106020
+[#106021]: https://github.com/home-assistant/core/pull/106021
+[#106022]: https://github.com/home-assistant/core/pull/106022
+[#106023]: https://github.com/home-assistant/core/pull/106023
+[#106024]: https://github.com/home-assistant/core/pull/106024
+[#106025]: https://github.com/home-assistant/core/pull/106025
+[#106032]: https://github.com/home-assistant/core/pull/106032
+[#106033]: https://github.com/home-assistant/core/pull/106033
+[#106035]: https://github.com/home-assistant/core/pull/106035
+[#106037]: https://github.com/home-assistant/core/pull/106037
+[#106039]: https://github.com/home-assistant/core/pull/106039
+[#106042]: https://github.com/home-assistant/core/pull/106042
+[#106045]: https://github.com/home-assistant/core/pull/106045
+[#106047]: https://github.com/home-assistant/core/pull/106047
+[#106049]: https://github.com/home-assistant/core/pull/106049
+[#106050]: https://github.com/home-assistant/core/pull/106050
+[#106051]: https://github.com/home-assistant/core/pull/106051
+[#106053]: https://github.com/home-assistant/core/pull/106053
+[#106054]: https://github.com/home-assistant/core/pull/106054
+[#106058]: https://github.com/home-assistant/core/pull/106058
+[#106059]: https://github.com/home-assistant/core/pull/106059
+[#106063]: https://github.com/home-assistant/core/pull/106063
+[#106064]: https://github.com/home-assistant/core/pull/106064
+[#106067]: https://github.com/home-assistant/core/pull/106067
+[#106073]: https://github.com/home-assistant/core/pull/106073
+[#106079]: https://github.com/home-assistant/core/pull/106079
+[#106080]: https://github.com/home-assistant/core/pull/106080
+[#106082]: https://github.com/home-assistant/core/pull/106082
+[#106087]: https://github.com/home-assistant/core/pull/106087
+[#106093]: https://github.com/home-assistant/core/pull/106093
+[#106095]: https://github.com/home-assistant/core/pull/106095
+[#106096]: https://github.com/home-assistant/core/pull/106096
+[#106098]: https://github.com/home-assistant/core/pull/106098
+[#106099]: https://github.com/home-assistant/core/pull/106099
+[#106109]: https://github.com/home-assistant/core/pull/106109
+[#106111]: https://github.com/home-assistant/core/pull/106111
+[#106112]: https://github.com/home-assistant/core/pull/106112
+[#106113]: https://github.com/home-assistant/core/pull/106113
+[#106114]: https://github.com/home-assistant/core/pull/106114
+[#106116]: https://github.com/home-assistant/core/pull/106116
+[#106117]: https://github.com/home-assistant/core/pull/106117
+[#106120]: https://github.com/home-assistant/core/pull/106120
+[#106121]: https://github.com/home-assistant/core/pull/106121
+[#106129]: https://github.com/home-assistant/core/pull/106129
+[#106135]: https://github.com/home-assistant/core/pull/106135
+[#106137]: https://github.com/home-assistant/core/pull/106137
+[#106138]: https://github.com/home-assistant/core/pull/106138
+[#106139]: https://github.com/home-assistant/core/pull/106139
+[#106141]: https://github.com/home-assistant/core/pull/106141
+[#106145]: https://github.com/home-assistant/core/pull/106145
+[#106146]: https://github.com/home-assistant/core/pull/106146
+[#106151]: https://github.com/home-assistant/core/pull/106151
+[#106153]: https://github.com/home-assistant/core/pull/106153
+[#106156]: https://github.com/home-assistant/core/pull/106156
+[#106158]: https://github.com/home-assistant/core/pull/106158
+[#106160]: https://github.com/home-assistant/core/pull/106160
+[#106164]: https://github.com/home-assistant/core/pull/106164
+[#106165]: https://github.com/home-assistant/core/pull/106165
+[#106168]: https://github.com/home-assistant/core/pull/106168
+[#106169]: https://github.com/home-assistant/core/pull/106169
+[#106174]: https://github.com/home-assistant/core/pull/106174
+[#106175]: https://github.com/home-assistant/core/pull/106175
+[#106181]: https://github.com/home-assistant/core/pull/106181
+[#106189]: https://github.com/home-assistant/core/pull/106189
+[#106193]: https://github.com/home-assistant/core/pull/106193
+[#106194]: https://github.com/home-assistant/core/pull/106194
+[#106199]: https://github.com/home-assistant/core/pull/106199
+[#106200]: https://github.com/home-assistant/core/pull/106200
+[#106203]: https://github.com/home-assistant/core/pull/106203
+[#106205]: https://github.com/home-assistant/core/pull/106205
+[#106206]: https://github.com/home-assistant/core/pull/106206
+[#106208]: https://github.com/home-assistant/core/pull/106208
+[#106209]: https://github.com/home-assistant/core/pull/106209
+[#106210]: https://github.com/home-assistant/core/pull/106210
+[#106212]: https://github.com/home-assistant/core/pull/106212
+[#106214]: https://github.com/home-assistant/core/pull/106214
+[#106216]: https://github.com/home-assistant/core/pull/106216
+[#106218]: https://github.com/home-assistant/core/pull/106218
+[#106221]: https://github.com/home-assistant/core/pull/106221
+[#106222]: https://github.com/home-assistant/core/pull/106222
+[#106224]: https://github.com/home-assistant/core/pull/106224
+[#106225]: https://github.com/home-assistant/core/pull/106225
+[#106226]: https://github.com/home-assistant/core/pull/106226
+[#106227]: https://github.com/home-assistant/core/pull/106227
+[#106229]: https://github.com/home-assistant/core/pull/106229
+[#106230]: https://github.com/home-assistant/core/pull/106230
+[#106231]: https://github.com/home-assistant/core/pull/106231
+[#106232]: https://github.com/home-assistant/core/pull/106232
+[#106233]: https://github.com/home-assistant/core/pull/106233
+[#106234]: https://github.com/home-assistant/core/pull/106234
+[#106235]: https://github.com/home-assistant/core/pull/106235
+[#106237]: https://github.com/home-assistant/core/pull/106237
+[#106238]: https://github.com/home-assistant/core/pull/106238
+[#106240]: https://github.com/home-assistant/core/pull/106240
+[#106241]: https://github.com/home-assistant/core/pull/106241
+[#106244]: https://github.com/home-assistant/core/pull/106244
+[#106245]: https://github.com/home-assistant/core/pull/106245
+[#106247]: https://github.com/home-assistant/core/pull/106247
+[#106248]: https://github.com/home-assistant/core/pull/106248
+[#106252]: https://github.com/home-assistant/core/pull/106252
+[#106253]: https://github.com/home-assistant/core/pull/106253
+[#106254]: https://github.com/home-assistant/core/pull/106254
+[#106255]: https://github.com/home-assistant/core/pull/106255
+[#106256]: https://github.com/home-assistant/core/pull/106256
+[#106257]: https://github.com/home-assistant/core/pull/106257
+[#106258]: https://github.com/home-assistant/core/pull/106258
+[#106259]: https://github.com/home-assistant/core/pull/106259
+[#106260]: https://github.com/home-assistant/core/pull/106260
+[#106261]: https://github.com/home-assistant/core/pull/106261
+[#106262]: https://github.com/home-assistant/core/pull/106262
+[#106264]: https://github.com/home-assistant/core/pull/106264
+[#106265]: https://github.com/home-assistant/core/pull/106265
+[#106266]: https://github.com/home-assistant/core/pull/106266
+[#106267]: https://github.com/home-assistant/core/pull/106267
+[#106268]: https://github.com/home-assistant/core/pull/106268
+[#106269]: https://github.com/home-assistant/core/pull/106269
+[#106271]: https://github.com/home-assistant/core/pull/106271
+[#106272]: https://github.com/home-assistant/core/pull/106272
+[#106274]: https://github.com/home-assistant/core/pull/106274
+[#106275]: https://github.com/home-assistant/core/pull/106275
+[#106277]: https://github.com/home-assistant/core/pull/106277
+[#106278]: https://github.com/home-assistant/core/pull/106278
+[#106281]: https://github.com/home-assistant/core/pull/106281
+[#106285]: https://github.com/home-assistant/core/pull/106285
+[#106287]: https://github.com/home-assistant/core/pull/106287
+[#106288]: https://github.com/home-assistant/core/pull/106288
+[#106290]: https://github.com/home-assistant/core/pull/106290
+[#106294]: https://github.com/home-assistant/core/pull/106294
+[#106295]: https://github.com/home-assistant/core/pull/106295
+[#106299]: https://github.com/home-assistant/core/pull/106299
+[#106301]: https://github.com/home-assistant/core/pull/106301
+[#106302]: https://github.com/home-assistant/core/pull/106302
+[#106309]: https://github.com/home-assistant/core/pull/106309
+[#106313]: https://github.com/home-assistant/core/pull/106313
+[#106314]: https://github.com/home-assistant/core/pull/106314
+[#106316]: https://github.com/home-assistant/core/pull/106316
+[#106318]: https://github.com/home-assistant/core/pull/106318
+[#106321]: https://github.com/home-assistant/core/pull/106321
+[#106323]: https://github.com/home-assistant/core/pull/106323
+[#106325]: https://github.com/home-assistant/core/pull/106325
+[#106326]: https://github.com/home-assistant/core/pull/106326
+[#106327]: https://github.com/home-assistant/core/pull/106327
+[#106329]: https://github.com/home-assistant/core/pull/106329
+[#106330]: https://github.com/home-assistant/core/pull/106330
+[#106332]: https://github.com/home-assistant/core/pull/106332
+[#106333]: https://github.com/home-assistant/core/pull/106333
+[#106334]: https://github.com/home-assistant/core/pull/106334
+[#106335]: https://github.com/home-assistant/core/pull/106335
+[#106336]: https://github.com/home-assistant/core/pull/106336
+[#106337]: https://github.com/home-assistant/core/pull/106337
+[#106338]: https://github.com/home-assistant/core/pull/106338
+[#106339]: https://github.com/home-assistant/core/pull/106339
+[#106340]: https://github.com/home-assistant/core/pull/106340
+[#106341]: https://github.com/home-assistant/core/pull/106341
+[#106344]: https://github.com/home-assistant/core/pull/106344
+[#106345]: https://github.com/home-assistant/core/pull/106345
+[#106346]: https://github.com/home-assistant/core/pull/106346
+[#106350]: https://github.com/home-assistant/core/pull/106350
+[#106352]: https://github.com/home-assistant/core/pull/106352
+[#106357]: https://github.com/home-assistant/core/pull/106357
+[#106378]: https://github.com/home-assistant/core/pull/106378
+[#106383]: https://github.com/home-assistant/core/pull/106383
+[#106384]: https://github.com/home-assistant/core/pull/106384
+[#106399]: https://github.com/home-assistant/core/pull/106399
+[#106400]: https://github.com/home-assistant/core/pull/106400
+[#106401]: https://github.com/home-assistant/core/pull/106401
+[#106402]: https://github.com/home-assistant/core/pull/106402
+[#106404]: https://github.com/home-assistant/core/pull/106404
+[#106405]: https://github.com/home-assistant/core/pull/106405
+[#106409]: https://github.com/home-assistant/core/pull/106409
+[#106414]: https://github.com/home-assistant/core/pull/106414
+[#106416]: https://github.com/home-assistant/core/pull/106416
+[#106418]: https://github.com/home-assistant/core/pull/106418
+[#106421]: https://github.com/home-assistant/core/pull/106421
+[#106425]: https://github.com/home-assistant/core/pull/106425
+[#106427]: https://github.com/home-assistant/core/pull/106427
+[#106429]: https://github.com/home-assistant/core/pull/106429
+[#106430]: https://github.com/home-assistant/core/pull/106430
+[#106431]: https://github.com/home-assistant/core/pull/106431
+[#106432]: https://github.com/home-assistant/core/pull/106432
+[#106433]: https://github.com/home-assistant/core/pull/106433
+[#106434]: https://github.com/home-assistant/core/pull/106434
+[#106435]: https://github.com/home-assistant/core/pull/106435
+[#106436]: https://github.com/home-assistant/core/pull/106436
+[#106437]: https://github.com/home-assistant/core/pull/106437
+[#106438]: https://github.com/home-assistant/core/pull/106438
+[#106448]: https://github.com/home-assistant/core/pull/106448
+[#106450]: https://github.com/home-assistant/core/pull/106450
+[#106455]: https://github.com/home-assistant/core/pull/106455
+[#106456]: https://github.com/home-assistant/core/pull/106456
+[#106457]: https://github.com/home-assistant/core/pull/106457
+[#106458]: https://github.com/home-assistant/core/pull/106458
+[#106461]: https://github.com/home-assistant/core/pull/106461
+[#106462]: https://github.com/home-assistant/core/pull/106462
+[#106463]: https://github.com/home-assistant/core/pull/106463
+[#106464]: https://github.com/home-assistant/core/pull/106464
+[#106465]: https://github.com/home-assistant/core/pull/106465
+[#106466]: https://github.com/home-assistant/core/pull/106466
+[#106467]: https://github.com/home-assistant/core/pull/106467
+[#106468]: https://github.com/home-assistant/core/pull/106468
+[#106470]: https://github.com/home-assistant/core/pull/106470
+[#106472]: https://github.com/home-assistant/core/pull/106472
+[#106475]: https://github.com/home-assistant/core/pull/106475
+[#106476]: https://github.com/home-assistant/core/pull/106476
+[#106478]: https://github.com/home-assistant/core/pull/106478
+[#106486]: https://github.com/home-assistant/core/pull/106486
+[#106489]: https://github.com/home-assistant/core/pull/106489
+[#106492]: https://github.com/home-assistant/core/pull/106492
+[#106496]: https://github.com/home-assistant/core/pull/106496
+[#106500]: https://github.com/home-assistant/core/pull/106500
+[#106516]: https://github.com/home-assistant/core/pull/106516
+[#106518]: https://github.com/home-assistant/core/pull/106518
+[#106521]: https://github.com/home-assistant/core/pull/106521
+[#106528]: https://github.com/home-assistant/core/pull/106528
+[#106529]: https://github.com/home-assistant/core/pull/106529
+[#106536]: https://github.com/home-assistant/core/pull/106536
+[#106541]: https://github.com/home-assistant/core/pull/106541
+[#106546]: https://github.com/home-assistant/core/pull/106546
+[#106550]: https://github.com/home-assistant/core/pull/106550
+[#106551]: https://github.com/home-assistant/core/pull/106551
+[#106554]: https://github.com/home-assistant/core/pull/106554
+[#106556]: https://github.com/home-assistant/core/pull/106556
+[#106559]: https://github.com/home-assistant/core/pull/106559
+[#106561]: https://github.com/home-assistant/core/pull/106561
+[#106572]: https://github.com/home-assistant/core/pull/106572
+[#106575]: https://github.com/home-assistant/core/pull/106575
+[#106576]: https://github.com/home-assistant/core/pull/106576
+[#106577]: https://github.com/home-assistant/core/pull/106577
+[#106578]: https://github.com/home-assistant/core/pull/106578
+[#106579]: https://github.com/home-assistant/core/pull/106579
+[#106580]: https://github.com/home-assistant/core/pull/106580
+[#106581]: https://github.com/home-assistant/core/pull/106581
+[#106582]: https://github.com/home-assistant/core/pull/106582
+[#106583]: https://github.com/home-assistant/core/pull/106583
+[#106584]: https://github.com/home-assistant/core/pull/106584
+[#106591]: https://github.com/home-assistant/core/pull/106591
+[#106595]: https://github.com/home-assistant/core/pull/106595
+[#106598]: https://github.com/home-assistant/core/pull/106598
+[#106602]: https://github.com/home-assistant/core/pull/106602
+[#106603]: https://github.com/home-assistant/core/pull/106603
+[#106605]: https://github.com/home-assistant/core/pull/106605
+[#106607]: https://github.com/home-assistant/core/pull/106607
+[#106608]: https://github.com/home-assistant/core/pull/106608
+[#106609]: https://github.com/home-assistant/core/pull/106609
+[#106613]: https://github.com/home-assistant/core/pull/106613
+[#106614]: https://github.com/home-assistant/core/pull/106614
+[#106616]: https://github.com/home-assistant/core/pull/106616
+[#106618]: https://github.com/home-assistant/core/pull/106618
+[#106619]: https://github.com/home-assistant/core/pull/106619
+[#106620]: https://github.com/home-assistant/core/pull/106620
+[#106621]: https://github.com/home-assistant/core/pull/106621
+[#106622]: https://github.com/home-assistant/core/pull/106622
+[#106632]: https://github.com/home-assistant/core/pull/106632
+[#106641]: https://github.com/home-assistant/core/pull/106641
+[#106645]: https://github.com/home-assistant/core/pull/106645
+[#106649]: https://github.com/home-assistant/core/pull/106649
+[#106650]: https://github.com/home-assistant/core/pull/106650
+[#106653]: https://github.com/home-assistant/core/pull/106653
+[#106665]: https://github.com/home-assistant/core/pull/106665
+[#106676]: https://github.com/home-assistant/core/pull/106676
+[#106678]: https://github.com/home-assistant/core/pull/106678
+[#106682]: https://github.com/home-assistant/core/pull/106682
+[#106692]: https://github.com/home-assistant/core/pull/106692
+[#106694]: https://github.com/home-assistant/core/pull/106694
+[#106727]: https://github.com/home-assistant/core/pull/106727
+[#106729]: https://github.com/home-assistant/core/pull/106729
+[#106738]: https://github.com/home-assistant/core/pull/106738
+[#106747]: https://github.com/home-assistant/core/pull/106747
+[#106749]: https://github.com/home-assistant/core/pull/106749
+[#106750]: https://github.com/home-assistant/core/pull/106750
+[#106756]: https://github.com/home-assistant/core/pull/106756
+[#106758]: https://github.com/home-assistant/core/pull/106758
+[#106768]: https://github.com/home-assistant/core/pull/106768
+[#106774]: https://github.com/home-assistant/core/pull/106774
+[#106781]: https://github.com/home-assistant/core/pull/106781
+[#106782]: https://github.com/home-assistant/core/pull/106782
+[#106783]: https://github.com/home-assistant/core/pull/106783
+[#106801]: https://github.com/home-assistant/core/pull/106801
+[#106808]: https://github.com/home-assistant/core/pull/106808
+[#106831]: https://github.com/home-assistant/core/pull/106831
+[#106833]: https://github.com/home-assistant/core/pull/106833
+[#106834]: https://github.com/home-assistant/core/pull/106834
+[#106835]: https://github.com/home-assistant/core/pull/106835
+[#106842]: https://github.com/home-assistant/core/pull/106842
+[#106851]: https://github.com/home-assistant/core/pull/106851
+[#106856]: https://github.com/home-assistant/core/pull/106856
+[#106861]: https://github.com/home-assistant/core/pull/106861
+[#106870]: https://github.com/home-assistant/core/pull/106870
+[#106885]: https://github.com/home-assistant/core/pull/106885
+[#106886]: https://github.com/home-assistant/core/pull/106886
+[#106898]: https://github.com/home-assistant/core/pull/106898
+[#106909]: https://github.com/home-assistant/core/pull/106909
+[#106913]: https://github.com/home-assistant/core/pull/106913
+[#106916]: https://github.com/home-assistant/core/pull/106916
+[#106938]: https://github.com/home-assistant/core/pull/106938
+[#106942]: https://github.com/home-assistant/core/pull/106942
+[#70365]: https://github.com/home-assistant/core/pull/70365
+[#79077]: https://github.com/home-assistant/core/pull/79077
+[#82483]: https://github.com/home-assistant/core/pull/82483
+[#85769]: https://github.com/home-assistant/core/pull/85769
+[#86026]: https://github.com/home-assistant/core/pull/86026
+[#87039]: https://github.com/home-assistant/core/pull/87039
+[#87493]: https://github.com/home-assistant/core/pull/87493
+[#88272]: https://github.com/home-assistant/core/pull/88272
+[#91165]: https://github.com/home-assistant/core/pull/91165
+[#92665]: https://github.com/home-assistant/core/pull/92665
+[#93002]: https://github.com/home-assistant/core/pull/93002
+[#94497]: https://github.com/home-assistant/core/pull/94497
+[#94824]: https://github.com/home-assistant/core/pull/94824
+[#95088]: https://github.com/home-assistant/core/pull/95088
+[#95594]: https://github.com/home-assistant/core/pull/95594
+[#95885]: https://github.com/home-assistant/core/pull/95885
+[#96182]: https://github.com/home-assistant/core/pull/96182
+[#96573]: https://github.com/home-assistant/core/pull/96573
+[#98841]: https://github.com/home-assistant/core/pull/98841
+[#99342]: https://github.com/home-assistant/core/pull/99342
+[#99538]: https://github.com/home-assistant/core/pull/99538
+[#99608]: https://github.com/home-assistant/core/pull/99608
+[#99743]: https://github.com/home-assistant/core/pull/99743
+[#99761]: https://github.com/home-assistant/core/pull/99761
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Anonym-tsk]: https://github.com/Anonym-tsk
+[@Betacart]: https://github.com/Betacart
+[@Bre77]: https://github.com/Bre77
+[@CFenner]: https://github.com/CFenner
+[@Caius-Bonus]: https://github.com/Caius-Bonus
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@DCSBL]: https://github.com/DCSBL
+[@Danielhiversen]: https://github.com/Danielhiversen
+[@DeerMaximum]: https://github.com/DeerMaximum
+[@Ernst79]: https://github.com/Ernst79
+[@Floris272]: https://github.com/Floris272
+[@JosephBlock]: https://github.com/JosephBlock
+[@Lash-L]: https://github.com/Lash-L
+[@Marco98]: https://github.com/Marco98
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@N3rdix]: https://github.com/N3rdix
+[@RJPoelstra]: https://github.com/RJPoelstra
+[@Shulyaka]: https://github.com/Shulyaka
+[@Shutgun]: https://github.com/Shutgun
+[@Sibgatulin]: https://github.com/Sibgatulin
+[@Skaronator]: https://github.com/Skaronator
+[@TheFes]: https://github.com/TheFes
+[@Tho85]: https://github.com/Tho85
+[@VIKTORVAV99]: https://github.com/VIKTORVAV99
+[@agners]: https://github.com/agners
+[@allenporter]: https://github.com/allenporter
+[@ashionky]: https://github.com/ashionky
+[@autinerd]: https://github.com/autinerd
+[@azogue]: https://github.com/azogue
+[@bajansen]: https://github.com/bajansen
+[@barche]: https://github.com/barche
+[@bdr99]: https://github.com/bdr99
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@briglx]: https://github.com/briglx
+[@c0ffeeca7]: https://github.com/c0ffeeca7
+[@cdce8p]: https://github.com/cdce8p
+[@cdnninja]: https://github.com/cdnninja
+[@cgarwood]: https://github.com/cgarwood
+[@cgtobi]: https://github.com/cgtobi
+[@chemelli74]: https://github.com/chemelli74
+[@chishm]: https://github.com/chishm
+[@cian]: https://github.com/cian
+[@cibernox]: https://github.com/cibernox
+[@cmsimike]: https://github.com/cmsimike
+[@cohenchris]: https://github.com/cohenchris
+[@davet2001]: https://github.com/davet2001
+[@dewdropawoo]: https://github.com/dewdropawoo
+[@dgomes]: https://github.com/dgomes
+[@dieselrabbit]: https://github.com/dieselrabbit
+[@dknowles2]: https://github.com/dknowles2
+[@dmulcahey]: https://github.com/dmulcahey
+[@doggkruse]: https://github.com/doggkruse
+[@dougiteixeira]: https://github.com/dougiteixeira
+[@dschall]: https://github.com/dschall
+[@dupondje]: https://github.com/dupondje
+[@edenhaus]: https://github.com/edenhaus
+[@elmurato]: https://github.com/elmurato
+[@elupus]: https://github.com/elupus
+[@emontnemery]: https://github.com/emontnemery
+[@engrbm87]: https://github.com/engrbm87
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@farmio]: https://github.com/farmio
+[@finder39]: https://github.com/finder39
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@iamrgroot]: https://github.com/iamrgroot
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jimmyd-be]: https://github.com/jimmyd-be
+[@jjlawren]: https://github.com/jjlawren
+[@joncar]: https://github.com/joncar
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@jrieger]: https://github.com/jrieger
+[@kbickar]: https://github.com/kbickar
+[@killer0071234]: https://github.com/killer0071234
+[@killercode]: https://github.com/killercode
+[@kilrogg]: https://github.com/kilrogg
+[@kingy444]: https://github.com/kingy444
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@krmarien]: https://github.com/krmarien
+[@kukulich]: https://github.com/kukulich
+[@lellky]: https://github.com/lellky
+[@ludeeus]: https://github.com/ludeeus
+[@marcelveldt]: https://github.com/marcelveldt
+[@mari8i]: https://github.com/mari8i
+[@mattmattmatt]: https://github.com/mattmattmatt
+[@mdunda]: https://github.com/mdunda
+[@mdz]: https://github.com/mdz
+[@miaucl]: https://github.com/miaucl
+[@mib1185]: https://github.com/mib1185
+[@mill1000]: https://github.com/mill1000
+[@mkmer]: https://github.com/mkmer
+[@mletenay]: https://github.com/mletenay
+[@nmaggioni]: https://github.com/nmaggioni
+[@ocalvo]: https://github.com/ocalvo
+[@ollo69]: https://github.com/ollo69
+[@osohotwateriot]: https://github.com/osohotwateriot
+[@oyvindwe]: https://github.com/oyvindwe
+[@pavoni]: https://github.com/pavoni
+[@pfrazer]: https://github.com/pfrazer
+[@pnbruckner]: https://github.com/pnbruckner
+[@puddly]: https://github.com/puddly
+[@rajlaud]: https://github.com/rajlaud
+[@raman325]: https://github.com/raman325
+[@raww]: https://github.com/raww
+[@rikroe]: https://github.com/rikroe
+[@rokam]: https://github.com/rokam
+[@scop]: https://github.com/scop
+[@sergeymaysak]: https://github.com/sergeymaysak
+[@slhad]: https://github.com/slhad
+[@starkillerOG]: https://github.com/starkillerOG
+[@steffenrapp]: https://github.com/steffenrapp
+[@synesthesiam]: https://github.com/synesthesiam
+[@tetele]: https://github.com/tetele
+[@theorlangur]: https://github.com/theorlangur
+[@tjhorner]: https://github.com/tjhorner
+[@tkdrob]: https://github.com/tkdrob
+[@tofuSCHNITZEL]: https://github.com/tofuSCHNITZEL
+[@tronikos]: https://github.com/tronikos
+[@tzahari]: https://github.com/tzahari
+[@vexofp]: https://github.com/vexofp
+[@yangbo1979]: https://github.com/yangbo1979
+[@yuxincs]: https://github.com/yuxincs
+[@zxdavb]: https://github.com/zxdavb
diff --git a/source/changelogs/core-2024.2.markdown b/source/changelogs/core-2024.2.markdown
new file mode 100644
index 000000000000..6190960036a4
--- /dev/null
+++ b/source/changelogs/core-2024.2.markdown
@@ -0,0 +1,3046 @@
+---
+title: Full changelog for Home Assistant Core 2024.2
+description: Detailed changelog for the Home Assistant Core 2024.2 release
+replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$
+---
+
+These are all the changes included in the Home Assistant Core 2024.2 release.
+
+For a summary in a more readable format:
+[Release notes blog for this release](/blog/2024/02/07/release-20242/).
+
+## All changes
+
+- Bump dawidd6/action-download-artifact from 2 to 3.0.0 (@dependabot - [#105712])
+- Use converter factory in sensor platform ([@bdraco] - [#106508])
+- Bump version to 2024.2.0dev0 ([@frenck] - [#106504])
+- Improve trace helper typing ([@cdce8p] - [#105964])
+- Add myself as codeowner for holiday ([@gjohansson-ST] - [#106560])
+- Update aioairzone-cloud to v0.3.7 ([@Noltari] - [#106544])
+- Add device info to Netgear LTE ([@tkdrob] - [#106568])
+- Add Record distance sensor to MyPermobil ([@IsakNyberg] - [#106519])
+- Refactor screenlogic numbers to use subclasses ([@dieselrabbit] - [#106574])
+- Small speed up to compressed state diff ([@bdraco] - [#106624])
+- Use built-in set methods for light supported checks ([@bdraco] - [#106625])
+- Add GPS satellites count to Starline sensor ([@Anonym-tsk] - [#105740])
+- Minor improvements to Tessie device entries ([@Bre77] - [#106623])
+- Add entity name and translations to Netgear LTE ([@tkdrob] - [#106599])
+- Improve tests of inheriting entity descriptions ([@emontnemery] - [#106647])
+- Add tedee integration ([@zweckj] - [#102846])
+- Add roomba total cleaned area sensor ([@Xitee1] - [#106640])
+- Bump SQLAlchemy to 2.0.24 ([@bdraco] - [#106672])
+- Avoid recreating ReadOnly dicts when attributes do not change ([@bdraco] - [#106687])
+- Use volume up/down from enigma2 API ([@autinerd] - [#106674])
+- DNS IP implement retry ([@gjohansson-ST] - [#105675])
+- Add ffmpeg to dev-container ([@mib1185] - [#106710])
+- Upper case tedee device name ([@zweckj] - [#106685])
+- Add reauth to Blue Current integration ([@Floris272] - [#106658])
+- Use call_soon_threadsafe in render_will_timeout of template helper ([@jpbede] - [#106514])
+- Mark date entity component as strictly typed ([@frenck] - [#106716])
+- Mark todo entity component as strictly typed ([@frenck] - [#106718])
+- Add support for cookie file to media_extractor ([@RickeyWard] - [#104973])
+- Mark datetime entity component as strictly typed ([@frenck] - [#106717])
+- Mark wake_word entity component as strictly typed ([@frenck] - [#106724])
+- Mark siren entity component as strictly typed ([@frenck] - [#106719])
+- Use more shorthand attrs in bond fan ([@bdraco] - [#106740])
+- Mark time entity component as strictly typed ([@frenck] - [#106720])
+- Update aioairzone-cloud to v0.3.8 ([@Noltari] - [#106736])
+- Add sensor platform for tedee integration ([@zweckj] - [#106722])
+- Add binary sensors for tedee ([@zweckj] - [#106773])
+- Add Tami4 integration boil water button ([@Guy293] - [#103400])
+- Update pytest to 7.4.4 ([@cdce8p] - [#106802])
+- Use shorthand attrs for tplink color temp min/max ([@bdraco] - [#106796])
+- Use walrus operator for roomba total cleaned area sensor value ([@Xitee1] - [#106772])
+- Enable strict typing for aprs ([@cdce8p] - [#106824])
+- Enable strict typing for anel_pwrctrl ([@cdce8p] - [#106821])
+- Enable strict typing for androidtv ([@cdce8p] - [#106820])
+- Enable strict typing for alpha_vantage ([@cdce8p] - [#106816])
+- Enable strict typing for aquostv ([@cdce8p] - [#106836])
+- Enable strict typing for aruba ([@cdce8p] - [#106839])
+- Enable strict typing for airq ([@cdce8p] - [#106813])
+- Enable strict typing for amberelectric ([@cdce8p] - [#106817])
+- Enable strict typing for asterisk_cdr + asterisk_mbox ([@cdce8p] - [#106841])
+- Enable strict typing for arris_tg2492lg ([@cdce8p] - [#106838])
+- Enable strict typing for arcam_fmj ([@cdce8p] - [#106837])
+- Improve acmeda typing ([@cdce8p] - [#106812])
+- Enable strict typing for ambiclimate ([@cdce8p] - [#106819])
+- Reduce duplicate code in json_loads ([@bdraco] - [#106859])
+- Set entity category and device class for Netgear LTE entities ([@tkdrob] - [#106661])
+- Add diagnostics for tedee ([@zweckj] - [#106662])
+- Bump bleak-esphome to 0.4.1 ([@bdraco] - [#106832])
+- Enable strict typing for airthings ([@cdce8p] - [#106814])
+- Use identity checks for HassJobType ([@bdraco] - [#106860])
+- Xiaomi MIIO: fix typo in error log ([@angristan] - [#106852])
+- Refactor restore state saving to avoid a dict lookup of ATTR_RESTORED ([@bdraco] - [#106854])
+- Use shorthand attr for screenlogic climate preset modes ([@bdraco] - [#106858])
+- Refactor light platform to avoid duplicate property calls ([@bdraco] - [#106857])
+- Migrate vizio tests to use freezegun ([@jpbede] - [#105417])
+- Migrate geo_rss_events test to use freezegun ([@jpbede] - [#105895])
+- Enable strict typing for arwn ([@cdce8p] - [#106840])
+- Improve entity descriptions in Tami4 ([@joostlek] - [#106776])
+- Add reauthentication for tedee integration ([@zweckj] - [#106667])
+- Avoid unnecessary domain dataclass in Discovergy ([@jpbede] - [#106869])
+- Mark humidifier entity component as strictly typed ([@frenck] - [#106721])
+- Enable strict typing for apache_kafka ([@cdce8p] - [#106823])
+- Add translatable title to logbook ([@steffenrapp] - [#106810])
+- Enable strict typing of date_time ([@emontnemery] - [#106868])
+- Deprecate 'beat' display option in Time & Date ([@emontnemery] - [#106871])
+- Index entities by domain for entity services ([@bdraco] - [#106759])
+- Add Reolink image settings ([@starkillerOG] - [#105415])
+- Improve time_date tests ([@emontnemery] - [#106878])
+- Fix state update in time_date sensor ([@emontnemery] - [#106879])
+- Handle time zone change in time_date ([@emontnemery] - [#106880])
+- Disable polling in time_date sensor ([@emontnemery] - [#106881])
+- Mark stt entity component as strictly typed ([@frenck] - [#106723])
+- Remove deprecated Life360 yaml configuration ([@pnbruckner] - [#106286])
+- Replace intersection with isdisjoint in apple_tv config flow ([@bdraco] - [#106633])
+- Add strict typing to command_line ([@cdce8p] - [#106889])
+- Enable strict typing for co2signal ([@cdce8p] - [#106888])
+- Avoid tuple construction to check HKC available ([@bdraco] - [#106902])
+- Enable strict typing for blueprint ([@cdce8p] - [#106887])
+- Bump aiohttp-zlib-ng to 0.2.0 ([@bdraco] - [#106691])
+- Enable strict typing for axis ([@cdce8p] - [#106844])
+- Remove assert for unique_id ([@cdce8p] - [#106910])
+- Add tedee bridge as via_device for tedee integration ([@zweckj] - [#106914])
+- Add translatable title to holiday ([@steffenrapp] - [#106825])
+- Bump aioelectricitymaps to v0.1.6 ([@jpbede] - [#106932])
+- Enable strict typing for counter ([@cdce8p] - [#106906])
+- Bump SQLAlchemy to 2.0.25 ([@bdraco] - [#106931])
+- Speed up getting the mean of statistics ([@bdraco] - [#106930])
+- Removed double assignment of _attr_target_temperature_step in __init__ ([@crug80] - [#106611])
+- Add support for placeholders in entity name translations ([@mib1185] - [#104453])
+- Bump rachiopy to 1.1.0 ([@rfverbruggen] - [#106975])
+- Fix ESPHome service removal when the device name contains a dash ([@bdraco] - [#107015])
+- Bump pyinsteon ([@teharris1] - [#107010])
+- Small cleanups to ESPHome light platform ([@bdraco] - [#107003])
+- Add missing coverage for esphome_state_property decorator ([@bdraco] - [#106998])
+- Fix first ESPHome device update entity not offering install feature ([@bdraco] - [#106993])
+- Use call_soon_threadsafe in token updater of Ring ([@jpbede] - [#106984])
+- Ring: Add partial back ([@balloob] - [#107040])
+- Issue warning if glances server version is 2 ([@engrbm87] - [#105887])
+- Re-architect Guardian to use better entity descriptions and properties ([@bachya] - [#107028])
+- Add button platform to Opengarage ([@jkrall] - [#103569])
+- Small cleanups to denonavr ([@bdraco] - [#107050])
+- Update pydrawise to 2024.1.0 ([@thomaskistler] - [#107032])
+- Add test coverage for ESPHome service calls ([@bdraco] - [#107042])
+- Remove dead code in fibaro light ([@rappenze] - [#106890])
+- Add sensor tests to Streamlabs water ([@joostlek] - [#107065])
+- Update home-assistant/builder to 2024.01.0 ([@frenck] - [#107069])
+- Refactor drop sensor tests ([@jbouwh] - [#106965])
+- Add entity descriptions to Streamlabs water ([@joostlek] - [#107071])
+- Refactor drop tests for binary_sensor ([@jbouwh] - [#107090])
+- Remove zwave_js numeric sensor rounding ([@MartinHjelmare] - [#107100])
+- Revert "Bump aiohttp-zlib-ng to 0.2.0 (#106691)" ([@bdraco] - [#107109])
+- Rework drop_connect switch, select and coordinator tests and cleanup fixtures ([@jbouwh] - [#107119])
+- Move group helpers into their own module ([@bdraco] - [#106924])
+- Reorganize drop_connect tests ([@jbouwh] - [#107148])
+- Migrate Emonitor to has entity name ([@joostlek] - [#107153])
+- Migrate AVM FRITZ!Box Call monitor to has entity name ([@jrieger] - [#99752])
+- Cache homekit_controller supported features ([@bdraco] - [#106702])
+- Use snapshots in Glances sensor tests ([@joostlek] - [#107159])
+- Pass down language to hassil ([@Luap99] - [#106490])
+- Remove precision in streamlabs water ([@joostlek] - [#107096])
+- Update Home Assistant base image to 2024.01.0 - Python 3.12 ([@frenck] - [#107175])
+- Pass aiohttp clientsession to tedee integration ([@zweckj] - [#107089])
+- Add conversation_id parameter to conversation.process service ([@Shulyaka] - [#106078])
+- Clean up outdated entity replacement logic in Guardian ([@bachya] - [#107160])
+- Introduce base entity in streamlabs water ([@joostlek] - [#107095])
+- Update sensorpush-ble library to 1.6.1 ([@ashleigh-hopkins] - [#107168])
+- Fix tplink overloading power strips ([@bdraco] - [#104208])
+- Report missing entities/areas instead of failing to match in Assist ([@synesthesiam] - [#107151])
+- Fix conversation snapshots ([@joostlek] - [#107196])
+- Bump bluetooth-adapters to 0.17.0 ([@bdraco] - [#107195])
+- Set zwave_js voltage sensor suggested precision ([@MartinHjelmare] - [#107116])
+- Change default python version to 3.12 for image builds ([@bdraco] - [#107209])
+- Attempt to fix 32bit docker builds ([@bdraco] - [#107210])
+- Remove work-a-round for mqtt sensors with an entity_category set to `config` ([@jbouwh] - [#107199])
+- Remove unneeded preset_mode checks for mqtt climate ([@jbouwh] - [#107190])
+- Remove naming warnings and work-a-rounds for incorrectly configured MQTT entities ([@jbouwh] - [#107188])
+- Add color temp support for older HomeKit devices ([@bdraco] - [#107206])
+- Finish Efergy entity translations ([@joostlek] - [#107152])
+- Use identity checks for unifiprotect enums ([@bdraco] - [#106795])
+- Add Tyua Product Category "dsd" for Filament Light ([@ThePapaG] - [#106709])
+- Bump velbus-aio to 2023.12.0 ([@Cereal2nd] - [#107066])
+- Add test coverage for ESPHome device info ([@bdraco] - [#107034])
+- Add Rainforest RAVEn integration ([@cottsay] - [#80061])
+- Add support for service response to RESTful command ([@RoboMagus] - [#97208])
+- Bump aiohttp-zlib-ng to 0.3.0 ([@bdraco] - [#107184])
+- Add python_script response ([@rikroe] - [#97937])
+- Add Hong Kong Observatory integration ([@MisterCommand] - [#98703])
+- Make exceptions in rest_command services translatable ([@jpbede] - [#107252])
+- Add new Rabbit Air integration ([@al-s] - [#66130])
+- Update Home Assistant Wheels action to 2024.01.0 ([@frenck] - [#107240])
+- Add Lutron config flow ([@wilburCforce] - [#98489])
+- Allow selecting of counter entities in derivative/integration config flow ([@SLaks] - [#105321])
+- Sort Lutron platforms ([@joostlek] - [#107257])
+- Remove duplicate assignment of `median` and `statistical_mode` jinja2 filter ([@jpbede] - [#106953])
+- Improve denonavr typing ([@cdce8p] - [#106907])
+- Enable strict typing for downloader ([@cdce8p] - [#107263])
+- Migrate Suez Water to has entity name ([@joostlek] - [#107251])
+- Enable strict typing for minecraft_server ([@cdce8p] - [#107262])
+- Enable strict typing for duotecno ([@cdce8p] - [#107261])
+- Improve conversation typing ([@cdce8p] - [#106905])
+- Cleanup and migrate rest_command tests to be async ([@jpbede] - [#107264])
+- Convert cert_expiry to use asyncio ([@bdraco] - [#106919])
+- Expose all areas to Assist and ignore empty aliases ([@synesthesiam] - [#107267])
+- Use call_soon_threadsafe in mqtt client unsubscribe callback ([@jpbede] - [#107266])
+- Add test coverage for ESPHome state subscription ([@bdraco] - [#107045])
+- Add code owner for Lutron ([@wilburCforce] - [#107280])
+- Extract LutronDevice into separate file ([@joostlek] - [#107285])
+- Fix typo in recorder strings.json ([@rsiv] - [#107278])
+- Move Lutron entry data to typed class ([@joostlek] - [#107256])
+- Fix duplicate unique_ids in emonitor ([@joostlek] - [#107320])
+- Fix lutron test AttributeError ([@cdce8p] - [#107323])
+- Fix lutron test AttributeError (2) ([@cdce8p] - [#107324])
+- Disable thermobeacon voltage sensors by default ([@bdraco] - [#107326])
+- Add API to fetch Assist devices ([@balloob] - [#107333])
+- Add time entity to Renson ([@jimmyd-be] - [#105031])
+- Use faster identity checks for SupportsResponse Enum ([@bdraco] - [#107351])
+- Small cleanup to zeroconf properties matcher ([@bdraco] - [#107342])
+- Avoid fetching logger in check_if_deprecated_constant if there is nothing to log ([@bdraco] - [#107341])
+- Enable strict typing for easyenergy ([@cdce8p] - [#107299])
+- Enable strict typing for energyzero ([@cdce8p] - [#107300])
+- Enable strict typing for p1_monitor ([@cdce8p] - [#107301])
+- Fix rainforest_raven typing ([@cdce8p] - [#107309])
+- Fix name of 64bit intel/amd arch in builder and wheels workflow ([@bdraco] - [#107335])
+- Only mock config_entries.HANDLERS for the current test in mock_config_flow ([@jbouwh] - [#107357])
+- Add new locks automatically to tedee integration ([@zweckj] - [#107372])
+- remove marcolivierarsenault from ecobee codeowners ([@marcolivierarsenault] - [#107377])
+- Improve homekit_controller typing ([@cdce8p] - [#107381])
+- Bump py-aosmith to 1.0.6 ([@bdr99] - [#107409])
+- Update Apprise to 1.7.1 ([@Flash1232] - [#107383])
+- Streamline exception handling in Guardian ([@bachya] - [#107053])
+- Clean up buggy Guardian `switch` context managers ([@bachya] - [#107426])
+- Remove leftover Guardian mixin ([@bachya] - [#107424])
+- Enable strict typing for oralb ([@cdce8p] - [#107438])
+- Enable strict typing for led_ble ([@cdce8p] - [#107437])
+- Enable strict typing for enphase_envoy ([@cdce8p] - [#107436])
+- Enable strict typing for waqi ([@cdce8p] - [#107439])
+- Enable strict typing for youtube ([@cdce8p] - [#107440])
+- Add select platform to Vogel's MotionMount integration ([@RJPoelstra] - [#107132])
+- Add missing wifi data in AVM!Fritz Tools tests ([@mib1185] - [#107373])
+- Improve flume typing ([@cdce8p] - [#107444])
+- Clean up zwave_js test_removed_device test ([@raman325] - [#107346])
+- Fix local_todo typo ([@miaucl] - [#107454])
+- Add typing to Lutron platforms ([@joostlek] - [#107408])
+- Small cleanups to ESPHome callbacks ([@bdraco] - [#107428])
+- Remove calls to distribution and legacy zip support from package util ([@bdraco] - [#107427])
+- Improve harmony typing ([@cdce8p] - [#107447])
+- Google Generative AI: Add a service for prompts consisting of text and images using Gemini Pro Vision ([@tronikos] - [#105789])
+- Mark Ring battery and signal strength sensors as diagnostic ([@joostlek] - [#107503])
+- Move KNX service registration to `async_setup` ([@farmio] - [#106635])
+- Refactor translations to reduce dict lookups ([@bdraco] - [#107425])
+- Refactor recorder for common event case ([@bdraco] - [#106753])
+- Improve logbook context augment performance ([@bdraco] - [#106926])
+- Refactor sensor recorder _get_sensor_states to check for state class first ([@bdraco] - [#107046])
+- Add support for JSON fragments ([@bdraco] - [#107213])
+- Reduce overhead to compile statistics ([@bdraco] - [#106927])
+- Signficantly reduce executor contention during bootstrap ([@bdraco] - [#107312])
+- Add support for bluetooth local name matchers shorter than 3 chars ([@bdraco] - [#107411])
+- Use constants in Alpha2 config flow ([@joostlek] - [#107518])
+- Clean up met config flow ([@joostlek] - [#107480])
+- Introduce heat area property in moehlenhoff alpha2 ([@joostlek] - [#107488])
+- Bump sensorpush-ble to 1.6.2 ([@bdraco] - [#107410])
+- Increase pip timeout in image builds to match core ([@bdraco] - [#107514])
+- Bump aiowithings to 2.1.0 ([@joostlek] - [#107417])
+- Reduce duplicate code in ESPHome connection callback ([@bdraco] - [#107338])
+- Add Met eireann to strict typing ([@joostlek] - [#107486])
+- Migrate Mullvad to has entity name ([@joostlek] - [#107520])
+- Migrate kmtronic to has entity name ([@joostlek] - [#107469])
+- Add coverage for scanning tags with ESPHome ([@bdraco] - [#107337])
+- Remove MQTT legacy vacuum support ([@jbouwh] - [#107274])
+- Reduce overhead to call entity services ([@bdraco] - [#106908])
+- Enable long term statistics for Flume water usage current sensor ([@tronikos] - [#107512])
+- Remove deprecated YAML for freebox ([@jpbede] - [#107497])
+- Handle unknown state in HomeKit ([@bdraco] - [#107039])
+- Improve dispatcher typing ([@cdce8p] - [#106872])
+- Enable strict typing for google_assistant_sdk ([@cdce8p] - [#107306])
+- Bump SunWEG to 2.1.0 ([@rokam] - [#107459])
+- Improve typing for Tado ([@erwindouna] - [#106992])
+- Enable strict typing for history_stats ([@cdce8p] - [#107273])
+- Enable strict typing for generic_hygrostat ([@cdce8p] - [#107272])
+- Fully type homeassistant integration ([@cdce8p] - [#107380])
+- Improve hassio typing ([@cdce8p] - [#107292])
+- Improve hunterdouglas_powerview typing ([@cdce8p] - [#107445])
+- Enable strict typing for intent ([@cdce8p] - [#107282])
+- Add zone devices to AnthemAV ([@joostlek] - [#107192])
+- Cleanup device registry for tedee when a lock is removed ([@zweckj] - [#106994])
+- Use parametrize in drop connect binary sensor tests ([@joostlek] - [#107111])
+- Enable strict typing for system_health ([@cdce8p] - [#107283])
+- Enable strict typing for nightscout ([@cdce8p] - [#107307])
+- Enable strict typing for tod ([@cdce8p] - [#107284])
+- Enable strict typing for dlna_dms ([@cdce8p] - [#107305])
+- Improve folder_watcher typing ([@cdce8p] - [#107271])
+- Remove tedee device safely from registry ([@zweckj] - [#107529])
+- Unlock the precision of sensors of the opentherm_gw integration ([@FlorianOosterhof] - [#107227])
+- Bump pytedee_async to 0.2.10 ([@zweckj] - [#107540])
+- Pop the mocked config flow, restore the original with mock_config_flow ([@jbouwh] - [#107567])
+- Specific Assist errors for domain/device class ([@synesthesiam] - [#107302])
+- Add software version to Blink device info ([@mkmer] - [#107548])
+- Improve led_ble generic typing ([@cdce8p] - [#107534])
+- Remove deprecated YAML support from OpenSky ([@jpbede] - [#107585])
+- Let babel handle the locale separator in holiday ([@jrieger] - [#107571])
+- Bump pymeteoclimatic to 0.1.0 ([@bdraco] - [#107583])
+- Fix tractive tests using a dict for the unique_id ([@bdraco] - [#107602])
+- Bump aiohttp-zlib-ng to 0.3.1 ([@bdraco] - [#107595])
+- Bump pywemo to 1.4.0 ([@esev] - [#107623])
+- Small cleanups to number entity ([@bdraco] - [#107624])
+- Fix cloudflare tests using a dict for the unique id ([@bdraco] - [#107601])
+- Avoid duplicate property lookups in camera state_attributes ([@bdraco] - [#107627])
+- Tado unavailable state to device tracker ([@erwindouna] - [#107542])
+- Small cleanups to temperature helper ([@bdraco] - [#107625])
+- Add caching to the distance calculation utility ([@bdraco] - [#107626])
+- Bump idasen-ha to 2.5 ([@abmantis] - [#107607])
+- Remove deprecated line in osoenergy ([@xeniter] - [#107553])
+- Correct state class in `mobile_app` tests ([@jpbede] - [#107646])
+- Remove deprecated YAML support from zodiac ([@jpbede] - [#107584])
+- Fix dlink test mutating config entry after its adding to hass ([@bdraco] - [#107604])
+- Airthings cloud: Add myself as codeowner ([@LaStrada] - [#107654])
+- Remove unused option flow from blink ([@mkmer] - [#106735])
+- Use right state class for kWh sensor in `homekit_controller` ([@jpbede] - [#107644])
+- Use right state class in `filter` test ([@jpbede] - [#107643])
+- Correct device class in `sql` tests ([@jpbede] - [#107663])
+- Bump Python-Roborock to 0.39.0 ([@Lash-L] - [#107547])
+- Remove deprecated services from Ezviz ([@jpbede] - [#107582])
+- Remove deprecated services from Huawei LTE ([@jpbede] - [#107578])
+- Add test for avoid triggering ping device tracker `home` after reload ([@jpbede] - [#107107])
+- Avoid total_seconds conversion in bond keep alive ([@bdraco] - [#107618])
+- Add missing 'state class' to Airvisual ([@yuvalabou] - [#107666])
+- Add 'bitwise_xor' filter to jinja templates ([@TNTLarsn] - [#104942])
+- Bump pytedee_async to 0.2.11 ([@zweckj] - [#107707])
+- Remove myself as a codeowner from tado ([@michaelarnauts] - [#107708])
+- Set proper sensor device class for swiss_public_transport ([@miaucl] - [#106485])
+- Bump govee-ble to 0.26.0 ([@bdraco] - [#107706])
+- Improve debug logs in Minecraft Server ([@elmurato] - [#107672])
+- Add decorator typing [toon] ([@cdce8p] - [#107597])
+- Add decorator typing [soma] ([@cdce8p] - [#107559])
+- Add decorator typing [modern_forms] ([@cdce8p] - [#107558])
+- Improvements for tedee integration ([@zweckj] - [#107238])
+- Use new AEMET library data for sensor platform ([@Noltari] - [#102972])
+- Reduce discovery flow matching overhead ([@bdraco] - [#107709])
+- Rename AEMET weather_update_coordinator ([@Noltari] - [#107740])
+- Update powerwall for tesla_powerwall 0.5.0 which is async ([@bubonicbob] - [#107164])
+- Make to-do list item exception wording consistent ([@allenporter] - [#107743])
+- Add comment to ConfigEntry.async_setup about race safety ([@bdraco] - [#107756])
+- Add `valve` platform to Guardian ([@bachya] - [#107423])
+- Bump bthome-ble to 3.4.1 ([@Ernst79] - [#107757])
+- Add leak sensor for UP Sense for UniFi Protect ([@AngellusMortis] - [#107762])
+- Bump sonos-websocket to 0.1.3 ([@jjlawren] - [#107765])
+- Bump aioambient to 2024.01.0 ([@thomaskistler] - [#107767])
+- Rework state change detection for UniFi Protect entities ([@AngellusMortis] - [#107766])
+- Add new event sensors from UniFi Protect 2.11 ([@AngellusMortis] - [#107773])
+- Fastdotcom service optimization ([@erwindouna] - [#107179])
+- Revert "Revert "Add preselect_remember_me to `/auth/providers`"" ([@edenhaus] - [#106867])
+- Add SpeakerHub support to YoLink ([@matrixd2] - [#104678])
+- Bump govee-ble to 0.27.2 ([@bdraco] - [#107778])
+- Improve ergonomics of FlowManager.async_show_progress ([@emontnemery] - [#107668])
+- Improve calls to async_show_progress in zwave_js ([@emontnemery] - [#107794])
+- Improve calls to async_show_progress in matter ([@emontnemery] - [#107791])
+- Improve calls to async_show_progress in google ([@emontnemery] - [#107788])
+- Make step_id parameter to FlowHandler.async_show_progress optional ([@emontnemery] - [#107802])
+- Fix call to async_setup_component in translation test ([@emontnemery] - [#107807])
+- Fix Netatmo camera name does not show under Media -> Media sources -> Camera ([@codyc1515] - [#107696])
+- Remove Life360 integration ([@pnbruckner] - [#107805])
+- Bump PySwitchbot to 0.44.0 ([@dcmeglio] - [#107833])
+- Improved tracking of switchbot opening/closing states ([@dcmeglio] - [#106741])
+- Move Guardian valve attributes to diagnostics sensors ([@bachya] - [#107834])
+- Add YoLink SpeakerHub Service ([@matrixd2] - [#107787])
+- Bump govee-ble to 0.27.3 ([@bdraco] - [#107839])
+- Bump actions/cache from 3.3.2 to 3.3.3 (@dependabot - [#107840])
+- Bump github/codeql-action from 3.22.12 to 3.23.0 (@dependabot - [#107628])
+- Bump nexia to 2.0.8 ([@bdraco] - [#107835])
+- Migrate unifiprotect descriptions to be kw_only ([@bdraco] - [#107832])
+- Restrict Version Disclosure to Authenticated Requests in Home Assistant ([@emtunc] - [#107458])
+- Add jinja_pass_arg to reserved template names ([@bdraco] - [#107822])
+- Use identity checks for CoreState ([@bdraco] - [#107846])
+- Add decorator typing [limitlessled] ([@cdce8p] - [#107557])
+- Revert "Fix Netatmo camera name does not show under Media -> Media sources -> Camera" ([@cgtobi] - [#107856])
+- Rename netatmo base entity file ([@joostlek] - [#107857])
+- Add decorator typing [izone] ([@cdce8p] - [#107556])
+- Add decorator typing [homematicip_cloud] ([@cdce8p] - [#107555])
+- Add decorator typing [zha] ([@cdce8p] - [#107599])
+- Add myUplink integration ([@pajzo] - [#86522])
+- Enable strict typing for cert_expiry ([@cdce8p] - [#107860])
+- Improve onboarding provider call ([@cdce8p] - [#107864])
+- Enable strict typing for bthome ([@cdce8p] - [#107859])
+- Improve meteo_france typing ([@cdce8p] - [#107863])
+- Enable strict typing for ecowitt ([@cdce8p] - [#107861])
+- Add decorator typing [spotify] ([@cdce8p] - [#107560])
+- Bump xiaomi-ble to 0.21.2 ([@Ernst79] - [#107779])
+- Enable strict typing for ios ([@cdce8p] - [#107382])
+- Update frontend to 20240112.0 ([@bramkragten] - [#107886])
+- Extend Nuki integration to expose ringer through Nuki Opener ([@steffenrapp] - [#107745])
+- Handle missing fields from Roomba ([@Xitee1] - [#107893])
+- Fix missing timeout exception check in powerwall config flow ([@bdraco] - [#107899])
+- Bump orjson to 3.9.10 ([@bdraco] - [#107898])
+- Revert "Restrict Version Disclosure to Authenticated Requests in Home Assistant" ([@bdraco] - [#107904])
+- Remove deprecated YAML support from litejet ([@jpbede] - [#107884])
+- Improve Netatmo tests ([@joostlek] - [#107902])
+- Enable strict typing for system_log ([@cdce8p] - [#107914])
+- Enable strict typing for rest_command ([@cdce8p] - [#107911])
+- Avoid duplicate search for existing config entries in homekit_controller ([@bdraco] - [#107613])
+- Add snapshot tests to Netatmo platforms ([@joostlek] - [#107932])
+- Snapshot Netatmo devices ([@joostlek] - [#107935])
+- Give name to Netatmo device snapshots ([@joostlek] - [#107938])
+- Warn if integrations call async_show_progress without passing a task ([@emontnemery] - [#107796])
+- Enable strict typing for xiaomi_ble ([@cdce8p] - [#107948])
+- Bump python-holidays to 0.40 ([@jrieger] - [#107888])
+- Add fan mode support to SmartThings fan entity ([@ThePapaG] - [#106794])
+- Add account sensors to electric kiwi integration ([@mikey0000] - [#97681])
+- Add charge cable lock to Tessie ([@Bre77] - [#107212])
+- Remove useless _update function in ESPHome ([@bdraco] - [#107927])
+- Bump zamg to 0.3.5 ([@killer0071234] - [#107939])
+- Add support for Uonet+ Vulcan integration on Python 3.12 ([@Antoni-Czaplicki] - [#107959])
+- Enable strict typing for webhook ([@cdce8p] - [#107946])
+- Fix atag test mutating config entry after its adding to hass ([@bdraco] - [#107603])
+- Add an index for devices and config entries to the entity registry ([@bdraco] - [#107516])
+- Refactor User attribute caching to be safer and more efficient ([@bdraco] - [#96723])
+- Small cleanups to ESPHome ([@bdraco] - [#107924])
+- Use more shorthand attributes in ESPHome fans ([@bdraco] - [#107923])
+- Refactor config entry storage and index ([@bdraco] - [#107590])
+- Enable strict typing for search ([@cdce8p] - [#107912])
+- Use faster is_admin check for websocket state and event subscriptions ([@bdraco] - [#107621])
+- Add TICMeter Energy Metering sensors ([@xmow49] - [#107956])
+- Use prometheus_client module directly ([@cdce8p] - [#107918])
+- Fix duplicate config entry additions in tests ([@bdraco] - [#107984])
+- Add H5106 support to govee-ble ([@bdraco] - [#107781])
+- Avoid entity registry check in live logbook on each state update ([@bdraco] - [#107622])
+- Avoid total_seconds conversion every state write when context is set ([@bdraco] - [#107617])
+- Bump lxml to 5.1.0 ([@bdraco] - [#106696])
+- Fix logger creating many thread locks when reloading the integrations page ([@bdraco] - [#93768])
+- Migrate powerwall unique ids to use the gateway din ([@bdraco] - [#107509])
+- Refactor event time trackers to avoid using nonlocal ([@bdraco] - [#107997])
+- Break long lines in powerwall integration ([@bdraco] - [#108002])
+- Avoid useless time fetch in DataUpdateCoordinator ([@bdraco] - [#107999])
+- Save the HassJob type in wemo discovery to avoid checking it each time ([@bdraco] - [#107998])
+- Update habluetooth to 2.2.0 ([@bdraco] - [#108000])
+- Add route sensors to Tessie ([@Bre77] - [#106530])
+- Remove YAML support from gdacs ([@jbouwh] - [#107962])
+- Remove deprecated YAML import from generic camera ([@jbouwh] - [#107992])
+- Improve apple_tv typing ([@bdraco] - [#107694])
+- Improve calls to async_show_progress in improv_ble ([@emontnemery] - [#107790])
+- Enable strict typing for shopping_list ([@cdce8p] - [#107913])
+- Enable strict typing for trace ([@cdce8p] - [#107945])
+- Enable strict typing for timer ([@cdce8p] - [#107915])
+- Remove deprecated vacuum service from roborock ([@jpbede] - [#107895])
+- Drop facebox integration ([@reedy] - [#107005])
+- Improve calls to async_show_progress in homeassistant_hardware ([@emontnemery] - [#107789])
+- Refactor async_track_utc_time_change to avoid using nonlocal ([@bdraco] - [#108007])
+- Update pipdeptree to 2.13.2 ([@frenck] - [#108009])
+- Fix wifi sensor units in Blink ([@mkmer] - [#107539])
+- Improve calls to async_show_progress in snooz ([@emontnemery] - [#107793])
+- Improve calls to async_show_progress in octoprint ([@emontnemery] - [#107792])
+- Remove file/line annotations after config has been validated ([@emontnemery] - [#107139])
+- Add entity translations to Glances ([@joostlek] - [#107189])
+- Dynamically adjust Netatmo polling frequency ([@cgtobi] - [#106742])
+- Bump plugwise to v0.36.2 ([@bouwew] - [#108012])
+- Fix autoChangeoverActive for lyric LCC devices ([@nprez83] - [#106925])
+- Fix lyric TCC set temperature when in Auto mode ([@nprez83] - [#106853])
+- Update sentry-sdk to 1.39.2 ([@frenck] - [#108010])
+- Add Netatmo fan platform ([@cgtobi] - [#107989])
+- Remove deprecated services from Litterrobot ([@jpbede] - [#107882])
+- Add cached_property to State.name ([@bdraco] - [#108011])
+- Reset UniFi bandwidth sensor when client misses heartbeat ([@wittypluck] - [#104522])
+- Sensibo include mac in diagnostics redact filter ([@gjohansson-ST] - [#107986])
+- Improve the test class used for testing FlowManager.async_show_progress ([@emontnemery] - [#107786])
+- Bump SoCo to 0.30.2 ([@jjlawren] - [#108033])
+- Update shelly bluetooth scanner to version 2.0 ([@bdraco] - [#107917])
+- Update framework for Airthings cloud ([@LaStrada] - [#107653])
+- Update asyncsleepiq to 1.4.2 ([@kbickar] - [#108054])
+- Remove YAML auth setup support from home_connect ([@jbouwh] - [#108072])
+- Enable strict typing for prometheus ([@cdce8p] - [#108025])
+- Enable strict typing for duckdns ([@cdce8p] - [#108022])
+- Bump pychromecast to 13.1.0 ([@emontnemery] - [#108073])
+- Remove obsolete .txt extension from diagnostics download ([@mib1185] - [#108028])
+- Enable strict typing for generic_thermostat ([@cdce8p] - [#108024])
+- Improve gdacs typing ([@cdce8p] - [#108040])
+- Deprecate passing step_id to FlowHandler methods ([@emontnemery] - [#107944])
+- Bump evohome client to 0.4.17 ([@zxdavb] - [#108051])
+- Set webhook `local_only` to True by default ([@jpbede] - [#107670])
+- Improve ffmpeg and freebox typing ([@cdce8p] - [#108026])
+- Harden zone schedule processing for evohome ([@zxdavb] - [#108079])
+- Fix comment for SmartThings fan capability ([@ThePapaG] - [#108086])
+- Enable strict typing for onboarding ([@cdce8p] - [#108097])
+- Add availability to command_line ([@gjohansson-ST] - [#105300])
+- Add tests for System Monitor ([@gjohansson-ST] - [#107891])
+- Fix test_sensor_process_fails test in System Monitor ([@gjohansson-ST] - [#108110])
+- Make ATTR_SERIAL_NUMBER a generic homeassistant constant ([@jbouwh] - [#108106])
+- Improve electric_kiwi generic typing ([@cdce8p] - [#108084])
+- Improve google_translate typing ([@cdce8p] - [#108093])
+- Improve typing for the generic integration ([@cdce8p] - [#108094])
+- Improve risco typing ([@cdce8p] - [#108041])
+- Add Epion integration ([@lhgravendeel] - [#107570])
+- Remove deprecated vacuum services from tuya ([@jpbede] - [#107896])
+- Hide FlowResultType.SHOW_PROGRESS_DONE from frontend ([@emontnemery] - [#107799])
+- Add pylint plugin to check for sorted platforms list ([@jpbede] - [#108115])
+- bump pyfritzhome to 0.6.10 ([@mib1185] - [#108128])
+- Bump holidays to 0.41 ([@gjohansson-ST] - [#108132])
+- Update python-bsblan version to 0.5.18 ([@liudger] - [#108145])
+- Enable compression on frontend index page ([@bdraco] - [#108148])
+- Remove YAML import support for plum_lightpad ([@jbouwh] - [#108114])
+- Remove config import in meteo_france ([@gjohansson-ST] - [#107970])
+- Remove MELCloud YAML import support ([@jbouwh] - [#108113])
+- Add config flow for Ecovacs ([@edenhaus] - [#108111])
+- Avoid keeping config dir in path ([@elupus] - [#107760])
+- Default tuya climate temperature unit to system unit ([@DellanX] - [#108050])
+- Bump opower to 0.2.0 ([@max2697] - [#108067])
+- Handle renaming of evohome zones ([@zxdavb] - [#108089])
+- Add serial_number attribute to MQTT device properties ([@jbouwh] - [#108105])
+- Avoid duplicate timestamp conversions for websocket api and recorder ([@bdraco] - [#108144])
+- Add gateway_mode Select to Plugwise ([@bouwew] - [#108019])
+- Add integration lamarzocco ([@zweckj] - [#102291])
+- Refactor demo vacuum's to only use StateVacuum base class and features ([@jbouwh] - [#108150])
+- Bump vallox_websocket_api to 4.0.3 ([@slovdahl] - [#108109])
+- Add debugging to assist in debugging already configured error ([@allenporter] - [#108134])
+- Add late PR improvements to La Marzocco ([@zweckj] - [#108162])
+- Add Govee local light integration ([@Galorhallen] - [#106697])
+- Remove config import from surepetcare ([@gjohansson-ST] - [#107971])
+- Add Translation for Roborock exceptions ([@Lash-L] - [#105427])
+- Cache commonly called Integration manifest properties ([@bdraco] - [#108141])
+- Delete removed channel devices in Youtube ([@joostlek] - [#107907])
+- Remove config import in Neato ([@gjohansson-ST] - [#107967])
+- Avoid bytes to string to bytes conversion in websocket api ([@bdraco] - [#108139])
+- Add entity name translations to System Monitor ([@gjohansson-ST] - [#107952])
+- Deprecate Python 3.11 ([@frenck] - [#108160])
+- Remove config import from netatmo ([@gjohansson-ST] - [#107972])
+- Wyoming satellite ping and bugfix for local wake word ([@synesthesiam] - [#108164])
+- Set minimal value for modules power - Forecast.solar ([@klaasnicolaas] - [#108166])
+- Upgrade python-mpd2 to v3.1.1 ([@2franix] - [#108143])
+- Bump dbus-fast to 2.21.1 ([@bdraco] - [#108176])
+- Bump `aiokafka` to 0.10.0 ([@bachya] - [#108165])
+- Add decorator typing [yeelight] ([@cdce8p] - [#107598])
+- Move Guardian coordinator to suggested location ([@bachya] - [#108182])
+- Dynamically map state class, device class and UoM in ZHA smart energy metering sensor ([@jpbede] - [#107685])
+- Remove unnecessary OpenUV entity description mixins ([@bachya] - [#108195])
+- Remove unnecessary SimpliSafe entity description mixins ([@bachya] - [#108197])
+- Remove unnecessary PurpleAir entity description mixins ([@bachya] - [#108196])
+- Remove unnecessary Notion entity description mixins ([@bachya] - [#108194])
+- Remove unnecessary AirVisual Pro entity description mixins ([@bachya] - [#108192])
+- Remove unnecessary Ambient PWS entity description mixins ([@bachya] - [#108191])
+- Remove unnecessary RainMachine entity description mixins ([@bachya] - [#108190])
+- Create update coordinator for Systemmonitor ([@gjohansson-ST] - [#106693])
+- Bump actions/cache from 3.3.3 to 4.0.0 (@dependabot - [#108209])
+- Fix translation keys in Tessie ([@Bre77] - [#108203])
+- Add sensor platform to La Marzocco integration ([@zweckj] - [#108157])
+- Implement TechnoVE integration ([@Moustachauve] - [#106029])
+- Change the way an entity is supported in La Marzocco ([@zweckj] - [#108216])
+- Add binary sensor platforms to La Marzocco ([@zweckj] - [#108212])
+- Allow selecting camera in Trafikverket Camera ([@gjohansson-ST] - [#105927])
+- Improve aurora typing ([@cdce8p] - [#108217])
+- Add select platform to La Marzocco integration ([@zweckj] - [#108222])
+- Add number platform to La Marzocco ([@zweckj] - [#108229])
+- Remove unused entity_sources argument from shared_attrs_bytes_from_event ([@bdraco] - [#108210])
+- Disable Python 3.12 incompatible integrations ([@frenck] - [#108163])
+- Add update platform to La Marzocco ([@zweckj] - [#108235])
+- Add button platform to La Marzocco ([@zweckj] - [#108236])
+- Assert default response from conversation trigger ([@emontnemery] - [#108231])
+- Remove deprecated redundant dry and fan modes from `zwave_js` climates ([@jbouwh] - [#108124])
+- Decrease fitbit logging verbosity on connection error ([@MartinHjelmare] - [#108228])
+- Fix state after La Marzocco update ([@zweckj] - [#108244])
+- Improve systemmonitor generic typing ([@cdce8p] - [#108220])
+- Switch for swiss_public_transport to unique_id instead of unique_entry ([@miaucl] - [#107910])
+- Let zigpy decide on default manufacturer id ([@elupus] - [#108257])
+- Remove legacy VacuumEntity base class support ([@jbouwh] - [#108189])
+- Allow multiple config entries in Honeywell ([@mkmer] - [#108263])
+- Remove unused variables in honeywell ([@mkmer] - [#108252])
+- Fix apple_tv IP Address not being updated from discovery ([@bdraco] - [#107611])
+- Fix benign typo in entity registry ([@bdraco] - [#108270])
+- Bump github/codeql-action from 3.23.0 to 3.23.1 (@dependabot - [#108275])
+- Small cleanups to the websocket api handler ([@bdraco] - [#108274])
+- Avoid many replace calls in find_next_time_expression_time ([@bdraco] - [#108273])
+- Add state caching to button entities ([@bdraco] - [#108272])
+- Enable strict typing for config ([@cdce8p] - [#108023])
+- Improve daikin typing ([@cdce8p] - [#108039])
+- Add diagnostics to La Marzocco ([@zweckj] - [#108240])
+- Bump lmcloud to 0.4.35 ([@zweckj] - [#108288])
+- Add tests to flexit_bacnet integration ([@lellky] - [#108291])
+- Add test for failed initialization in Flexit BACnet ([@joostlek] - [#108294])
+- Add coordinator to Flexit bacnet ([@lellky] - [#108295])
+- Don't always set first thread dataset as preferred ([@emontnemery] - [#108278])
+- Small speed up to checking core state ([@bdraco] - [#107845])
+- Add task to install all requirements of an integration ([@edenhaus] - [#108262])
+- Improve august typing (1) ([@cdce8p] - [#108325])
+- Improve august typing (2) ([@cdce8p] - [#108327])
+- Fix remote control codes for jvc_projector ([@SteveEasley] - [#108253])
+- Improve api typing ([@cdce8p] - [#108307])
+- Add iBeacon UUID allowlist ([@chatziko] - [#104790])
+- Improve august typing (3) ([@cdce8p] - [#108329])
+- Improve august typing (4) ([@cdce8p] - [#108331])
+- Improve august typing (5) ([@cdce8p] - [#108332])
+- Improve person typing ([@cdce8p] - [#108218])
+- Adjust require_admin decorator typing ([@cdce8p] - [#108306])
+- Improve ffmpeg* typing ([@cdce8p] - [#108092])
+- Bump plugwise to v0.36.3 ([@bouwew] - [#108347])
+- Bump pyDuotecno to 2024.1.2 ([@Cereal2nd] - [#108314])
+- Bump orjson to 3.9.12 ([@bdraco] - [#108350])
+- Fix homekit_controller test ([@emontnemery] - [#108375])
+- Avoid json default fallback for area registry ([@bdraco] - [#108358])
+- Enable strict typing for bluetooth_adapters ([@cdce8p] - [#108365])
+- Enable strict typing for api ([@cdce8p] - [#108363])
+- Enable strict typing for default_config ([@cdce8p] - [#108366])
+- Enable strict typing for my ([@cdce8p] - [#108369])
+- Enable strict typing for map ([@cdce8p] - [#108368])
+- Enable strict typing for intent_script ([@cdce8p] - [#108367])
+- Avoid json encoder default fallback for APIComponentsView ([@bdraco] - [#108359])
+- Improve ifttt typing ([@cdce8p] - [#108308])
+- Use shorthand attributes for mobile_app sensor platforms ([@bdraco] - [#108353])
+- Add icon to entity registry list for display ([@frenck] - [#108313])
+- Expose TimeoutError during google_travel_time config_flow ([@eifinger] - [#108179])
+- Update dwdwfsapi to 1.0.7 ([@cdce8p] - [#108377])
+- Add binary sensor to MotionMount integration ([@RJPoelstra] - [#107659])
+- Update types packages ([@cdce8p] - [#108371])
+- Add support for MQTT based ecovacs vacuums ([@edenhaus] - [#108167])
+- Add icon translations support ([@frenck] - [#103294])
+- Update coverage to 7.4.0 ([@cdce8p] - [#108370])
+- Improve tplink_lte typing ([@cdce8p] - [#108393])
+- Update boto3 to 1.33.13 and aiobotocore to 2.9.1 ([@cdce8p] - [#108384])
+- Add icon translations to Anova ([@joostlek] - [#108399])
+- Add icon translations to AirQ ([@joostlek] - [#108402])
+- Add icon translations to Aurora ([@joostlek] - [#108410])
+- Add icon translations to August ([@joostlek] - [#108396])
+- Add icon translations to Aussie Broadband ([@joostlek] - [#108409])
+- Add icon translations to awair ([@joostlek] - [#108408])
+- Add icon translations to Airnow ([@joostlek] - [#108403])
+- Add icon translations to AsusWRT ([@joostlek] - [#108397])
+- Add icon translations to Airthings BLE ([@joostlek] - [#108401])
+- Add icon translations to Ambient station ([@joostlek] - [#108400])
+- Add icon translations to Aseko ([@joostlek] - [#108398])
+- Use async_create_clientsession for enigma2 ([@autinerd] - [#108395])
+- Add alarm_control_panel icon translations ([@frenck] - [#108413])
+- Add button icon translations ([@frenck] - [#108415])
+- Add calendar icon translations ([@frenck] - [#108416])
+- Update psutil to 5.9.8 ([@frenck] - [#108421])
+- Add air_quality icon translations ([@frenck] - [#108420])
+- Bump thermopro-ble to 0.8.0 ([@bdraco] - [#108319])
+- Avoid json encoder default fallback when serializing config ([@bdraco] - [#108360])
+- Add light icon translations ([@frenck] - [#108414])
+- Mark flaky fritz update test as xfail ([@frenck] - [#108447])
+- Add climate icon translations ([@frenck] - [#108418])
+- Add date icon translations ([@frenck] - [#108448])
+- Add datetime icon translations ([@frenck] - [#108449])
+- Add sensor icon translations ([@frenck] - [#108450])
+- Add image icon translations ([@frenck] - [#108455])
+- Add number icon translations ([@frenck] - [#108452])
+- Add event icon translations ([@frenck] - [#108453])
+- Add scene icon translations ([@frenck] - [#108456])
+- Add icon translations to AVM FRITZ!Box Call Monitor ([@jrieger] - [#108417])
+- Add camera icon translations ([@frenck] - [#108419])
+- Add lock icon translations ([@frenck] - [#108467])
+- Ensure pre-commit runs hassfest when icons change ([@frenck] - [#108470])
+- Add text icon translations ([@frenck] - [#108457])
+- Add humidifier icon translations ([@frenck] - [#108465])
+- Add geo_location icon translations ([@frenck] - [#108463])
+- Add fan icon translations ([@frenck] - [#108461])
+- Use right state class for volume and timestamp sensor in bthome ([@jpbede] - [#107675])
+- Add siren icon translations ([@frenck] - [#108473])
+- Add icon translations to Tankerkoenig ([@jrieger] - [#108499])
+- Update knx-frontend to 2024.1.20.105944 ([@farmio] - [#108511])
+- Upgrade nibe to 2.7.0 ([@elupus] - [#108507])
+- Add icon translations to HomeWizard Energy ([@frenck] - [#108506])
+- Add icon translations to Plugwise ([@frenck] - [#108498])
+- Add water heater icon translations ([@frenck] - [#108491])
+- Add weather icon translations ([@frenck] - [#108488])
+- Add media player icon translations ([@frenck] - [#108486])
+- Add wake word icon translations ([@frenck] - [#108482])
+- Add update icon translations ([@frenck] - [#108481])
+- Add valve icon translations ([@frenck] - [#108480])
+- Add vacuum icon translations ([@frenck] - [#108479])
+- Bump bthome-ble to 3.5.0 ([@Ernst79] - [#108475])
+- Add tts icon translations ([@frenck] - [#108476])
+- Add todo icon translations ([@frenck] - [#108477])
+- Add select icon translations ([@frenck] - [#108472])
+- Add stt icon translations ([@frenck] - [#108474])
+- Add remote icon translations ([@frenck] - [#108469])
+- Add lawn mower icon translations ([@frenck] - [#108466])
+- Add cover icon translations ([@frenck] - [#108460])
+- Fix hassfest icon schema for service only ([@frenck] - [#108494])
+- Remove unused TypeVar from config.py ([@emontnemery] - [#108495])
+- Add time icon translations ([@frenck] - [#108458])
+- Change calendar icon based on state ([@jrieger] - [#108451])
+- Add sun icon translations ([@jrieger] - [#108462])
+- Add nut icon translations ([@jrieger] - [#108471])
+- Remove OrderedDict from auth_store ([@bdraco] - [#108546])
+- Add icon translations for Pegelonline ([@mib1185] - [#108554])
+- Always load auth storage at startup ([@bdraco] - [#108543])
+- Ensure icon translations aren't the same as the default ([@frenck] - [#108568])
+- Ensure button platform does not restore unavailable state ([@bdraco] - [#108316])
+- Add sensors to the flexit_bacnet integration ([@lellky] - [#108297])
+- Add binary sensors to flexit_bacnet integration ([@lellky] - [#108571])
+- Add icon translations for lamarzocco ([@zweckj] - [#108569])
+- Add icon translation to Jellyfin ([@jrieger] - [#108559])
+- Add icon translations to Roborock ([@jrieger] - [#108508])
+- Add icon translations to DWD Weather Warnings ([@jrieger] - [#108501])
+- Make remaining WLED entities translatable ([@jpbede] - [#108534])
+- Add unique id to geonetnz_volcano sensors ([@exxamalte] - [#108556])
+- Icon translation for imap mail count sensor ([@jbouwh] - [#108576])
+- Add authentication to tplink integration for newer devices ([@sdb9696] - [#105143])
+- Fix numbered list in github config flow ([@emontnemery] - [#108587])
+- Add bthome event platform ([@bdraco] - [#108268])
+- Add missing property in flexit bacnet test ([@lellky] - [#108606])
+- Add icon translations to co2signal ([@jpbede] - [#108611])
+- Use more shorthand attributes in tplink ([@bdraco] - [#108284])
+- Add icon translations to Withings ([@joostlek] - [#108385])
+- Tweak evohome code quality ([@zxdavb] - [#107596])
+- Fix FlowHandler show progress ([@emontnemery] - [#108586])
+- Send recurrence data when updating a task in todoist ([@boralyl] - [#108269])
+- Update August diagnostics.py to redact contentToken ([@codyc1515] - [#108626])
+- Significantly reduce websocket api connection auth phase latency ([@bdraco] - [#108564])
+- Speed up run time of admin services by using HassJob ([@bdraco] - [#108623])
+- Avoid recreating persistent notification update function when subscribing ([@bdraco] - [#108624])
+- Small performance improvements to handing revoke token callbacks ([@bdraco] - [#108625])
+- Refactor async_listen_once to remove nonlocal ([@bdraco] - [#108627])
+- Avoid string decode/encode round trip in websocket_api get_services ([@bdraco] - [#108632])
+- Small cleanups to async_get_all_descriptions ([@bdraco] - [#108633])
+- Bump habluetooth to 2.3.1 ([@bdraco] - [#108628])
+- Small cleanup to zone async_active_zone ([@bdraco] - [#108629])
+- Fix unifi test_tracked_clients test ([@bdraco] - [#108638])
+- Remove numbering from GitHub progress step to not deal with styling of list entries ([@ludeeus] - [#108639])
+- Remove obsolete services.yaml and translations from WLED ([@jpbede] - [#108605])
+- Add icon translations to WLED ([@jpbede] - [#108604])
+- Add icon translations to Abode ([@joostlek] - [#108407])
+- Bump songpal dependency to 0.16.1 ([@rytilahti] - [#108637])
+- Use default icon in Agent DVR ([@joostlek] - [#108405])
+- Add icon translations to Adguard ([@joostlek] - [#108406])
+- Reduce lock contention when all translations are already cached ([@bdraco] - [#108634])
+- Update python-slugify to 8.0.1 ([@cdce8p] - [#108373])
+- Add binary_sensor to Ecovacs ([@edenhaus] - [#108544])
+- Update Pillow to 10.2.0 ([@frenck] - [#108422])
+- Convert AreaEntry to dataclass ([@emontnemery] - [#108648])
+- Bump asyncsleepiq to 1.5.2 ([@jmwaldrip] - [#108431])
+- Add device to Lutron ([@joostlek] - [#107467])
+- Add cloud tts entity ([@MartinHjelmare] - [#108293])
+- Add helper function to update and reload config entry to config flow ([@jpbede] - [#108034])
+- Cleanup Discovergy config flow ([@jpbede] - [#108381])
+- Update iOS configuration adding Action toggles to show in CarPlay and Watch ([@bgoncal] - [#108355])
+- Move core fundamental components into bootstrap ([@frenck] - [#105560])
+- Prevent runtime issue during entity registration in coordinator of AVM Fritz!Tools ([@mib1185] - [#108667])
+- Use snapshot testing in Airly sensor ([@joostlek] - [#108608])
+- Add icon translations to Airly ([@joostlek] - [#108404])
+- Add time to charge sensor to Tessie ([@Bre77] - [#108342])
+- Fix flaky sensibo test ([@jpbede] - [#108669])
+- Use new config entry update/abort helper in esphome ([@bdraco] - [#108672])
+- Use new config entry update/abort helper in august ([@bdraco] - [#108673])
+- Use new config entry update/abort helper in powerwall ([@bdraco] - [#108674])
+- Use new config entry update/abort helper in bthome ([@bdraco] - [#108676])
+- Use new config entry update/abort helper in xiaomi_ble ([@bdraco] - [#108677])
+- Use new config entry update/abort helper in yalexs_ble ([@bdraco] - [#108675])
+- Use new config entry update/abort helper in isy994 ([@bdraco] - [#108678])
+- Use new config entry update/abort helper in synology_dsm ([@bdraco] - [#108682])
+- Use new config entry update/abort helper in enphase_envoy ([@bdraco] - [#108679])
+- Use new config entry update/abort helper in shelly ([@bdraco] - [#108684])
+- Use new config entry update/abort helper in samsungtv ([@bdraco] - [#108683])
+- Use new config entry update/abort helper in onvif ([@bdraco] - [#108680])
+- Extend config entry update/abort helper to also update unique id ([@jpbede] - [#108681])
+- Use new config entry update/abort helper in enphase-envoy (part 2) ([@bdraco] - [#108689])
+- Use new config entry update/abort helper in apple_tv ([@bdraco] - [#108688])
+- Use new config entry update/abort helper in sense ([@bdraco] - [#108691])
+- Handle tplink credential change at run time ([@bdraco] - [#108692])
+- Refactor service enumeration methods to better match existing use cases ([@bdraco] - [#108671])
+- Use new config entry update/abort helper in bond ([@bdraco] - [#108690])
+- Add zeroconf to TechnoVE integration ([@Moustachauve] - [#108340])
+- Add OUI 5C628B to tplink ([@bdraco] - [#108699])
+- Bump habluetooth to 2.4.0 ([@bdraco] - [#108695])
+- Convert getting and removing access tokens to normal functions ([@bdraco] - [#108670])
+- Store area registry entries in a UserDict ([@emontnemery] - [#108656])
+- Group sensor calculate attributes ([@gjohansson-ST] - [#106972])
+- Fix for justnimbus integration ([@kvanzuijlen] - [#99212])
+- Scrub internal data for newer tplink devices ([@rytilahti] - [#108704])
+- Add Homeassistant Analytics Insights integration ([@joostlek] - [#107634])
+- Add sensor platform to Proximity ([@mib1185] - [#101497])
+- Add config flow for Time & Date ([@gjohansson-ST] - [#104183])
+- Use new config entry update/abort handler in co2signal ([@jpbede] - [#108715])
+- Bump python-homeassistant-analytics to 0.6.0 ([@joostlek] - [#108713])
+- Add ZHA entities for snzb06p ([@peterkh] - [#107379])
+- Add airtouch5 ([@danzel] - [#98136])
+- Add set_conversation_response script action ([@emontnemery] - [#108233])
+- Return PRESET_NONE in Honeywell ([@mkmer] - [#108599])
+- Remove home_plus_control and mark as virtual integration supported by Netatmo ([@jpbede] - [#107587])
+- Bump AIOSomecomort to 0.0.25 ([@mkmer] - [#107815])
+- Use new config entry update/abort handler in Honeywell ([@mkmer] - [#108726])
+- Improve tests of script trace ([@emontnemery] - [#108717])
+- Bump pymodbus to v2.6.3 ([@janiversen] - [#108736])
+- Add sensors to Ecovacs ([@edenhaus] - [#108686])
+- Improve vizio typing ([@cdce8p] - [#108042])
+- Get modbus coverage back to 100% ([@janiversen] - [#108734])
+- Randomize thread network names ([@emontnemery] - [#108302])
+- Fix intent loading and incorporate unmatched entities more ([@synesthesiam] - [#108423])
+- Pause Wyoming satellite on mute ([@synesthesiam] - [#108322])
+- Add 3C52A1 oui to tplink for tapo l5 devices ([@bdraco] - [#108750])
+- Add translation placeholders for TPLink power strip ([@joostlek] - [#108710])
+- Bumb python-homewizard-energy to 4.2.1 ([@DCSBL] - [#108738])
+- Use fixed state icon for climate domain ([@piitaya] - [#108723])
+- Add fan attributes icon translations ([@piitaya] - [#108722])
+- Add humidifier attributes icon translations ([@piitaya] - [#108718])
+- Add LeaOne integration ([@bdraco] - [#108617])
+- Bump lupupy to 0.3.2 ([@suaveolent] - [#108756])
+- Add more device info to foscam camera ([@krmarien] - [#108177])
+- Handle IP address changes properly for tplink ([@sdb9696] - [#108731])
+- Add bang_olufsen integration ([@mj23000] - [#93462])
+- Parse template result in async_render_with_possible_json_value ([@danieldotnl] - [#99670])
+- Bump py-switchbot-api to 2.0.0 ([@jklausa] - [#108721])
+- Bump comments in light indicating backwards compatibility plan ([@emontnemery] - [#108770])
+- Add ZHA metering summation received sensor ([@jeverley] - [#107576])
+- Fix race when deleting an automation ([@emontnemery] - [#108772])
+- Fix light color mode in fritzbox ([@emontnemery] - [#108758])
+- Fix light color mode in tplink ([@emontnemery] - [#108760])
+- Fix light color mode in advantage_air ([@emontnemery] - [#108757])
+- Fix light color mode in netatmo ([@emontnemery] - [#108759])
+- Improve tests of script trace ([@emontnemery] - [#108733])
+- Adjust color_mode checks when lights render effects ([@emontnemery] - [#108737])
+- Add invert option to switch_as_x ([@emontnemery] - [#107535])
+- Fix light color mode in tradfri ([@emontnemery] - [#108761])
+- Add Ecovacs select entities ([@edenhaus] - [#108766])
+- Stabilize alexa discovery ([@jbouwh] - [#108787])
+- Add Shelly CoAP port to default container port ([@chemelli74] - [#108016])
+- Add icon to areas ([@emontnemery] - [#108650])
+- Bump python-roborock to 39.1 ([@Lash-L] - [#108751])
+- Fix changed_variables in automation and script traces ([@emontnemery] - [#108788])
+- Complete device tracker entity tests ([@MartinHjelmare] - [#108768])
+- Avoid copying translations for single components ([@bdraco] - [#108645])
+- Bump area registry storage minor version to 4 ([@jpbede] - [#108798])
+- Set right icon for set_humidity climate service ([@piitaya] - [#108801])
+- Add write_registers support for Fan Mode in modbus ([@crug80] - [#108053])
+- Bump aioshelly to 8.0.1 ([@bdraco] - [#108805])
+- Add super chlorination services to screenlogic ([@dieselrabbit] - [#108048])
+- Add Ecovacs diagnostics ([@edenhaus] - [#108791])
+- Add expiration of unused refresh tokens ([@mib1185] - [#108428])
+- Bump thermopro-ble to 0.9.0 ([@h3ss] - [#108820])
+- Fix ESPHome not fully removing entities when entity info changes ([@bdraco] - [#108823])
+- Convert http auth internals to normal functions ([@bdraco] - [#108815])
+- Add basic tests for powerview scenes ([@bdraco] - [#108818])
+- Fix lights reporting unsupported colormodes in deCONZ ([@Kane610] - [#108812])
+- Update pytedee_async to 0.2.12 ([@zweckj] - [#108800])
+- Fix matter color modes ([@MartinHjelmare] - [#108804])
+- Fix light color mode in zwave_js ([@emontnemery] - [#108783])
+- Do not try to cleanup invalid config entries without an AccessoryPairingID ([@bdraco] - [#108830])
+- Bump dorny/paths-filter from 2.11.1 to 2.12.0 (@dependabot - [#108826])
+- Bump python-kasa to 0.6.1 ([@rytilahti] - [#108831])
+- Add 'last_reset' for 'total' state_class template sensor ([@RoboMagus] - [#100806])
+- Add support for externally connected utility devices in HomeWizard ([@DCSBL] - [#100684])
+- Update Lutron in callback ([@joostlek] - [#108779])
+- Add Teslemetry Integration ([@Bre77] - [#108147])
+- Add Huum integration ([@frwickst] - [#106420])
+- Use feed name as entity name in GeoJSON ([@codyc1515] - [#108753])
+- Use entity translations placeholders in HomeWizard ([@DCSBL] - [#108741])
+- Make device tracker latitude and longitude optional ([@MartinHjelmare] - [#108838])
+- Use Zigpy definition objects in ZHA cluster handlers ([@dmulcahey] - [#108383])
+- Bump blinkpy to 0.22.6 ([@mkmer] - [#108727])
+- Bump pyhuum to 0.7.10 ([@frwickst] - [#108853])
+- Address late review on auth ([@mib1185] - [#108852])
+- Add ConfigFlow for Lupusec ([@suaveolent] - [#108740])
+- Add utility meter option for the sensor to always be available ([@dougiteixeira] - [#103481])
+- Filter only utility_meter select entities in reset service ([@dgomes] - [#108855])
+- Add switch to flexit bacnet integration ([@lellky] - [#108866])
+- Fix ESPHome color modes for older firmwares ([@bdraco] - [#108870])
+- Bump aiocomelit to 0.8.2 ([@chemelli74] - [#108862])
+- Add binary sensor platform to JVC Projector ([@msavazzi] - [#108668])
+- Apply consistent naming to ZHA cluster handler implementations ([@dmulcahey] - [#108851])
+- Small cleanup to entity platform translation fetching ([@bdraco] - [#108890])
+- Speed up security filter middleware ([@bdraco] - [#108703])
+- Small speed up to listing config entries in the websocket api ([@bdraco] - [#108892])
+- Remove "max_current" from TechnoVE sensors ([@Moustachauve] - [#108898])
+- Add entity registry test to Withings ([@joostlek] - [#108900])
+- Add webhook support to tedee integration ([@zweckj] - [#106846])
+- Use unknown color_mode for MQTT json lights if color mode is not set ([@jbouwh] - [#108909])
+- Fix light color mode in advantage_air ([@emontnemery] - [#108875])
+- Deprecate legacy Proximity entity ([@mib1185] - [#108730])
+- Add Ecovacs image entities ([@edenhaus] - [#108924])
+- Switch imap to use async_update_reload_and_abort helper ([@bdraco] - [#108935])
+- Switch unifiprotect to use async_update_reload_and_abort helper ([@bdraco] - [#108934])
+- Convert referenced registry functions to use cached_property ([@bdraco] - [#108895])
+- Improved Assist debug ([@synesthesiam] - [#108889])
+- Refactor logbook helpers to reduce splits and lookups ([@bdraco] - [#108933])
+- Add more Thread vendor to brand mappings ([@agners] - [#108899])
+- Matter sensors for air quality measurements ([@matt7aylor] - [#108173])
+- Add comment to explain not using the core API in MQTT client ([@jbouwh] - [#108942])
+- Reorganize ZHA device availability code ([@dmulcahey] - [#108856])
+- Add snapshot testing to Tessie ([@Bre77] - [#108346])
+- Replace modbus number_validator by HA standard ([@janiversen] - [#108939])
+- Add model check to ZHA Sonoff manufacturer specific cluster handler ([@dmulcahey] - [#108947])
+- Use version property in Blink ([@mkmer] - [#108911])
+- Bump pyenphase to 1.19.0 ([@catsmanac] - [#108951])
+- Bump cryptography to 42.0.1 and pyOpenSSL to 24.0.0 ([@bdraco] - [#108956])
+- Add options flow to Analytics Insights ([@joostlek] - [#108716])
+- Separate ecobee start and end date/times for create_vacation service ([@myztillx] - [#107255])
+- Bump pytrafikverket to 0.3.10 ([@gjohansson-ST] - [#108984])
+- Fix error when passing a whole number to location selector ([@karwosts] - [#108952])
+- Add enum sensor to Vogel's MotionMount integration ([@RJPoelstra] - [#108643])
+- Add device info to lupusec ([@suaveolent] - [#108910])
+- Add clima support to Comelit integration ([@chemelli74] - [#108858])
+- Bump tesla-fleet-api to 0.2.3 ([@Bre77] - [#108992])
+- Added type information to lupusec ([@suaveolent] - [#109004])
+- Improve display of errors with no message in script trace ([@emontnemery] - [#108735])
+- Fix statuses for ZHA attribute reporting configuration event ([@dmulcahey] - [#108532])
+- Add new virtual integration for opower City of Austin Utilities provider ([@max2697] - [#108337])
+- Update pylutron-caseta to 0.19.0 ([@eclair4151] - [#108987])
+- Remove extra confirmation step in tplink authenticated discovery flow ([@bdraco] - [#109016])
+- Bump dorny/paths-filter from 2.12.0 to 3.0.0 (@dependabot - [#108894])
+- Add translation placeholder to Hue ([@joostlek] - [#108848])
+- Add tests to Teslemetry ([@Bre77] - [#108884])
+- Remove follow symlinks support from CachingStaticResource ([@bdraco] - [#109015])
+- Separate fixture in Sensibo ([@gjohansson-ST] - [#109000])
+- Add phase entities to Enphase Envoy ([@catsmanac] - [#108725])
+- Bump pytest-asyncio to 0.23.4 ([@joostlek] - [#109027])
+- Bump python-homewizard-energy to v4.2.2 ([@joostlek] - [#109038])
+- Add pylint plugin to check if coordinator is placed in its own module ([@jpbede] - [#108174])
+- Update attributes in Entity.__init__ in matter ([@emontnemery] - [#108877])
+- Move asyncio lock in Teslemetry ([@Bre77] - [#109044])
+- Add binary sensors to TechnoVE integration ([@Moustachauve] - [#108938])
+- Bump github/codeql-action from 3.23.1 to 3.23.2 (@dependabot - [#109039])
+- Fix Permobil eula error ([@IsakNyberg] - [#107290])
+- Simplify HomeWizard sensor names ([@DCSBL] - [#108854])
+- Remove deprecated event_loop fixtures in tests ([@cdce8p] - [#109048])
+- Avoid re-encoding the hassio command URL each request ([@bdraco] - [#109031])
+- Set hassio api json encoding to avoid looking it up every request ([@bdraco] - [#109032])
+- Add new sensors exposed by HomeWizard kWh meter ([@DCSBL] - [#108850])
+- Add bring integration ([@miaucl] - [#108027])
+- Bump aio-geojson-nsw-rfs-incidents to 0.7 ([@exxamalte] - [#108885])
+- Code quality for Shelly tests ([@chemelli74] - [#109054])
+- Allow delete_all_refresh_tokens to delete a specific token_type ([@karwosts] - [#106119])
+- Fix zwave_js set_config_parameter WS api regression ([@kpine] - [#109042])
+- Add default parameter to as_datetime template function/filter ([@TheFes] - [#107229])
+- Use constants instead of literals for api ([@jpbede] - [#105955])
+- Use unique artifact names for db jobs [ci] ([@cdce8p] - [#108653])
+- Allow system and helper integrations to provide entity_component icons ([@piitaya] - [#109045])
+- Add discovery support for the 2023 pro check model to mopkea ([@bdraco] - [#109033])
+- Prepare Analytics insights for more sensors ([@joostlek] - [#108976])
+- Raise ValueError when `last_reset` set and not `total` state class ([@jpbede] - [#108391])
+- Reject unifi uptime sensor updates if time delta is small ([@BHSPitMonkey] - [#108464])
+- Don't check SSL certificate retrieving webos image ([@emichael] - [#104014])
+- Add lutron fan entity ([@wilburCforce] - [#107402])
+- Bump python-kasa to 0.6.2 ([@rytilahti] - [#109064])
+- Try to reconnect to UniFi on 403 ([@Kane610] - [#109067])
+- Fix light color mode in govee_light_local ([@emontnemery] - [#108762])
+- Bump deebot-client to 5.0.0 ([@edenhaus] - [#109066])
+- Use right initial attribute value for demo climate ([@piitaya] - [#108719])
+- Add doors and charge cable binary sensors to Tessie ([@Bre77] - [#107172])
+- Bump tesla-powerwall to 0.5.1 ([@bdraco] - [#109069])
+- Extract foscam base entity for reuse ([@krmarien] - [#108893])
+- Update apprise to 1.7.2 ([@frenck] - [#109071])
+- Update colorlog to 6.8.2 ([@frenck] - [#109072])
+- Bump python-matter-server to version 5.3.0 ([@marcelveldt] - [#109068])
+- Fix duplicate Windy values showing in automations state selector ([@codyc1515] - [#108062])
+- Code quality for Comelit tests ([@chemelli74] - [#109077])
+- Don't remove zwave_js devices automatically ([@raman325] - [#98145])
+- Update calendar tests to use mock entities instead of demo platform ([@allenporter] - [#105317])
+- Bump/flush mypy cache ([@frenck] - [#109101])
+- Bump simplisafe-python to 2024.01.0 ([@peebles] - [#109091])
+- Code quality for Shelly integration ([@chemelli74] - [#109061])
+- Add support for ignoring zwave_js device config file changes ([@raman325] - [#108990])
+- Add configure option to Vodafone Station for consider home ([@chemelli74] - [#108594])
+- Fix tessie tests ([@Bre77] - [#109113])
+- Add person icon translations ([@piitaya] - [#109106])
+- Update attrs to 23.2.0 ([@cdce8p] - [#109115])
+- Improve invalid error messages in the config flows ([@edenhaus] - [#108075])
+- Add device tracker icon translations ([@piitaya] - [#109109])
+- Remove erroneous reference to Google from Calendar integration ([@codyc1515] - [#109089])
+- Intents package combines sentences/responses per language ([@synesthesiam] - [#109079])
+- Bump pytechnove to 1.2.1 ([@Moustachauve] - [#109098])
+- Clean up Fritz options flow ([@chemelli74] - [#109111])
+- Bump python-matter-server to 5.3.1 ([@marcelveldt] - [#109118])
+- Add script icon translations ([@piitaya] - [#109107])
+- Add input boolean icon translations ([@piitaya] - [#109108])
+- Add missing status's to Nut ([@cbrherms] - [#109085])
+- Update coverage to 7.4.1 ([@cdce8p] - [#109116])
+- Clean up ZHA cover entity and add support for inverting cover entities derived from the window covering cluster ([@dmulcahey] - [#108238])
+- Fix readme images ([@xMohamd] - [#108767])
+- Flow rate unit conversions and device class ([@elupus] - [#106077])
+- Add TURN_OFF and TURN_ON to ClimateEntityFeature ([@gjohansson-ST] - [#101673])
+- Add TURN_ON/OFF ClimateEntityFeature for Shelly ([@gjohansson-ST] - [#108967])
+- Update climate snapshots to fix CI ([@edenhaus] - [#109141])
+- Add support for custom integrations in Analytics Insights ([@joostlek] - [#109110])
+- Add TURN_ON/OFF ClimateEntityFeature for smartthings ([@gjohansson-ST] - [#108979])
+- Add TURN_ON/OFF ClimateEntityFeature for ZHA ([@gjohansson-ST] - [#108978])
+- Add TURN_ON/OFF ClimateEntityFeature for Balboa ([@gjohansson-ST] - [#109139])
+- Add TURN_ON/OFF ClimateEntityFeature for Vicare ([@gjohansson-ST] - [#109135])
+- Add TURN_ON/OFF ClimateEntityFeature for TOLO Sauna ([@gjohansson-ST] - [#108965])
+- Add TURN_ON/OFF ClimateEntityFeature for Overkiz ([@gjohansson-ST] - [#109132])
+- Add TURN_ON/OFF ClimateEntityFeature for Sensibo ([@gjohansson-ST] - [#108962])
+- Add TURN_ON/OFF ClimateEntityFeature for IntesisHome ([@gjohansson-ST] - [#109134])
+- Add TURN_ON/OFF ClimateEntityFeature for Fritzbox ([@gjohansson-ST] - [#108964])
+- Add TURN_ON/OFF ClimateEntityFeature for Adax ([@gjohansson-ST] - [#108966])
+- Add TURN_ON/OFF ClimateEntityFeature for Vera ([@gjohansson-ST] - [#108969])
+- Add TURN_ON/OFF ClimateEntityFeature for Nexia ([@gjohansson-ST] - [#108970])
+- Add TURN_ON/OFF ClimateEntityFeature for Advantage Air ([@gjohansson-ST] - [#108971])
+- Add TURN_ON/OFF ClimateEntityFeature for CoolMasterNet ([@gjohansson-ST] - [#108972])
+- Add TURN_ON/OFF ClimateEntityFeature for Netatmo ([@gjohansson-ST] - [#108973])
+- Add TURN_ON/OFF ClimateEntityFeature for Mill ([@gjohansson-ST] - [#108977])
+- Update Ecovacs binary sensor keys ([@edenhaus] - [#109145])
+- Add check for valid initial_suggested_unit ([@edenhaus] - [#108902])
+- Set TURN_ON and TURN_OFF feature on MQTT climate entities ([@jbouwh] - [#109146])
+- Update reload icons for automation and person service ([@piitaya] - [#109147])
+- Add event entity to Xiaomi-BLE integration ([@Ernst79] - [#108811])
+- Add TURN_ON/OFF ClimateEntityFeature for HomeKit Device ([@gjohansson-ST] - [#109137])
+- Simplify MQTT device triggers in automations ([@jbouwh] - [#108309])
+- Speed up listing issues via the repairs websocket api ([@bdraco] - [#109149])
+- Add missing ZHA metering device types ([@jeverley] - [#109126])
+- Filter ZHA light group color modes ([@puddly] - [#108861])
+- Remove Shelly RSSI sensor if Wi-FI is not configured ([@chemelli74] - [#108390])
+- Create an issue when database backups fail because the system runs out of resources ([@bdraco] - [#109020])
+- Fix precipitation typo in icons ([@karwosts] - [#109156])
+- Fix ZHA cover inversion handling missing attributes ([@puddly] - [#109151])
+- Handle deprecated cloud tts voice ([@MartinHjelmare] - [#109124])
+- Add a repair issue for Shelly devices with unsupported firmware ([@chemelli74] - [#109076])
+- Bump zha-quirks to 0.0.110 ([@TheJulianJES] - [#109161])
+- Add Nextcloud update entity ([@escoand] - [#106690])
+- Add DurationConverter ([@edenhaus] - [#108865])
+- Fix ZHA handling of power factor ElectricalMeasurement attribute sensor ([@jeverley] - [#107641])
+- Bump regenmaschine to 2024.01.0 ([@bdraco] - [#109157])
+- Convert gather calls into TaskGroups ([@bubonicbob] - [#109010])
+- Fix "deprecated" typo in ZHA smartenergy comment ([@TheJulianJES] - [#109173])
+- Fix Ecovacs duration sensors ([@edenhaus] - [#108868])
+- Store preferred border agent extended address for each thread dataset ([@emontnemery] - [#109065])
+- Bump python-matter-server to 5.4.0 ([@marcelveldt] - [#109178])
+- Fix schema validation for product_id in picnic integration ([@codesalatdev] - [#109083])
+- Bumb python-homewizard-energy to 4.3.0 ([@DCSBL] - [#109131])
+- Add alexa PowerController on enabled features for climate entities ([@jbouwh] - [#109174])
+- Migrate Tuya integration to new sharing SDK ([@frenck] - [#109155])
+- Add ZHA ZCL thermostat entities ([@Caius-Bonus] - [#106563])
+- Add OnOff trait for climate entities in google_assistant ([@jbouwh] - [#109160])
+- Add generic typing for powerwall sensors ([@bubonicbob] - [#109008])
+- Add update platform to ZHA (bumps zigpy to 0.61.0) ([@dmulcahey] - [#107612])
+- Add additional entities for the Aqara E1 curtain motor to ZHA ([@dmulcahey] - [#108243])
+- Add icon and state translations for zwave_js sensors ([@raman325] - [#109186])
+- Change the suggested energy units to kWh ([@bubonicbob] - [#109184])
+- allow songcast source to be stopped and played ([@bazwilliams] - [#109180])
+- Ensure bluetooth auto recovery does not run in tests ([@bdraco] - [#109163])
+- Remove unused constants from QNAP ([@jrieger] - [#109152])
+- Bump aioelectricitymaps to 0.2.0 ([@jpbede] - [#109150])
+- Intellifire: fix incorrect name attribute in debug log when setting flame height ([@julienfreche] - [#109168])
+- Add individual battery banks as devices ([@bubonicbob] - [#108339])
+- Add last seen sensor for zwave_js devices ([@raman325] - [#107345])
+- Add log to show last received UniFi websocket message ([@Kane610] - [#109167])
+- Add Ecovacs button entities ([@edenhaus] - [#109189])
+- Use constants in Picnic service functions ([@codesalatdev] - [#109170])
+- Add test case for binary sensors in ViCare ([@CFenner] - [#108769])
+- Add state_class to Kostal plenticore sensors ([@stegm] - [#108096])
+- Add coordinator to ring integration ([@sdb9696] - [#107088])
+- Add romy vacuum integration ([@xeniter] - [#93750])
+- Add session energy sensor for Tesla Wall Connector ([@mandarons] - [#102635])
+- Minor fixes to A. O. Smith integration ([@bdr99] - [#107421])
+- Migrate QNAP to has entity name ([@jrieger] - [#107232])
+- Add configflow to Proximity integration ([@mib1185] - [#103894])
+- Use home/sleep preset in ViCare climate entity ([@CFenner] - [#105636])
+- Make google_assistant report_state test timezone aware ([@jbouwh] - [#109200])
+- Apply late review comments for Comelit climate ([@chemelli74] - [#109114])
+- Add Qnap icon translations ([@jrieger] - [#108484])
+- Code quality for Vodafone tests ([@chemelli74] - [#109078])
+- Update Ecovacs config_flow to support self-hosted instances ([@edenhaus] - [#108944])
+- Make flexit bacnet switch more generic and prepare for more switches ([@lellky] - [#109154])
+- Add fuelcell gas consumption sensors to ViCare integration ([@CFenner] - [#105461])
+- Set entity category for QNAP sensors ([@jrieger] - [#109207])
+- Add Matter Websocket commands for node actions and diagnostics ([@marcelveldt] - [#109127])
+- Add Ecovacs number entities ([@edenhaus] - [#109209])
+- Add Elvia integration ([@ludeeus] - [#107405])
+- Add Traccar server integration ([@ludeeus] - [#109002])
+- Move tankerkoenig to new aiotankerkoenig package ([@jpbede] - [#108913])
+- Create issues for reauth flows ([@emontnemery] - [#109105])
+- Fix Huisbaasje negative periodic gas readings (#103457) ([@JeroenvIS] - [#108090])
+- Support alternative modelid for LIDL doorbell in deCONZ device triggers ([@Kane610] - [#107937])
+- Add Ecovacs switch entities ([@edenhaus] - [#109216])
+- Improve enabling of Google local fulfillment ([@emontnemery] - [#109192])
+- Modify climate turn_on/off backwards compatibility check ([@gjohansson-ST] - [#109195])
+- Add readable state for tesla wall connector ([@piitaya] - [#107909])
+- Rename Traccar to Traccar Client ([@ludeeus] - [#109217])
+- Use EnumSensor instead of custom formatter() in ZHA Sensor entities ([@Caius-Bonus] - [#109218])
+- Add ZHA support for Bosch Twinguard and siren install QR codes ([@idstein] - [#107460])
+- Add brands definition for Traccar ([@ludeeus] - [#109219])
+- Import Traccar YAML configuration to Traccar Server ([@ludeeus] - [#109226])
+- Add config flow to GPSD ([@jrieger] - [#106196])
+- Add qr code selector ([@bramkragten] - [#109214])
+- Fix ring chimes data update ([@sdb9696] - [#109220])
+- Update frontend to 20240131.0 ([@bramkragten] - [#109231])
+- Add test for integration migrated in climate ([@gjohansson-ST] - [#109224])
+- Suppress log warnings when a sensor group has non numeric members ([@mill1000] - [#102828])
+- Add reauth flow to kitchen sink ([@emontnemery] - [#109202])
+- Sort script actions ([@emontnemery] - [#108247])
+- Add translations to GPSd ([@jrieger] - [#108600])
+- Update rokuecp to 0.19 ([@ctalkington] - [#109100])
+- Fix time to arrival to timestamp in Tessie ([@Bre77] - [#109172])
+- Make zwave_js last seen sensor enabled by default ([@raman325] - [#109191])
+- Pass verify_ssl to created session in Omada ([@joostlek] - [#109212])
+- Bump govee-ble to 0.31.0 ([@bdraco] - [#109235])
+- Remove deprecation warnings for zwave_js climate TURN_ON/TURN_OFF features ([@raman325] - [#109242])
+- Apply review comments on proximity ([@mib1185] - [#109249])
+- Fix Xiaomi-ble automations for multiple button devices ([@Ernst79] - [#109251])
+- Fix ZHA update entity not updating installed version ([@TheJulianJES] - [#109260])
+- Restore support for packages being installed from urls with fragments ([@bdraco] - [#109267])
+- Fix app name sorting in apple_tv ([@bdraco] - [#109274])
+- Address late review of Tankerkoenig package move ([@jpbede] - [#109277])
+- Fix dalkin climate warnings ([@jbouwh] - [#109279])
+- bugfix: name missing in getLogger ([@llluis] - [#109282])
+- Fix two icon translations for La Marzocco ([@zweckj] - [#109284])
+- Remove quality scale platinum from daikin integration ([@jbouwh] - [#109292])
+- Fix device class repairs issues UOM placeholders in Group ([@frenck] - [#109294])
+- Bump hass-nabucasa from 0.75.1 to 0.76.0 ([@ludeeus] - [#109296])
+- Add translations for zwave_js entities and services ([@raman325] - [#109188])
+- Add climate on/off feature to Tessie ([@Bre77] - [#109239])
+- Add climate turn on/off feature to Teslemetry ([@Bre77] - [#109241])
+- Don't log warning for core integrations on new feature flags in Climate ([@gjohansson-ST] - [#109250])
+- Migrate to new intent error response keys ([@synesthesiam] - [#109269])
+- Remove battery charge sensor from powerwall ([@bubonicbob] - [#109271])
+- Bump airthings-ble to 0.6.1 ([@LaStrada] - [#109302])
+- Verify Ecovacs mqtt config ([@edenhaus] - [#109306])
+- Bump pytedee_async to 0.2.13 ([@zweckj] - [#109307])
+- Do not use a battery device class for Shelly analog input sensor ([@bieniu] - [#109311])
+- Fix race in loading service descriptions ([@bdraco] - [#109316])
+- Move default response out of sentence trigger registration and into agent ([@synesthesiam] - [#109317])
+- Update Home Assistant base image to 2024.02.0 ([@frenck] - [#109329])
+- Fix custom attribute lookup in Traccar Server ([@ludeeus] - [#109331])
+- Add device class to tesla wall connector session energy ([@piitaya] - [#109333])
+- Follow up swiss_public_transport migration fix of unique ids ([@miaucl] - [#107873])
+- Add independent session in honeywell ([@mkmer] - [#108435])
+- Add migrated ClimateEntityFeature for Atag ([@gjohansson-ST] - [#108961])
+- Add TURN_ON/OFF ClimateEntityFeature for Fibaro ([@gjohansson-ST] - [#108963])
+- Add TURN_ON/OFF ClimateEntityFeature for Matter ([@gjohansson-ST] - [#108974])
+- Add TURN_ON/OFF ClimateEntityFeature for Modbus ([@gjohansson-ST] - [#109133])
+- Add migrated ClimateEntityFeature for SwitchBot Cloud ([@gjohansson-ST] - [#109136])
+- Add TURN_ON/OFF ClimateEntityFeature for KNX ([@gjohansson-ST] - [#109138])
+- Add migrated ClimateEntityFeature for Nibe Heat Pump ([@gjohansson-ST] - [#109140])
+- Fix stale camera error message in img_util ([@bdraco] - [#109325])
+- Correct modbus commit validation, too strict on integers ([@janiversen] - [#109338])
+- Add sensibo migrated ClimateEntityFeatures ([@gjohansson-ST] - [#109340])
+- Add Adax migrated ClimateEntityFeatures ([@gjohansson-ST] - [#109341])
+- Ensure the purge entities service cleans up the states_meta table ([@bdraco] - [#109344])
+- Missing template helper translation keys ([@karwosts] - [#109347])
+- Update cryptography to 42.0.2 ([@frenck] - [#109359])
+- Bump deebot_client to 5.1.0 ([@edenhaus] - [#109360])
+- Specify end_time when importing Elvia data to deal with drift ([@ludeeus] - [#109361])
+- Remove suggested area from Verisure ([@frenck] - [#109364])
+- Improve Ecovacs naming ([@edenhaus] - [#109372])
+- Update frontend to 20240202.0 ([@bramkragten] - [#109388])
+- Ignore gateway devices in ViCare integration ([@CFenner] - [#106477])
+- Do not suggest area for portable Sonos speakers ([@jjlawren] - [#109350])
+- Update elgato to 5.1.2 ([@frenck] - [#109391])
+- Add diagnostics to proximity ([@mib1185] - [#109393])
+- More thorough checks in ESPHome voice assistant UDP server ([@synesthesiam] - [#109394])
+- Bump python-kasa to 0.6.2.1 ([@rytilahti] - [#109397])
+- Bump aioelectricitymaps to 0.3.0 ([@jpbede] - [#109399])
+- Fix device type in Lutron ([@wilburCforce] - [#109401])
+- Bump matrix-nio to 0.24.0 ([@jurriaan] - [#109403])
+- Bump aiotankerkoenig to 0.3.0 ([@jpbede] - [#109404])
+- Pass slots to error messages instead of IDs [rework] ([@synesthesiam] - [#109410])
+- Bump intents to 2024.2.2 ([@synesthesiam] - [#109412])
+- Bump aiohomekit to 3.1.4 ([@Jc2k] - [#109414])
+- Add Mill migrated ClimateEntityFeatures ([@gjohansson-ST] - [#109415])
+- Add new ClimateEntityFeature for Tado ([@gjohansson-ST] - [#109416])
+- Add ClimateEntityFeatures to Nest ([@gjohansson-ST] - [#109417])
+- Adds migrated ClimateEntityFeature to Netatmo ([@gjohansson-ST] - [#109418])
+- Add migrated ClimateEntityFeature to MQTT ([@gjohansson-ST] - [#109419])
+- Add migrated ClimateEntityFeatures to advantage_air ([@gjohansson-ST] - [#109420])
+- Add new climate feature flags to airzone ([@gjohansson-ST] - [#109423])
+- Adds new climate feature flags for airzone_cloud ([@gjohansson-ST] - [#109424])
+- Add migrated climate feature flags to shelly ([@gjohansson-ST] - [#109425])
+- Add migrated climate feature flags to smartthings ([@gjohansson-ST] - [#109426])
+- Add migrated climate feature flags to smarttub ([@gjohansson-ST] - [#109427])
+- Add new climate feature flags to evohome ([@gjohansson-ST] - [#109429])
+- Add migrated climate entity features to flexit ([@gjohansson-ST] - [#109430])
+- Add new climate feature flags to flexit_bacnet ([@gjohansson-ST] - [#109431])
+- Add migrated climate feature flags to homekit_controller ([@gjohansson-ST] - [#109433])
+- Adds migrated climate entity feature for velbus ([@gjohansson-ST] - [#109435])
+- Add new climate feature flags to venstar ([@gjohansson-ST] - [#109436])
+- Add new OUIs for tplink ([@rytilahti] - [#109437])
+- Add migrated feature flags to vera ([@gjohansson-ST] - [#109438])
+- Add migrated climate feature flags to vicare ([@gjohansson-ST] - [#109439])
+- Add new climate feature flags to whirlpool ([@gjohansson-ST] - [#109440])
+- Add migrated climate feature flags to xs1 ([@gjohansson-ST] - [#109441])
+- Add new climate feature flags to yolink ([@gjohansson-ST] - [#109442])
+- Add migrated climate feature flags to zha ([@gjohansson-ST] - [#109443])
+- Add new climate feature flags to zhong_hong ([@gjohansson-ST] - [#109444])
+- Add migrated climate feature flags to zwave_me ([@gjohansson-ST] - [#109445])
+- Add migrated climate feature flags to teslemetry ([@gjohansson-ST] - [#109446])
+- Add migrated climate feature flags for tessie ([@gjohansson-ST] - [#109447])
+- Add new climate feature flags to tfiac ([@gjohansson-ST] - [#109448])
+- Add migrated climate feature flags to tolo ([@gjohansson-ST] - [#109449])
+- Add migrated climate feature flags to toon ([@gjohansson-ST] - [#109450])
+- Add migrated climate feature flags to touchline ([@gjohansson-ST] - [#109451])
+- Add migrated climate feature flags to schluter ([@gjohansson-ST] - [#109452])
+- Add new climate feature flags to screenlogic ([@gjohansson-ST] - [#109454])
+- Add migrated climate feature flags to senz ([@gjohansson-ST] - [#109455])
+- Add new climate feature flags to stiebel_eltron ([@gjohansson-ST] - [#109457])
+- Add new climate feature flags to oem ([@gjohansson-ST] - [#109461])
+- Add migrated climate feature flags to opentherm_gw ([@gjohansson-ST] - [#109462])
+- Add migrated climate feature flags to overkiz ([@gjohansson-ST] - [#109463])
+- Adds migrated climate feature flags for proliphix ([@gjohansson-ST] - [#109465])
+- Add new climate feature flags to radiotherm ([@gjohansson-ST] - [#109466])
+- Adds new climate feature flags to maxcube ([@gjohansson-ST] - [#109467])
+- Add new feature flags to melcloud ([@gjohansson-ST] - [#109468])
+- Adds new climate feature flags to melissa ([@gjohansson-ST] - [#109469])
+- Add migrated climate feature flags to moehlenhoff ([@gjohansson-ST] - [#109470])
+- Add new climate feature flags to mysensors ([@gjohansson-ST] - [#109471])
+- Add migrated climate feature flags to nexia ([@gjohansson-ST] - [#109472])
+- Adds migrated climate feature flags to nobo_hub ([@gjohansson-ST] - [#109473])
+- Adds migrated climate feature flags in nuheat ([@gjohansson-ST] - [#109474])
+- Adds new climate feature flags to ambiclimate ([@gjohansson-ST] - [#109475])
+- Adds new climate feature flags in baf ([@gjohansson-ST] - [#109476])
+- Adds migrated climate feature flags in balboa ([@gjohansson-ST] - [#109477])
+- Add new climate feature flags to blebox ([@gjohansson-ST] - [#109478])
+- Adds new climate feature flags to broadlink ([@gjohansson-ST] - [#109479])
+- Adds new climate feature flags to bsblan ([@gjohansson-ST] - [#109480])
+- Add new climate feature flags to demo ([@gjohansson-ST] - [#109481])
+- Add new climate feature flags to deconz ([@gjohansson-ST] - [#109482])
+- Extend the history of Elvia history to 3 years ([@ludeeus] - [#109490])
+- Change IoT class for Traccar Client ([@ludeeus] - [#109493])
+- Fix Tankerkoenig diagnostics file to use right format ([@jpbede] - [#109494])
+- Revert "Add webhook support to tedee integration (#106846)" ([@zweckj] - [#109408])
+- Avoid duplicate entity names in proximity ([@mib1185] - [#109413])
+- Add ClimateEntityFeatures to airtouch4 ([@gjohansson-ST] - [#109421])
+- Add new climate feature flags for airtouch5 ([@gjohansson-ST] - [#109422])
+- Add new climate feature flags to esphome ([@gjohansson-ST] - [#109428])
+- Add new climate feature flags to tuya ([@gjohansson-ST] - [#109434])
+- Add climate feature flags to spider ([@gjohansson-ST] - [#109456])
+- Add migrated climate feature flag to switchbee ([@gjohansson-ST] - [#109458])
+- Add new climate feature flags to switcher_kis ([@gjohansson-ST] - [#109459])
+- Add new climate feature flags for plugwise ([@gjohansson-ST] - [#109464])
+- Correct flow rate conversion review after merge ([@elupus] - [#109501])
+- Bump easyenergy lib to v2.1.1 ([@klaasnicolaas] - [#109510])
+- Move climate feature flags to child classes for airzone_cloud ([@TheJulianJES] - [#109515])
+- Prevent Flo devices and entities from going unavailable when a single refresh fails ([@dmulcahey] - [#109522])
+- Fix empty error modal when adding duplicate Thread integration ([@codyc1515] - [#109530])
+- Add new climate feature flags to ccm15 ([@gjohansson-ST] - [#109534])
+- Add new climate feature flags to comelit ([@gjohansson-ST] - [#109535])
+- Add migrated climate feature flags to coolmaster ([@gjohansson-ST] - [#109536])
+- Add migrated climate feature flags to daikin ([@gjohansson-ST] - [#109537])
+- Add migrated climate feature flags to devolo home control ([@gjohansson-ST] - [#109538])
+- Add new climate feature flags to duotecno ([@gjohansson-ST] - [#109539])
+- Add new climate feature flags to ecobee ([@gjohansson-ST] - [#109540])
+- Add new climate feature flags to econet ([@gjohansson-ST] - [#109541])
+- Add new climate feature flags to electrasmart ([@gjohansson-ST] - [#109542])
+- Adds new climate feature flags to elkm1 ([@gjohansson-ST] - [#109543])
+- Add new climate feature flags to ephember ([@gjohansson-ST] - [#109544])
+- Add new climate feature flags to escea ([@gjohansson-ST] - [#109545])
+- Add new climate feature flags to freedompro ([@gjohansson-ST] - [#109546])
+- Add migrated climate feature flags to fritzbox ([@gjohansson-ST] - [#109547])
+- Add new climate feature flags to generic_thermostat ([@gjohansson-ST] - [#109548])
+- Add new climate feature flags to geniushub ([@gjohansson-ST] - [#109549])
+- Add new climate feature flags to gree ([@gjohansson-ST] - [#109550])
+- Add new climate feature flags to heatmiser ([@gjohansson-ST] - [#109551])
+- Add new climate feature flags to hisense ([@gjohansson-ST] - [#109552])
+- Add new climate feature flags to hive ([@gjohansson-ST] - [#109553])
+- Add new climate feature flags to homematic ([@gjohansson-ST] - [#109554])
+- Add migrated climate feature flags to homematicip_cloud ([@gjohansson-ST] - [#109555])
+- Add new climate feature flags to honeywell ([@gjohansson-ST] - [#109556])
+- Add new climate feature flags to huum ([@gjohansson-ST] - [#109557])
+- Add new climate feature flags to iaqualink ([@gjohansson-ST] - [#109558])
+- Add migrated climate feature flags to incomfort ([@gjohansson-ST] - [#109559])
+- Add new climate feature flags to insteon ([@gjohansson-ST] - [#109560])
+- Add new climate feature flags to intellifire ([@gjohansson-ST] - [#109562])
+- Fix new climate feature flags in intesishome ([@gjohansson-ST] - [#109563])
+- Add new climate feature flags to isy994 ([@gjohansson-ST] - [#109564])
+- Add new climate feature flags to izone ([@gjohansson-ST] - [#109565])
+- Add new climate feature flags to lcn ([@gjohansson-ST] - [#109566])
+- Add new climate feature flags to lightwave ([@gjohansson-ST] - [#109568])
+- Add migrated climate feature flags to livisi ([@gjohansson-ST] - [#109569])
+- Add new climate feature flags to lookin ([@gjohansson-ST] - [#109570])
+- Add new climate feature flags to lyric ([@gjohansson-ST] - [#109571])
+- Add back logging for core for feature flags in climate ([@gjohansson-ST] - [#109572])
+- Fix yolink abnormal status when LeakSensor detection mode changes to "no water detect" ([@matrixd2] - [#109575])
+- Fix group sensor uom's in not convertable device classes ([@gjohansson-ST] - [#109580])
+- Fix overkiz climate feature flags for valve heating ([@gjohansson-ST] - [#109582])
+- Bump yalexs-ble to 2.4.1 ([@bdraco] - [#109585])
+- Fix Google generative AI service example ([@tronikos] - [#109594])
+- Bugfix lamarzocco issue ([@zweckj] - [#109596])
+- Redact location names in proximity diagnostics ([@mib1185] - [#109600])
+- Handle GeoJSON int to str conversion when the name is an int ([@codyc1515] - [#108937])
+- Fix imap message part decoding ([@jbouwh] - [#109523])
+- Update orjson to 3.9.13 ([@frenck] - [#109614])
+- Fix Tuya QR code expiry, use native QR selector ([@frenck] - [#109615])
+- Fix repairs for remove dates in Workday ([@gjohansson-ST] - [#109626])
+- Add debug logger for cpu temp in System Monitor ([@gjohansson-ST] - [#109627])
+- Allow the helper integrations to omit icon translation field ([@joostlek] - [#109648])
+- Add icon translations to derivative ([@joostlek] - [#109650])
+- Add icon translations to Counter ([@joostlek] - [#109651])
+- Add icon translations to Random ([@joostlek] - [#109652])
+- Improve Tuya token/reauth handling ([@frenck] - [#109653])
+- Add icon translations to Utility meter helper ([@jpbede] - [#109656])
+- Fix Tuya reauth_successful translation string ([@frenck] - [#109659])
+- Don't create AsusWRT loadavg sensors when unavailable ([@ollo69] - [#106790])
+- Screenlogic service refactor ([@dieselrabbit] - [#109041])
+- Fix home connect remaining progress time ([@leahoswald] - [#109525])
+- Add zone related sensors in proximity ([@mib1185] - [#109630])
+- Bump georss-generic-client to 0.8 ([@exxamalte] - [#109658])
+- Add icon translation to proximity ([@mib1185] - [#109664])
+- Add missing translation string to Home Assistant Analytics Insights ([@mib1185] - [#109666])
+- Buffer TImeoutError in Flo ([@dmulcahey] - [#109675])
+- Show site state in Amberelectric config flow ([@madpilot] - [#104702])
+- Bump python matter server to 5.4.1 ([@marcelveldt] - [#109692])
+- Add data descriptions to analytics insights ([@joostlek] - [#109694])
+- Set shorthand attribute in Epion ([@joostlek] - [#109695])
+- Remove obsolete check from Proximity ([@joostlek] - [#109701])
+- Set Analytics Insights as diagnostic ([@joostlek] - [#109702])
+- Queue climate calls for Comelit SimpleHome ([@chemelli74] - [#109707])
+- Fix log string in Traccar Server Coordinator ([@ludeeus] - [#109709])
+- Update frontend to 20240205.0 ([@bramkragten] - [#109716])
+- Add strings to Ruuvitag BLE ([@joostlek] - [#109717])
+- Bump python-bring-api to 3.0.0 ([@miaucl] - [#109720])
+- Fix generic camera error when template renders to an invalid URL ([@jbouwh] - [#109737])
+- Use tracked entity friendly name for proximity sensors ([@mib1185] - [#109744])
+- Add missing new climate feature flags to Mill ([@gjohansson-ST] - [#109748])
+- Fix incorrectly assigning supported features for plugwise climates ([@bouwew] - [#109749])
+- Reduce MELCloud poll frequency to avoid throttling ([@vilppuvuorinen] - [#109750])
+- Handle startup error in Analytics insights ([@joostlek] - [#109755])
+- Fix ZHA creating unnecessary "summ received" entity after upgrade ([@TheJulianJES] - [#109268])
+- Bump pyMicrobot to 0.0.10 ([@spycle] - [#109628])
+- Fix keymitt_ble config-flow ([@spycle] - [#109644])
+- Improve lupusec code quality ([@suaveolent] - [#109727])
+- Fix compatibility issues with older pymelcloud version ([@vilppuvuorinen] - [#109757])
+- Bump holidays to 0.42 ([@gjohansson-ST] - [#109760])
+- Fix Radarr health check singularity ([@joostlek] - [#109762])
+- Buffer JsonDecodeError in Flo ([@dmulcahey] - [#109767])
+- Bump ZHA dependencies ([@puddly] - [#109770])
+- Change state class of Tesla wall connector session energy entity ([@jpbede] - [#109778])
+- Bump ring_doorbell to 0.8.6 ([@sdb9696] - [#109199])
+- Bump ring_doorbell to 0.8.7 ([@sdb9696] - [#109783])
+- Update xknx to 2.12.0 and xknxproject to 3.5.0 ([@farmio] - [#109787])
+- Update MELCloud codeowners ([@vilppuvuorinen] - [#109793])
+- Bump aioelectricitymaps to 0.3.1 ([@jpbede] - [#109797])
+- Pin `chacha20poly1305-reuseable>=0.12.1` ([@puddly] - [#109807])
+- Don't block Supervisor entry setup with refreshing updates ([@frenck] - [#109809])
+- Fix entity services targeting entities outside the platform when using areas/devices ([@bdraco] - [#109810])
+- Mark Unifi bandwidth sensors as unavailable when client disconnects ([@wittypluck] - [#109812])
+- Ignore `trackable` without `details` in Tractive integration ([@bieniu] - [#109814])
+- Bump aioecowitt to 2024.2.0 ([@joostlek] - [#109817])
+- Bump python-otbr-api to 2.6.0 ([@emontnemery] - [#109823])
+- Bump aioesphomeapi to 21.0.2 ([@bdraco] - [#109824])
+- Bump awesomeversion from 23.11.0 to 24.2.0 ([@ludeeus] - [#109830])
+- Show domain in oauth2 error log ([@joostlek] - [#109708])
+- Add tapo virtual integration ([@rytilahti] - [#109765])
+- Make integration fields in Analytics Insights optional ([@joostlek] - [#109789])
+- Disable energy report based operations with API lib upgrade ([@vilppuvuorinen] - [#109832])
+- Bump motionblinds to 0.6.20 ([@starkillerOG] - [#109837])
+- Bump ZHA dependency zigpy to 0.62.3 ([@puddly] - [#109848])
+- Update Growatt server URLs ([@chenjiayi8] - [#109122])
+- Update nibe to 2.8.0 with LOG.SET fixes ([@elupus] - [#109825])
+- Bump aio-georss-gdacs to 0.9 ([@exxamalte] - [#109859])
+- Update frontend to 20240207.0 ([@bramkragten] - [#109871])
+- Fix YoLink SpeakerHub support ([@matrixd2] - [#107925])
+- Remove soft hyphens from myuplink sensor names ([@astrandb] - [#109845])
+- Bump aio-geojson-geonetnz-quakes to 0.16 ([@exxamalte] - [#109873])
+- Fix kitchen sink tests ([@joostlek] - [#109243])
+
+## Release 2024.2.1 - February 9
+
+- Catch APIRateLimit in Honeywell ([@mkmer] - [#107806])
+- Allow disabling home assistant watchdog ([@mdegat01] - [#109818])
+- Assist fixes ([@synesthesiam] - [#109889])
+- Bump Python matter server to 5.5.0 ([@marcelveldt] - [#109894])
+- Bump aioelectricitymaps to 0.4.0 ([@jpbede] - [#109895])
+- Skip polling of unavailable Matter nodes ([@marcelveldt] - [#109917])
+- Bump aio-geojson-geonetnz-volcano to 0.9 ([@exxamalte] - [#109940])
+- Handle Matter nodes that become available after startup is done ([@marcelveldt] - [#109956])
+- Allow modbus "scale" to be negative. ([@janiversen] - [#109965])
+- Don't blow up if config entries have unhashable unique IDs ([@emontnemery] - [#109966])
+- Bump pyMicrobot to 0.0.12 ([@spycle] - [#109970])
+- Allow modbus min/max temperature to be negative. ([@janiversen] - [#109977])
+- Bump deebot-client to 5.1.1 ([@edenhaus] - [#109994])
+- Allow modbus negative min/max value. ([@janiversen] - [#109995])
+- Bump aioecowitt to 2024.2.1 ([@edenhaus] - [#109999])
+- Avoid key_error in modbus climate with non-defined fan_mode. ([@janiversen] - [#110017])
+- Update frontend to 20240207.1 ([@bramkragten] - [#110039])
+- Matching duplicate named entities is now an error in Assist ([@synesthesiam] - [#110050])
+- Log error and continue on parsing issues of translated strings ([@mib1185] - [#110046])
+- Bump evohome-async to 0.4.18 ([@zxdavb] - [#110056])
+- Bump py-aosmith to 1.0.8 ([@bdr99] - [#110061])
+
+[#107806]: https://github.com/home-assistant/core/pull/107806
+[#109818]: https://github.com/home-assistant/core/pull/109818
+[#109883]: https://github.com/home-assistant/core/pull/109883
+[#109889]: https://github.com/home-assistant/core/pull/109889
+[#109894]: https://github.com/home-assistant/core/pull/109894
+[#109895]: https://github.com/home-assistant/core/pull/109895
+[#109917]: https://github.com/home-assistant/core/pull/109917
+[#109940]: https://github.com/home-assistant/core/pull/109940
+[#109956]: https://github.com/home-assistant/core/pull/109956
+[#109965]: https://github.com/home-assistant/core/pull/109965
+[#109966]: https://github.com/home-assistant/core/pull/109966
+[#109970]: https://github.com/home-assistant/core/pull/109970
+[#109977]: https://github.com/home-assistant/core/pull/109977
+[#109994]: https://github.com/home-assistant/core/pull/109994
+[#109995]: https://github.com/home-assistant/core/pull/109995
+[#109999]: https://github.com/home-assistant/core/pull/109999
+[#110017]: https://github.com/home-assistant/core/pull/110017
+[#110039]: https://github.com/home-assistant/core/pull/110039
+[#110046]: https://github.com/home-assistant/core/pull/110046
+[#110050]: https://github.com/home-assistant/core/pull/110050
+[#110056]: https://github.com/home-assistant/core/pull/110056
+[#110061]: https://github.com/home-assistant/core/pull/110061
+[@bdr99]: https://github.com/bdr99
+[@bramkragten]: https://github.com/bramkragten
+[@edenhaus]: https://github.com/edenhaus
+[@emontnemery]: https://github.com/emontnemery
+[@exxamalte]: https://github.com/exxamalte
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@jpbede]: https://github.com/jpbede
+[@marcelveldt]: https://github.com/marcelveldt
+[@mdegat01]: https://github.com/mdegat01
+[@mib1185]: https://github.com/mib1185
+[@mkmer]: https://github.com/mkmer
+[@spycle]: https://github.com/spycle
+[@synesthesiam]: https://github.com/synesthesiam
+[@zxdavb]: https://github.com/zxdavb
+
+## Release 2024.2.2 - February 16
+
+- Better teardown and setup of Roborock connections ([@Lash-L] - [#106092])
+- Fix freebox pairing in bridge mode ([@agrenott] - [#106131])
+- Update pytechnove to 1.2.2 ([@Moustachauve] - [#110074])
+- Bump aio-geojson-usgs-earthquakes to 0.3 ([@exxamalte] - [#110084])
+- Bump yalexs to 1.11.1, fixing camera snapshots from Yale Home ([@abjorck] - [#110089])
+- Fix typo in sensor icons configuration ([@bieniu] - [#110133])
+- Only schedule august activity update when a new activity is seen ([@bdraco] - [#110141])
+- Bump yalexs to 1.11.2 ([@bdraco] - [#110144])
+- Properly report cover positions to prometheus ([@agoode] - [#110157])
+- Fix device class repairs issues placeholders in Group ([@silamon] - [#110181])
+- Bump datapoint to 0.9.9 + re-enable Met Office Integration ([@DustyArmstrong] - [#110206])
+- Bump evohome-async to 0.4.19 ([@zxdavb] - [#110225])
+- Fix state classes issue translation in Group ([@silamon] - [#110238])
+- Handle no data error in Electricity Maps config flow ([@jpbede] - [#110259])
+- Fix cpu percentage in System Monitor ([@gjohansson-ST] - [#110268])
+- Bump aiopegelonline to 0.0.8 ([@mib1185] - [#110274])
+- Bump PySwitchbot to 0.45.0 ([@bdraco] - [#110275])
+- Update xknxproject to 3.6.0 ([@farmio] - [#110282])
+- Fix TDBU naming in Motionblinds ([@starkillerOG] - [#110283])
+- Bump linear-garage-door to 0.2.9 ([@IceBotYT] - [#110298])
+- Fix Starline GPS count sensor ([@Anonym-tsk] - [#110348])
+- Fix zone radius calculation when radius is not 0 ([@bdraco] - [#110354])
+- Bump py-sucks to 0.9.9 ([@mib1185] - [#110397])
+- Bump async-upnp-client to 0.38.2 ([@StevenLooman] - [#110411])
+- Mitigate session closed error in Netgear LTE ([@tkdrob] - [#110412])
+- Update pylutron to 0.2.11 ([@wilburCforce] - [#109853])
+- Update pylutron to 0.2.12 ([@wilburCforce] - [#110414])
+- Fix Raspberry Pi utilities installation on Alpine 3.19 ([@agners] - [#110463])
+- Coerce to float in Sensibo climate react custom service ([@gjohansson-ST] - [#110508])
+- Bump orjson to 3.9.14 ([@bdraco] - [#110552])
+- Fix tplink not updating IP from DHCP discovery and discovering twice ([@bdraco] - [#110557])
+- Modbus, allow received int to be a float. ([@janiversen] - [#110648])
+- Fix elkm1 service calls running in the executor ([@bdraco] - [#110655])
+- Bump aiounifi to v71 ([@Kane610] - [#110658])
+- Bump deebot-client to 5.2.1 ([@edenhaus] - [#110683])
+
+[#106092]: https://github.com/home-assistant/core/pull/106092
+[#106131]: https://github.com/home-assistant/core/pull/106131
+[#109853]: https://github.com/home-assistant/core/pull/109853
+[#109883]: https://github.com/home-assistant/core/pull/109883
+[#110074]: https://github.com/home-assistant/core/pull/110074
+[#110078]: https://github.com/home-assistant/core/pull/110078
+[#110084]: https://github.com/home-assistant/core/pull/110084
+[#110089]: https://github.com/home-assistant/core/pull/110089
+[#110133]: https://github.com/home-assistant/core/pull/110133
+[#110141]: https://github.com/home-assistant/core/pull/110141
+[#110144]: https://github.com/home-assistant/core/pull/110144
+[#110157]: https://github.com/home-assistant/core/pull/110157
+[#110181]: https://github.com/home-assistant/core/pull/110181
+[#110206]: https://github.com/home-assistant/core/pull/110206
+[#110225]: https://github.com/home-assistant/core/pull/110225
+[#110238]: https://github.com/home-assistant/core/pull/110238
+[#110259]: https://github.com/home-assistant/core/pull/110259
+[#110268]: https://github.com/home-assistant/core/pull/110268
+[#110274]: https://github.com/home-assistant/core/pull/110274
+[#110275]: https://github.com/home-assistant/core/pull/110275
+[#110282]: https://github.com/home-assistant/core/pull/110282
+[#110283]: https://github.com/home-assistant/core/pull/110283
+[#110298]: https://github.com/home-assistant/core/pull/110298
+[#110348]: https://github.com/home-assistant/core/pull/110348
+[#110354]: https://github.com/home-assistant/core/pull/110354
+[#110397]: https://github.com/home-assistant/core/pull/110397
+[#110411]: https://github.com/home-assistant/core/pull/110411
+[#110412]: https://github.com/home-assistant/core/pull/110412
+[#110414]: https://github.com/home-assistant/core/pull/110414
+[#110463]: https://github.com/home-assistant/core/pull/110463
+[#110508]: https://github.com/home-assistant/core/pull/110508
+[#110552]: https://github.com/home-assistant/core/pull/110552
+[#110557]: https://github.com/home-assistant/core/pull/110557
+[#110648]: https://github.com/home-assistant/core/pull/110648
+[#110655]: https://github.com/home-assistant/core/pull/110655
+[#110658]: https://github.com/home-assistant/core/pull/110658
+[#110683]: https://github.com/home-assistant/core/pull/110683
+[@Anonym-tsk]: https://github.com/Anonym-tsk
+[@DustyArmstrong]: https://github.com/DustyArmstrong
+[@IceBotYT]: https://github.com/IceBotYT
+[@Kane610]: https://github.com/Kane610
+[@Lash-L]: https://github.com/Lash-L
+[@Moustachauve]: https://github.com/Moustachauve
+[@StevenLooman]: https://github.com/StevenLooman
+[@abjorck]: https://github.com/abjorck
+[@agners]: https://github.com/agners
+[@agoode]: https://github.com/agoode
+[@agrenott]: https://github.com/agrenott
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@edenhaus]: https://github.com/edenhaus
+[@exxamalte]: https://github.com/exxamalte
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@janiversen]: https://github.com/janiversen
+[@jpbede]: https://github.com/jpbede
+[@mib1185]: https://github.com/mib1185
+[@silamon]: https://github.com/silamon
+[@starkillerOG]: https://github.com/starkillerOG
+[@tkdrob]: https://github.com/tkdrob
+[@wilburCforce]: https://github.com/wilburCforce
+[@zxdavb]: https://github.com/zxdavb
+
+## Release 2024.2.3 - February 22
+
+- Fix reauth in Overkiz for config entries created prior to 2022.12 ([@iMicknl] - [#106251])
+- Handle deep standby and poweroffs of enigma2 devices gracefully ([@autinerd] - [#107462])
+- Add wake up timeout to Teslemetry ([@Bre77] - [#109037])
+- Fix set_temperature in Tessie climate platform ([@Bre77] - [#110445])
+- Fix uuid issue in Lutron ([@wilburCforce] - [#110524])
+- Update rokuecp to 0.19.1 ([@ctalkington] - [#110670])
+- Fix scene activation with climate entities with `None` attribute values ([@mib1185] - [#110684])
+- Remove matplotlib pinning due to Python 3.12 incompatibility ([@sbyx] - [#110706])
+- Bump roombapy to 1.6.12 ([@mib1185] - [#110762])
+- Ensure Tile timestamps are reported as UTC ([@bachya] - [#110773])
+- Detect reached API rate limit in Tankerkoenig ([@mib1185] - [#110432])
+- Bump aiotankerkoenig to 0.4.1 ([@jpbede] - [#110840])
+- Update govee-local-api library to 1.4.4 ([@Galorhallen] - [#110854])
+- Allow loading of more then 1 defined Apprise URL ([@caronc] - [#110868])
+- Reolink continue setup when internet blocked ([@starkillerOG] - [#110888])
+- Bump deluge-client to 1.10.0 ([@tkdrob] - [#110663])
+- Bump deluge-client to 1.10.2 ([@dsander] - [#110905])
+- Bump reolink-aio to 0.8.8 ([@starkillerOG] - [#110959])
+- Reset error state when Ecovacs bot is operational again ([@mib1185] - [#110962])
+- Bump motionblinds to 0.6.21 ([@starkillerOG] - [#110970])
+- Bump holidays to 0.43 ([@gjohansson-ST] - [#111039])
+- Fixes UniFi Protect light state check ([@AngellusMortis] - [#111058])
+- Bump pywebpush to 1.14.1 ([@thecode] - [#111082])
+- Bump aioairzone to v0.7.4 ([@Noltari] - [#111105])
+- Bump deebot-client to 5.2.2 ([@edenhaus] - [#111112])
+- Ignore cloudhook already removed in mobile app ([@joostlek] - [#111122])
+
+[#106251]: https://github.com/home-assistant/core/pull/106251
+[#107462]: https://github.com/home-assistant/core/pull/107462
+[#109037]: https://github.com/home-assistant/core/pull/109037
+[#109883]: https://github.com/home-assistant/core/pull/109883
+[#110078]: https://github.com/home-assistant/core/pull/110078
+[#110432]: https://github.com/home-assistant/core/pull/110432
+[#110445]: https://github.com/home-assistant/core/pull/110445
+[#110524]: https://github.com/home-assistant/core/pull/110524
+[#110663]: https://github.com/home-assistant/core/pull/110663
+[#110670]: https://github.com/home-assistant/core/pull/110670
+[#110684]: https://github.com/home-assistant/core/pull/110684
+[#110706]: https://github.com/home-assistant/core/pull/110706
+[#110720]: https://github.com/home-assistant/core/pull/110720
+[#110762]: https://github.com/home-assistant/core/pull/110762
+[#110773]: https://github.com/home-assistant/core/pull/110773
+[#110840]: https://github.com/home-assistant/core/pull/110840
+[#110854]: https://github.com/home-assistant/core/pull/110854
+[#110868]: https://github.com/home-assistant/core/pull/110868
+[#110888]: https://github.com/home-assistant/core/pull/110888
+[#110905]: https://github.com/home-assistant/core/pull/110905
+[#110959]: https://github.com/home-assistant/core/pull/110959
+[#110962]: https://github.com/home-assistant/core/pull/110962
+[#110970]: https://github.com/home-assistant/core/pull/110970
+[#111035]: https://github.com/home-assistant/core/pull/111035
+[#111039]: https://github.com/home-assistant/core/pull/111039
+[#111058]: https://github.com/home-assistant/core/pull/111058
+[#111082]: https://github.com/home-assistant/core/pull/111082
+[#111105]: https://github.com/home-assistant/core/pull/111105
+[#111112]: https://github.com/home-assistant/core/pull/111112
+[#111122]: https://github.com/home-assistant/core/pull/111122
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Bre77]: https://github.com/Bre77
+[@Galorhallen]: https://github.com/Galorhallen
+[@Noltari]: https://github.com/Noltari
+[@autinerd]: https://github.com/autinerd
+[@bachya]: https://github.com/bachya
+[@caronc]: https://github.com/caronc
+[@ctalkington]: https://github.com/ctalkington
+[@dsander]: https://github.com/dsander
+[@edenhaus]: https://github.com/edenhaus
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@iMicknl]: https://github.com/iMicknl
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@mib1185]: https://github.com/mib1185
+[@sbyx]: https://github.com/sbyx
+[@starkillerOG]: https://github.com/starkillerOG
+[@thecode]: https://github.com/thecode
+[@tkdrob]: https://github.com/tkdrob
+[@wilburCforce]: https://github.com/wilburCforce
+
+[#100684]: https://github.com/home-assistant/core/pull/100684
+[#100806]: https://github.com/home-assistant/core/pull/100806
+[#101497]: https://github.com/home-assistant/core/pull/101497
+[#101673]: https://github.com/home-assistant/core/pull/101673
+[#102291]: https://github.com/home-assistant/core/pull/102291
+[#102635]: https://github.com/home-assistant/core/pull/102635
+[#102828]: https://github.com/home-assistant/core/pull/102828
+[#102846]: https://github.com/home-assistant/core/pull/102846
+[#102972]: https://github.com/home-assistant/core/pull/102972
+[#103294]: https://github.com/home-assistant/core/pull/103294
+[#103400]: https://github.com/home-assistant/core/pull/103400
+[#103481]: https://github.com/home-assistant/core/pull/103481
+[#103569]: https://github.com/home-assistant/core/pull/103569
+[#103894]: https://github.com/home-assistant/core/pull/103894
+[#104014]: https://github.com/home-assistant/core/pull/104014
+[#104183]: https://github.com/home-assistant/core/pull/104183
+[#104208]: https://github.com/home-assistant/core/pull/104208
+[#104453]: https://github.com/home-assistant/core/pull/104453
+[#104522]: https://github.com/home-assistant/core/pull/104522
+[#104678]: https://github.com/home-assistant/core/pull/104678
+[#104702]: https://github.com/home-assistant/core/pull/104702
+[#104790]: https://github.com/home-assistant/core/pull/104790
+[#104942]: https://github.com/home-assistant/core/pull/104942
+[#104973]: https://github.com/home-assistant/core/pull/104973
+[#105031]: https://github.com/home-assistant/core/pull/105031
+[#105143]: https://github.com/home-assistant/core/pull/105143
+[#105300]: https://github.com/home-assistant/core/pull/105300
+[#105317]: https://github.com/home-assistant/core/pull/105317
+[#105321]: https://github.com/home-assistant/core/pull/105321
+[#105415]: https://github.com/home-assistant/core/pull/105415
+[#105417]: https://github.com/home-assistant/core/pull/105417
+[#105427]: https://github.com/home-assistant/core/pull/105427
+[#105461]: https://github.com/home-assistant/core/pull/105461
+[#105560]: https://github.com/home-assistant/core/pull/105560
+[#105636]: https://github.com/home-assistant/core/pull/105636
+[#105675]: https://github.com/home-assistant/core/pull/105675
+[#105712]: https://github.com/home-assistant/core/pull/105712
+[#105740]: https://github.com/home-assistant/core/pull/105740
+[#105789]: https://github.com/home-assistant/core/pull/105789
+[#105887]: https://github.com/home-assistant/core/pull/105887
+[#105895]: https://github.com/home-assistant/core/pull/105895
+[#105927]: https://github.com/home-assistant/core/pull/105927
+[#105955]: https://github.com/home-assistant/core/pull/105955
+[#105964]: https://github.com/home-assistant/core/pull/105964
+[#106029]: https://github.com/home-assistant/core/pull/106029
+[#106077]: https://github.com/home-assistant/core/pull/106077
+[#106078]: https://github.com/home-assistant/core/pull/106078
+[#106119]: https://github.com/home-assistant/core/pull/106119
+[#106196]: https://github.com/home-assistant/core/pull/106196
+[#106286]: https://github.com/home-assistant/core/pull/106286
+[#106420]: https://github.com/home-assistant/core/pull/106420
+[#106477]: https://github.com/home-assistant/core/pull/106477
+[#106485]: https://github.com/home-assistant/core/pull/106485
+[#106490]: https://github.com/home-assistant/core/pull/106490
+[#106504]: https://github.com/home-assistant/core/pull/106504
+[#106508]: https://github.com/home-assistant/core/pull/106508
+[#106514]: https://github.com/home-assistant/core/pull/106514
+[#106519]: https://github.com/home-assistant/core/pull/106519
+[#106530]: https://github.com/home-assistant/core/pull/106530
+[#106544]: https://github.com/home-assistant/core/pull/106544
+[#106560]: https://github.com/home-assistant/core/pull/106560
+[#106563]: https://github.com/home-assistant/core/pull/106563
+[#106568]: https://github.com/home-assistant/core/pull/106568
+[#106574]: https://github.com/home-assistant/core/pull/106574
+[#106599]: https://github.com/home-assistant/core/pull/106599
+[#106611]: https://github.com/home-assistant/core/pull/106611
+[#106623]: https://github.com/home-assistant/core/pull/106623
+[#106624]: https://github.com/home-assistant/core/pull/106624
+[#106625]: https://github.com/home-assistant/core/pull/106625
+[#106633]: https://github.com/home-assistant/core/pull/106633
+[#106635]: https://github.com/home-assistant/core/pull/106635
+[#106640]: https://github.com/home-assistant/core/pull/106640
+[#106647]: https://github.com/home-assistant/core/pull/106647
+[#106658]: https://github.com/home-assistant/core/pull/106658
+[#106661]: https://github.com/home-assistant/core/pull/106661
+[#106662]: https://github.com/home-assistant/core/pull/106662
+[#106667]: https://github.com/home-assistant/core/pull/106667
+[#106672]: https://github.com/home-assistant/core/pull/106672
+[#106674]: https://github.com/home-assistant/core/pull/106674
+[#106685]: https://github.com/home-assistant/core/pull/106685
+[#106687]: https://github.com/home-assistant/core/pull/106687
+[#106690]: https://github.com/home-assistant/core/pull/106690
+[#106691]: https://github.com/home-assistant/core/pull/106691
+[#106693]: https://github.com/home-assistant/core/pull/106693
+[#106696]: https://github.com/home-assistant/core/pull/106696
+[#106697]: https://github.com/home-assistant/core/pull/106697
+[#106702]: https://github.com/home-assistant/core/pull/106702
+[#106709]: https://github.com/home-assistant/core/pull/106709
+[#106710]: https://github.com/home-assistant/core/pull/106710
+[#106716]: https://github.com/home-assistant/core/pull/106716
+[#106717]: https://github.com/home-assistant/core/pull/106717
+[#106718]: https://github.com/home-assistant/core/pull/106718
+[#106719]: https://github.com/home-assistant/core/pull/106719
+[#106720]: https://github.com/home-assistant/core/pull/106720
+[#106721]: https://github.com/home-assistant/core/pull/106721
+[#106722]: https://github.com/home-assistant/core/pull/106722
+[#106723]: https://github.com/home-assistant/core/pull/106723
+[#106724]: https://github.com/home-assistant/core/pull/106724
+[#106735]: https://github.com/home-assistant/core/pull/106735
+[#106736]: https://github.com/home-assistant/core/pull/106736
+[#106740]: https://github.com/home-assistant/core/pull/106740
+[#106741]: https://github.com/home-assistant/core/pull/106741
+[#106742]: https://github.com/home-assistant/core/pull/106742
+[#106753]: https://github.com/home-assistant/core/pull/106753
+[#106759]: https://github.com/home-assistant/core/pull/106759
+[#106772]: https://github.com/home-assistant/core/pull/106772
+[#106773]: https://github.com/home-assistant/core/pull/106773
+[#106776]: https://github.com/home-assistant/core/pull/106776
+[#106790]: https://github.com/home-assistant/core/pull/106790
+[#106794]: https://github.com/home-assistant/core/pull/106794
+[#106795]: https://github.com/home-assistant/core/pull/106795
+[#106796]: https://github.com/home-assistant/core/pull/106796
+[#106802]: https://github.com/home-assistant/core/pull/106802
+[#106810]: https://github.com/home-assistant/core/pull/106810
+[#106812]: https://github.com/home-assistant/core/pull/106812
+[#106813]: https://github.com/home-assistant/core/pull/106813
+[#106814]: https://github.com/home-assistant/core/pull/106814
+[#106816]: https://github.com/home-assistant/core/pull/106816
+[#106817]: https://github.com/home-assistant/core/pull/106817
+[#106819]: https://github.com/home-assistant/core/pull/106819
+[#106820]: https://github.com/home-assistant/core/pull/106820
+[#106821]: https://github.com/home-assistant/core/pull/106821
+[#106823]: https://github.com/home-assistant/core/pull/106823
+[#106824]: https://github.com/home-assistant/core/pull/106824
+[#106825]: https://github.com/home-assistant/core/pull/106825
+[#106832]: https://github.com/home-assistant/core/pull/106832
+[#106836]: https://github.com/home-assistant/core/pull/106836
+[#106837]: https://github.com/home-assistant/core/pull/106837
+[#106838]: https://github.com/home-assistant/core/pull/106838
+[#106839]: https://github.com/home-assistant/core/pull/106839
+[#106840]: https://github.com/home-assistant/core/pull/106840
+[#106841]: https://github.com/home-assistant/core/pull/106841
+[#106844]: https://github.com/home-assistant/core/pull/106844
+[#106846]: https://github.com/home-assistant/core/pull/106846
+[#106852]: https://github.com/home-assistant/core/pull/106852
+[#106853]: https://github.com/home-assistant/core/pull/106853
+[#106854]: https://github.com/home-assistant/core/pull/106854
+[#106857]: https://github.com/home-assistant/core/pull/106857
+[#106858]: https://github.com/home-assistant/core/pull/106858
+[#106859]: https://github.com/home-assistant/core/pull/106859
+[#106860]: https://github.com/home-assistant/core/pull/106860
+[#106867]: https://github.com/home-assistant/core/pull/106867
+[#106868]: https://github.com/home-assistant/core/pull/106868
+[#106869]: https://github.com/home-assistant/core/pull/106869
+[#106871]: https://github.com/home-assistant/core/pull/106871
+[#106872]: https://github.com/home-assistant/core/pull/106872
+[#106878]: https://github.com/home-assistant/core/pull/106878
+[#106879]: https://github.com/home-assistant/core/pull/106879
+[#106880]: https://github.com/home-assistant/core/pull/106880
+[#106881]: https://github.com/home-assistant/core/pull/106881
+[#106887]: https://github.com/home-assistant/core/pull/106887
+[#106888]: https://github.com/home-assistant/core/pull/106888
+[#106889]: https://github.com/home-assistant/core/pull/106889
+[#106890]: https://github.com/home-assistant/core/pull/106890
+[#106902]: https://github.com/home-assistant/core/pull/106902
+[#106905]: https://github.com/home-assistant/core/pull/106905
+[#106906]: https://github.com/home-assistant/core/pull/106906
+[#106907]: https://github.com/home-assistant/core/pull/106907
+[#106908]: https://github.com/home-assistant/core/pull/106908
+[#106910]: https://github.com/home-assistant/core/pull/106910
+[#106914]: https://github.com/home-assistant/core/pull/106914
+[#106919]: https://github.com/home-assistant/core/pull/106919
+[#106924]: https://github.com/home-assistant/core/pull/106924
+[#106925]: https://github.com/home-assistant/core/pull/106925
+[#106926]: https://github.com/home-assistant/core/pull/106926
+[#106927]: https://github.com/home-assistant/core/pull/106927
+[#106930]: https://github.com/home-assistant/core/pull/106930
+[#106931]: https://github.com/home-assistant/core/pull/106931
+[#106932]: https://github.com/home-assistant/core/pull/106932
+[#106953]: https://github.com/home-assistant/core/pull/106953
+[#106965]: https://github.com/home-assistant/core/pull/106965
+[#106972]: https://github.com/home-assistant/core/pull/106972
+[#106975]: https://github.com/home-assistant/core/pull/106975
+[#106984]: https://github.com/home-assistant/core/pull/106984
+[#106992]: https://github.com/home-assistant/core/pull/106992
+[#106993]: https://github.com/home-assistant/core/pull/106993
+[#106994]: https://github.com/home-assistant/core/pull/106994
+[#106998]: https://github.com/home-assistant/core/pull/106998
+[#107003]: https://github.com/home-assistant/core/pull/107003
+[#107005]: https://github.com/home-assistant/core/pull/107005
+[#107010]: https://github.com/home-assistant/core/pull/107010
+[#107015]: https://github.com/home-assistant/core/pull/107015
+[#107028]: https://github.com/home-assistant/core/pull/107028
+[#107032]: https://github.com/home-assistant/core/pull/107032
+[#107034]: https://github.com/home-assistant/core/pull/107034
+[#107039]: https://github.com/home-assistant/core/pull/107039
+[#107040]: https://github.com/home-assistant/core/pull/107040
+[#107042]: https://github.com/home-assistant/core/pull/107042
+[#107045]: https://github.com/home-assistant/core/pull/107045
+[#107046]: https://github.com/home-assistant/core/pull/107046
+[#107050]: https://github.com/home-assistant/core/pull/107050
+[#107053]: https://github.com/home-assistant/core/pull/107053
+[#107065]: https://github.com/home-assistant/core/pull/107065
+[#107066]: https://github.com/home-assistant/core/pull/107066
+[#107069]: https://github.com/home-assistant/core/pull/107069
+[#107071]: https://github.com/home-assistant/core/pull/107071
+[#107088]: https://github.com/home-assistant/core/pull/107088
+[#107089]: https://github.com/home-assistant/core/pull/107089
+[#107090]: https://github.com/home-assistant/core/pull/107090
+[#107095]: https://github.com/home-assistant/core/pull/107095
+[#107096]: https://github.com/home-assistant/core/pull/107096
+[#107100]: https://github.com/home-assistant/core/pull/107100
+[#107107]: https://github.com/home-assistant/core/pull/107107
+[#107109]: https://github.com/home-assistant/core/pull/107109
+[#107111]: https://github.com/home-assistant/core/pull/107111
+[#107116]: https://github.com/home-assistant/core/pull/107116
+[#107119]: https://github.com/home-assistant/core/pull/107119
+[#107132]: https://github.com/home-assistant/core/pull/107132
+[#107139]: https://github.com/home-assistant/core/pull/107139
+[#107148]: https://github.com/home-assistant/core/pull/107148
+[#107151]: https://github.com/home-assistant/core/pull/107151
+[#107152]: https://github.com/home-assistant/core/pull/107152
+[#107153]: https://github.com/home-assistant/core/pull/107153
+[#107159]: https://github.com/home-assistant/core/pull/107159
+[#107160]: https://github.com/home-assistant/core/pull/107160
+[#107164]: https://github.com/home-assistant/core/pull/107164
+[#107168]: https://github.com/home-assistant/core/pull/107168
+[#107172]: https://github.com/home-assistant/core/pull/107172
+[#107175]: https://github.com/home-assistant/core/pull/107175
+[#107179]: https://github.com/home-assistant/core/pull/107179
+[#107184]: https://github.com/home-assistant/core/pull/107184
+[#107188]: https://github.com/home-assistant/core/pull/107188
+[#107189]: https://github.com/home-assistant/core/pull/107189
+[#107190]: https://github.com/home-assistant/core/pull/107190
+[#107192]: https://github.com/home-assistant/core/pull/107192
+[#107195]: https://github.com/home-assistant/core/pull/107195
+[#107196]: https://github.com/home-assistant/core/pull/107196
+[#107199]: https://github.com/home-assistant/core/pull/107199
+[#107206]: https://github.com/home-assistant/core/pull/107206
+[#107209]: https://github.com/home-assistant/core/pull/107209
+[#107210]: https://github.com/home-assistant/core/pull/107210
+[#107212]: https://github.com/home-assistant/core/pull/107212
+[#107213]: https://github.com/home-assistant/core/pull/107213
+[#107227]: https://github.com/home-assistant/core/pull/107227
+[#107229]: https://github.com/home-assistant/core/pull/107229
+[#107232]: https://github.com/home-assistant/core/pull/107232
+[#107238]: https://github.com/home-assistant/core/pull/107238
+[#107240]: https://github.com/home-assistant/core/pull/107240
+[#107251]: https://github.com/home-assistant/core/pull/107251
+[#107252]: https://github.com/home-assistant/core/pull/107252
+[#107255]: https://github.com/home-assistant/core/pull/107255
+[#107256]: https://github.com/home-assistant/core/pull/107256
+[#107257]: https://github.com/home-assistant/core/pull/107257
+[#107261]: https://github.com/home-assistant/core/pull/107261
+[#107262]: https://github.com/home-assistant/core/pull/107262
+[#107263]: https://github.com/home-assistant/core/pull/107263
+[#107264]: https://github.com/home-assistant/core/pull/107264
+[#107266]: https://github.com/home-assistant/core/pull/107266
+[#107267]: https://github.com/home-assistant/core/pull/107267
+[#107271]: https://github.com/home-assistant/core/pull/107271
+[#107272]: https://github.com/home-assistant/core/pull/107272
+[#107273]: https://github.com/home-assistant/core/pull/107273
+[#107274]: https://github.com/home-assistant/core/pull/107274
+[#107278]: https://github.com/home-assistant/core/pull/107278
+[#107280]: https://github.com/home-assistant/core/pull/107280
+[#107282]: https://github.com/home-assistant/core/pull/107282
+[#107283]: https://github.com/home-assistant/core/pull/107283
+[#107284]: https://github.com/home-assistant/core/pull/107284
+[#107285]: https://github.com/home-assistant/core/pull/107285
+[#107290]: https://github.com/home-assistant/core/pull/107290
+[#107292]: https://github.com/home-assistant/core/pull/107292
+[#107299]: https://github.com/home-assistant/core/pull/107299
+[#107300]: https://github.com/home-assistant/core/pull/107300
+[#107301]: https://github.com/home-assistant/core/pull/107301
+[#107302]: https://github.com/home-assistant/core/pull/107302
+[#107305]: https://github.com/home-assistant/core/pull/107305
+[#107306]: https://github.com/home-assistant/core/pull/107306
+[#107307]: https://github.com/home-assistant/core/pull/107307
+[#107309]: https://github.com/home-assistant/core/pull/107309
+[#107312]: https://github.com/home-assistant/core/pull/107312
+[#107320]: https://github.com/home-assistant/core/pull/107320
+[#107323]: https://github.com/home-assistant/core/pull/107323
+[#107324]: https://github.com/home-assistant/core/pull/107324
+[#107326]: https://github.com/home-assistant/core/pull/107326
+[#107333]: https://github.com/home-assistant/core/pull/107333
+[#107335]: https://github.com/home-assistant/core/pull/107335
+[#107337]: https://github.com/home-assistant/core/pull/107337
+[#107338]: https://github.com/home-assistant/core/pull/107338
+[#107341]: https://github.com/home-assistant/core/pull/107341
+[#107342]: https://github.com/home-assistant/core/pull/107342
+[#107345]: https://github.com/home-assistant/core/pull/107345
+[#107346]: https://github.com/home-assistant/core/pull/107346
+[#107351]: https://github.com/home-assistant/core/pull/107351
+[#107357]: https://github.com/home-assistant/core/pull/107357
+[#107372]: https://github.com/home-assistant/core/pull/107372
+[#107373]: https://github.com/home-assistant/core/pull/107373
+[#107377]: https://github.com/home-assistant/core/pull/107377
+[#107379]: https://github.com/home-assistant/core/pull/107379
+[#107380]: https://github.com/home-assistant/core/pull/107380
+[#107381]: https://github.com/home-assistant/core/pull/107381
+[#107382]: https://github.com/home-assistant/core/pull/107382
+[#107383]: https://github.com/home-assistant/core/pull/107383
+[#107402]: https://github.com/home-assistant/core/pull/107402
+[#107405]: https://github.com/home-assistant/core/pull/107405
+[#107408]: https://github.com/home-assistant/core/pull/107408
+[#107409]: https://github.com/home-assistant/core/pull/107409
+[#107410]: https://github.com/home-assistant/core/pull/107410
+[#107411]: https://github.com/home-assistant/core/pull/107411
+[#107417]: https://github.com/home-assistant/core/pull/107417
+[#107421]: https://github.com/home-assistant/core/pull/107421
+[#107423]: https://github.com/home-assistant/core/pull/107423
+[#107424]: https://github.com/home-assistant/core/pull/107424
+[#107425]: https://github.com/home-assistant/core/pull/107425
+[#107426]: https://github.com/home-assistant/core/pull/107426
+[#107427]: https://github.com/home-assistant/core/pull/107427
+[#107428]: https://github.com/home-assistant/core/pull/107428
+[#107436]: https://github.com/home-assistant/core/pull/107436
+[#107437]: https://github.com/home-assistant/core/pull/107437
+[#107438]: https://github.com/home-assistant/core/pull/107438
+[#107439]: https://github.com/home-assistant/core/pull/107439
+[#107440]: https://github.com/home-assistant/core/pull/107440
+[#107444]: https://github.com/home-assistant/core/pull/107444
+[#107445]: https://github.com/home-assistant/core/pull/107445
+[#107447]: https://github.com/home-assistant/core/pull/107447
+[#107454]: https://github.com/home-assistant/core/pull/107454
+[#107458]: https://github.com/home-assistant/core/pull/107458
+[#107459]: https://github.com/home-assistant/core/pull/107459
+[#107460]: https://github.com/home-assistant/core/pull/107460
+[#107467]: https://github.com/home-assistant/core/pull/107467
+[#107469]: https://github.com/home-assistant/core/pull/107469
+[#107480]: https://github.com/home-assistant/core/pull/107480
+[#107486]: https://github.com/home-assistant/core/pull/107486
+[#107488]: https://github.com/home-assistant/core/pull/107488
+[#107497]: https://github.com/home-assistant/core/pull/107497
+[#107503]: https://github.com/home-assistant/core/pull/107503
+[#107509]: https://github.com/home-assistant/core/pull/107509
+[#107512]: https://github.com/home-assistant/core/pull/107512
+[#107514]: https://github.com/home-assistant/core/pull/107514
+[#107516]: https://github.com/home-assistant/core/pull/107516
+[#107518]: https://github.com/home-assistant/core/pull/107518
+[#107520]: https://github.com/home-assistant/core/pull/107520
+[#107529]: https://github.com/home-assistant/core/pull/107529
+[#107534]: https://github.com/home-assistant/core/pull/107534
+[#107535]: https://github.com/home-assistant/core/pull/107535
+[#107539]: https://github.com/home-assistant/core/pull/107539
+[#107540]: https://github.com/home-assistant/core/pull/107540
+[#107542]: https://github.com/home-assistant/core/pull/107542
+[#107547]: https://github.com/home-assistant/core/pull/107547
+[#107548]: https://github.com/home-assistant/core/pull/107548
+[#107553]: https://github.com/home-assistant/core/pull/107553
+[#107555]: https://github.com/home-assistant/core/pull/107555
+[#107556]: https://github.com/home-assistant/core/pull/107556
+[#107557]: https://github.com/home-assistant/core/pull/107557
+[#107558]: https://github.com/home-assistant/core/pull/107558
+[#107559]: https://github.com/home-assistant/core/pull/107559
+[#107560]: https://github.com/home-assistant/core/pull/107560
+[#107567]: https://github.com/home-assistant/core/pull/107567
+[#107570]: https://github.com/home-assistant/core/pull/107570
+[#107571]: https://github.com/home-assistant/core/pull/107571
+[#107576]: https://github.com/home-assistant/core/pull/107576
+[#107578]: https://github.com/home-assistant/core/pull/107578
+[#107582]: https://github.com/home-assistant/core/pull/107582
+[#107583]: https://github.com/home-assistant/core/pull/107583
+[#107584]: https://github.com/home-assistant/core/pull/107584
+[#107585]: https://github.com/home-assistant/core/pull/107585
+[#107587]: https://github.com/home-assistant/core/pull/107587
+[#107590]: https://github.com/home-assistant/core/pull/107590
+[#107595]: https://github.com/home-assistant/core/pull/107595
+[#107596]: https://github.com/home-assistant/core/pull/107596
+[#107597]: https://github.com/home-assistant/core/pull/107597
+[#107598]: https://github.com/home-assistant/core/pull/107598
+[#107599]: https://github.com/home-assistant/core/pull/107599
+[#107601]: https://github.com/home-assistant/core/pull/107601
+[#107602]: https://github.com/home-assistant/core/pull/107602
+[#107603]: https://github.com/home-assistant/core/pull/107603
+[#107604]: https://github.com/home-assistant/core/pull/107604
+[#107607]: https://github.com/home-assistant/core/pull/107607
+[#107611]: https://github.com/home-assistant/core/pull/107611
+[#107612]: https://github.com/home-assistant/core/pull/107612
+[#107613]: https://github.com/home-assistant/core/pull/107613
+[#107617]: https://github.com/home-assistant/core/pull/107617
+[#107618]: https://github.com/home-assistant/core/pull/107618
+[#107621]: https://github.com/home-assistant/core/pull/107621
+[#107622]: https://github.com/home-assistant/core/pull/107622
+[#107623]: https://github.com/home-assistant/core/pull/107623
+[#107624]: https://github.com/home-assistant/core/pull/107624
+[#107625]: https://github.com/home-assistant/core/pull/107625
+[#107626]: https://github.com/home-assistant/core/pull/107626
+[#107627]: https://github.com/home-assistant/core/pull/107627
+[#107628]: https://github.com/home-assistant/core/pull/107628
+[#107634]: https://github.com/home-assistant/core/pull/107634
+[#107641]: https://github.com/home-assistant/core/pull/107641
+[#107643]: https://github.com/home-assistant/core/pull/107643
+[#107644]: https://github.com/home-assistant/core/pull/107644
+[#107646]: https://github.com/home-assistant/core/pull/107646
+[#107653]: https://github.com/home-assistant/core/pull/107653
+[#107654]: https://github.com/home-assistant/core/pull/107654
+[#107659]: https://github.com/home-assistant/core/pull/107659
+[#107663]: https://github.com/home-assistant/core/pull/107663
+[#107666]: https://github.com/home-assistant/core/pull/107666
+[#107668]: https://github.com/home-assistant/core/pull/107668
+[#107670]: https://github.com/home-assistant/core/pull/107670
+[#107672]: https://github.com/home-assistant/core/pull/107672
+[#107675]: https://github.com/home-assistant/core/pull/107675
+[#107685]: https://github.com/home-assistant/core/pull/107685
+[#107694]: https://github.com/home-assistant/core/pull/107694
+[#107696]: https://github.com/home-assistant/core/pull/107696
+[#107706]: https://github.com/home-assistant/core/pull/107706
+[#107707]: https://github.com/home-assistant/core/pull/107707
+[#107708]: https://github.com/home-assistant/core/pull/107708
+[#107709]: https://github.com/home-assistant/core/pull/107709
+[#107740]: https://github.com/home-assistant/core/pull/107740
+[#107743]: https://github.com/home-assistant/core/pull/107743
+[#107745]: https://github.com/home-assistant/core/pull/107745
+[#107756]: https://github.com/home-assistant/core/pull/107756
+[#107757]: https://github.com/home-assistant/core/pull/107757
+[#107760]: https://github.com/home-assistant/core/pull/107760
+[#107762]: https://github.com/home-assistant/core/pull/107762
+[#107765]: https://github.com/home-assistant/core/pull/107765
+[#107766]: https://github.com/home-assistant/core/pull/107766
+[#107767]: https://github.com/home-assistant/core/pull/107767
+[#107773]: https://github.com/home-assistant/core/pull/107773
+[#107778]: https://github.com/home-assistant/core/pull/107778
+[#107779]: https://github.com/home-assistant/core/pull/107779
+[#107781]: https://github.com/home-assistant/core/pull/107781
+[#107786]: https://github.com/home-assistant/core/pull/107786
+[#107787]: https://github.com/home-assistant/core/pull/107787
+[#107788]: https://github.com/home-assistant/core/pull/107788
+[#107789]: https://github.com/home-assistant/core/pull/107789
+[#107790]: https://github.com/home-assistant/core/pull/107790
+[#107791]: https://github.com/home-assistant/core/pull/107791
+[#107792]: https://github.com/home-assistant/core/pull/107792
+[#107793]: https://github.com/home-assistant/core/pull/107793
+[#107794]: https://github.com/home-assistant/core/pull/107794
+[#107796]: https://github.com/home-assistant/core/pull/107796
+[#107799]: https://github.com/home-assistant/core/pull/107799
+[#107802]: https://github.com/home-assistant/core/pull/107802
+[#107805]: https://github.com/home-assistant/core/pull/107805
+[#107807]: https://github.com/home-assistant/core/pull/107807
+[#107815]: https://github.com/home-assistant/core/pull/107815
+[#107822]: https://github.com/home-assistant/core/pull/107822
+[#107832]: https://github.com/home-assistant/core/pull/107832
+[#107833]: https://github.com/home-assistant/core/pull/107833
+[#107834]: https://github.com/home-assistant/core/pull/107834
+[#107835]: https://github.com/home-assistant/core/pull/107835
+[#107839]: https://github.com/home-assistant/core/pull/107839
+[#107840]: https://github.com/home-assistant/core/pull/107840
+[#107845]: https://github.com/home-assistant/core/pull/107845
+[#107846]: https://github.com/home-assistant/core/pull/107846
+[#107856]: https://github.com/home-assistant/core/pull/107856
+[#107857]: https://github.com/home-assistant/core/pull/107857
+[#107859]: https://github.com/home-assistant/core/pull/107859
+[#107860]: https://github.com/home-assistant/core/pull/107860
+[#107861]: https://github.com/home-assistant/core/pull/107861
+[#107863]: https://github.com/home-assistant/core/pull/107863
+[#107864]: https://github.com/home-assistant/core/pull/107864
+[#107873]: https://github.com/home-assistant/core/pull/107873
+[#107882]: https://github.com/home-assistant/core/pull/107882
+[#107884]: https://github.com/home-assistant/core/pull/107884
+[#107886]: https://github.com/home-assistant/core/pull/107886
+[#107888]: https://github.com/home-assistant/core/pull/107888
+[#107891]: https://github.com/home-assistant/core/pull/107891
+[#107893]: https://github.com/home-assistant/core/pull/107893
+[#107895]: https://github.com/home-assistant/core/pull/107895
+[#107896]: https://github.com/home-assistant/core/pull/107896
+[#107898]: https://github.com/home-assistant/core/pull/107898
+[#107899]: https://github.com/home-assistant/core/pull/107899
+[#107902]: https://github.com/home-assistant/core/pull/107902
+[#107904]: https://github.com/home-assistant/core/pull/107904
+[#107907]: https://github.com/home-assistant/core/pull/107907
+[#107909]: https://github.com/home-assistant/core/pull/107909
+[#107910]: https://github.com/home-assistant/core/pull/107910
+[#107911]: https://github.com/home-assistant/core/pull/107911
+[#107912]: https://github.com/home-assistant/core/pull/107912
+[#107913]: https://github.com/home-assistant/core/pull/107913
+[#107914]: https://github.com/home-assistant/core/pull/107914
+[#107915]: https://github.com/home-assistant/core/pull/107915
+[#107917]: https://github.com/home-assistant/core/pull/107917
+[#107918]: https://github.com/home-assistant/core/pull/107918
+[#107923]: https://github.com/home-assistant/core/pull/107923
+[#107924]: https://github.com/home-assistant/core/pull/107924
+[#107925]: https://github.com/home-assistant/core/pull/107925
+[#107927]: https://github.com/home-assistant/core/pull/107927
+[#107932]: https://github.com/home-assistant/core/pull/107932
+[#107935]: https://github.com/home-assistant/core/pull/107935
+[#107937]: https://github.com/home-assistant/core/pull/107937
+[#107938]: https://github.com/home-assistant/core/pull/107938
+[#107939]: https://github.com/home-assistant/core/pull/107939
+[#107944]: https://github.com/home-assistant/core/pull/107944
+[#107945]: https://github.com/home-assistant/core/pull/107945
+[#107946]: https://github.com/home-assistant/core/pull/107946
+[#107948]: https://github.com/home-assistant/core/pull/107948
+[#107952]: https://github.com/home-assistant/core/pull/107952
+[#107956]: https://github.com/home-assistant/core/pull/107956
+[#107959]: https://github.com/home-assistant/core/pull/107959
+[#107962]: https://github.com/home-assistant/core/pull/107962
+[#107967]: https://github.com/home-assistant/core/pull/107967
+[#107970]: https://github.com/home-assistant/core/pull/107970
+[#107971]: https://github.com/home-assistant/core/pull/107971
+[#107972]: https://github.com/home-assistant/core/pull/107972
+[#107984]: https://github.com/home-assistant/core/pull/107984
+[#107986]: https://github.com/home-assistant/core/pull/107986
+[#107989]: https://github.com/home-assistant/core/pull/107989
+[#107992]: https://github.com/home-assistant/core/pull/107992
+[#107997]: https://github.com/home-assistant/core/pull/107997
+[#107998]: https://github.com/home-assistant/core/pull/107998
+[#107999]: https://github.com/home-assistant/core/pull/107999
+[#108000]: https://github.com/home-assistant/core/pull/108000
+[#108002]: https://github.com/home-assistant/core/pull/108002
+[#108007]: https://github.com/home-assistant/core/pull/108007
+[#108009]: https://github.com/home-assistant/core/pull/108009
+[#108010]: https://github.com/home-assistant/core/pull/108010
+[#108011]: https://github.com/home-assistant/core/pull/108011
+[#108012]: https://github.com/home-assistant/core/pull/108012
+[#108016]: https://github.com/home-assistant/core/pull/108016
+[#108019]: https://github.com/home-assistant/core/pull/108019
+[#108022]: https://github.com/home-assistant/core/pull/108022
+[#108023]: https://github.com/home-assistant/core/pull/108023
+[#108024]: https://github.com/home-assistant/core/pull/108024
+[#108025]: https://github.com/home-assistant/core/pull/108025
+[#108026]: https://github.com/home-assistant/core/pull/108026
+[#108027]: https://github.com/home-assistant/core/pull/108027
+[#108028]: https://github.com/home-assistant/core/pull/108028
+[#108033]: https://github.com/home-assistant/core/pull/108033
+[#108034]: https://github.com/home-assistant/core/pull/108034
+[#108039]: https://github.com/home-assistant/core/pull/108039
+[#108040]: https://github.com/home-assistant/core/pull/108040
+[#108041]: https://github.com/home-assistant/core/pull/108041
+[#108042]: https://github.com/home-assistant/core/pull/108042
+[#108048]: https://github.com/home-assistant/core/pull/108048
+[#108050]: https://github.com/home-assistant/core/pull/108050
+[#108051]: https://github.com/home-assistant/core/pull/108051
+[#108053]: https://github.com/home-assistant/core/pull/108053
+[#108054]: https://github.com/home-assistant/core/pull/108054
+[#108062]: https://github.com/home-assistant/core/pull/108062
+[#108067]: https://github.com/home-assistant/core/pull/108067
+[#108072]: https://github.com/home-assistant/core/pull/108072
+[#108073]: https://github.com/home-assistant/core/pull/108073
+[#108075]: https://github.com/home-assistant/core/pull/108075
+[#108079]: https://github.com/home-assistant/core/pull/108079
+[#108084]: https://github.com/home-assistant/core/pull/108084
+[#108086]: https://github.com/home-assistant/core/pull/108086
+[#108089]: https://github.com/home-assistant/core/pull/108089
+[#108090]: https://github.com/home-assistant/core/pull/108090
+[#108092]: https://github.com/home-assistant/core/pull/108092
+[#108093]: https://github.com/home-assistant/core/pull/108093
+[#108094]: https://github.com/home-assistant/core/pull/108094
+[#108096]: https://github.com/home-assistant/core/pull/108096
+[#108097]: https://github.com/home-assistant/core/pull/108097
+[#108105]: https://github.com/home-assistant/core/pull/108105
+[#108106]: https://github.com/home-assistant/core/pull/108106
+[#108109]: https://github.com/home-assistant/core/pull/108109
+[#108110]: https://github.com/home-assistant/core/pull/108110
+[#108111]: https://github.com/home-assistant/core/pull/108111
+[#108113]: https://github.com/home-assistant/core/pull/108113
+[#108114]: https://github.com/home-assistant/core/pull/108114
+[#108115]: https://github.com/home-assistant/core/pull/108115
+[#108124]: https://github.com/home-assistant/core/pull/108124
+[#108128]: https://github.com/home-assistant/core/pull/108128
+[#108132]: https://github.com/home-assistant/core/pull/108132
+[#108134]: https://github.com/home-assistant/core/pull/108134
+[#108139]: https://github.com/home-assistant/core/pull/108139
+[#108141]: https://github.com/home-assistant/core/pull/108141
+[#108143]: https://github.com/home-assistant/core/pull/108143
+[#108144]: https://github.com/home-assistant/core/pull/108144
+[#108145]: https://github.com/home-assistant/core/pull/108145
+[#108147]: https://github.com/home-assistant/core/pull/108147
+[#108148]: https://github.com/home-assistant/core/pull/108148
+[#108150]: https://github.com/home-assistant/core/pull/108150
+[#108157]: https://github.com/home-assistant/core/pull/108157
+[#108160]: https://github.com/home-assistant/core/pull/108160
+[#108162]: https://github.com/home-assistant/core/pull/108162
+[#108163]: https://github.com/home-assistant/core/pull/108163
+[#108164]: https://github.com/home-assistant/core/pull/108164
+[#108165]: https://github.com/home-assistant/core/pull/108165
+[#108166]: https://github.com/home-assistant/core/pull/108166
+[#108167]: https://github.com/home-assistant/core/pull/108167
+[#108173]: https://github.com/home-assistant/core/pull/108173
+[#108174]: https://github.com/home-assistant/core/pull/108174
+[#108176]: https://github.com/home-assistant/core/pull/108176
+[#108177]: https://github.com/home-assistant/core/pull/108177
+[#108179]: https://github.com/home-assistant/core/pull/108179
+[#108182]: https://github.com/home-assistant/core/pull/108182
+[#108189]: https://github.com/home-assistant/core/pull/108189
+[#108190]: https://github.com/home-assistant/core/pull/108190
+[#108191]: https://github.com/home-assistant/core/pull/108191
+[#108192]: https://github.com/home-assistant/core/pull/108192
+[#108194]: https://github.com/home-assistant/core/pull/108194
+[#108195]: https://github.com/home-assistant/core/pull/108195
+[#108196]: https://github.com/home-assistant/core/pull/108196
+[#108197]: https://github.com/home-assistant/core/pull/108197
+[#108203]: https://github.com/home-assistant/core/pull/108203
+[#108209]: https://github.com/home-assistant/core/pull/108209
+[#108210]: https://github.com/home-assistant/core/pull/108210
+[#108212]: https://github.com/home-assistant/core/pull/108212
+[#108216]: https://github.com/home-assistant/core/pull/108216
+[#108217]: https://github.com/home-assistant/core/pull/108217
+[#108218]: https://github.com/home-assistant/core/pull/108218
+[#108220]: https://github.com/home-assistant/core/pull/108220
+[#108222]: https://github.com/home-assistant/core/pull/108222
+[#108228]: https://github.com/home-assistant/core/pull/108228
+[#108229]: https://github.com/home-assistant/core/pull/108229
+[#108231]: https://github.com/home-assistant/core/pull/108231
+[#108233]: https://github.com/home-assistant/core/pull/108233
+[#108235]: https://github.com/home-assistant/core/pull/108235
+[#108236]: https://github.com/home-assistant/core/pull/108236
+[#108238]: https://github.com/home-assistant/core/pull/108238
+[#108240]: https://github.com/home-assistant/core/pull/108240
+[#108243]: https://github.com/home-assistant/core/pull/108243
+[#108244]: https://github.com/home-assistant/core/pull/108244
+[#108247]: https://github.com/home-assistant/core/pull/108247
+[#108252]: https://github.com/home-assistant/core/pull/108252
+[#108253]: https://github.com/home-assistant/core/pull/108253
+[#108257]: https://github.com/home-assistant/core/pull/108257
+[#108262]: https://github.com/home-assistant/core/pull/108262
+[#108263]: https://github.com/home-assistant/core/pull/108263
+[#108268]: https://github.com/home-assistant/core/pull/108268
+[#108269]: https://github.com/home-assistant/core/pull/108269
+[#108270]: https://github.com/home-assistant/core/pull/108270
+[#108272]: https://github.com/home-assistant/core/pull/108272
+[#108273]: https://github.com/home-assistant/core/pull/108273
+[#108274]: https://github.com/home-assistant/core/pull/108274
+[#108275]: https://github.com/home-assistant/core/pull/108275
+[#108278]: https://github.com/home-assistant/core/pull/108278
+[#108284]: https://github.com/home-assistant/core/pull/108284
+[#108288]: https://github.com/home-assistant/core/pull/108288
+[#108291]: https://github.com/home-assistant/core/pull/108291
+[#108293]: https://github.com/home-assistant/core/pull/108293
+[#108294]: https://github.com/home-assistant/core/pull/108294
+[#108295]: https://github.com/home-assistant/core/pull/108295
+[#108297]: https://github.com/home-assistant/core/pull/108297
+[#108302]: https://github.com/home-assistant/core/pull/108302
+[#108306]: https://github.com/home-assistant/core/pull/108306
+[#108307]: https://github.com/home-assistant/core/pull/108307
+[#108308]: https://github.com/home-assistant/core/pull/108308
+[#108309]: https://github.com/home-assistant/core/pull/108309
+[#108313]: https://github.com/home-assistant/core/pull/108313
+[#108314]: https://github.com/home-assistant/core/pull/108314
+[#108316]: https://github.com/home-assistant/core/pull/108316
+[#108319]: https://github.com/home-assistant/core/pull/108319
+[#108322]: https://github.com/home-assistant/core/pull/108322
+[#108325]: https://github.com/home-assistant/core/pull/108325
+[#108327]: https://github.com/home-assistant/core/pull/108327
+[#108329]: https://github.com/home-assistant/core/pull/108329
+[#108331]: https://github.com/home-assistant/core/pull/108331
+[#108332]: https://github.com/home-assistant/core/pull/108332
+[#108337]: https://github.com/home-assistant/core/pull/108337
+[#108339]: https://github.com/home-assistant/core/pull/108339
+[#108340]: https://github.com/home-assistant/core/pull/108340
+[#108342]: https://github.com/home-assistant/core/pull/108342
+[#108346]: https://github.com/home-assistant/core/pull/108346
+[#108347]: https://github.com/home-assistant/core/pull/108347
+[#108350]: https://github.com/home-assistant/core/pull/108350
+[#108353]: https://github.com/home-assistant/core/pull/108353
+[#108355]: https://github.com/home-assistant/core/pull/108355
+[#108358]: https://github.com/home-assistant/core/pull/108358
+[#108359]: https://github.com/home-assistant/core/pull/108359
+[#108360]: https://github.com/home-assistant/core/pull/108360
+[#108363]: https://github.com/home-assistant/core/pull/108363
+[#108365]: https://github.com/home-assistant/core/pull/108365
+[#108366]: https://github.com/home-assistant/core/pull/108366
+[#108367]: https://github.com/home-assistant/core/pull/108367
+[#108368]: https://github.com/home-assistant/core/pull/108368
+[#108369]: https://github.com/home-assistant/core/pull/108369
+[#108370]: https://github.com/home-assistant/core/pull/108370
+[#108371]: https://github.com/home-assistant/core/pull/108371
+[#108373]: https://github.com/home-assistant/core/pull/108373
+[#108375]: https://github.com/home-assistant/core/pull/108375
+[#108377]: https://github.com/home-assistant/core/pull/108377
+[#108381]: https://github.com/home-assistant/core/pull/108381
+[#108383]: https://github.com/home-assistant/core/pull/108383
+[#108384]: https://github.com/home-assistant/core/pull/108384
+[#108385]: https://github.com/home-assistant/core/pull/108385
+[#108390]: https://github.com/home-assistant/core/pull/108390
+[#108391]: https://github.com/home-assistant/core/pull/108391
+[#108393]: https://github.com/home-assistant/core/pull/108393
+[#108395]: https://github.com/home-assistant/core/pull/108395
+[#108396]: https://github.com/home-assistant/core/pull/108396
+[#108397]: https://github.com/home-assistant/core/pull/108397
+[#108398]: https://github.com/home-assistant/core/pull/108398
+[#108399]: https://github.com/home-assistant/core/pull/108399
+[#108400]: https://github.com/home-assistant/core/pull/108400
+[#108401]: https://github.com/home-assistant/core/pull/108401
+[#108402]: https://github.com/home-assistant/core/pull/108402
+[#108403]: https://github.com/home-assistant/core/pull/108403
+[#108404]: https://github.com/home-assistant/core/pull/108404
+[#108405]: https://github.com/home-assistant/core/pull/108405
+[#108406]: https://github.com/home-assistant/core/pull/108406
+[#108407]: https://github.com/home-assistant/core/pull/108407
+[#108408]: https://github.com/home-assistant/core/pull/108408
+[#108409]: https://github.com/home-assistant/core/pull/108409
+[#108410]: https://github.com/home-assistant/core/pull/108410
+[#108413]: https://github.com/home-assistant/core/pull/108413
+[#108414]: https://github.com/home-assistant/core/pull/108414
+[#108415]: https://github.com/home-assistant/core/pull/108415
+[#108416]: https://github.com/home-assistant/core/pull/108416
+[#108417]: https://github.com/home-assistant/core/pull/108417
+[#108418]: https://github.com/home-assistant/core/pull/108418
+[#108419]: https://github.com/home-assistant/core/pull/108419
+[#108420]: https://github.com/home-assistant/core/pull/108420
+[#108421]: https://github.com/home-assistant/core/pull/108421
+[#108422]: https://github.com/home-assistant/core/pull/108422
+[#108423]: https://github.com/home-assistant/core/pull/108423
+[#108428]: https://github.com/home-assistant/core/pull/108428
+[#108431]: https://github.com/home-assistant/core/pull/108431
+[#108435]: https://github.com/home-assistant/core/pull/108435
+[#108447]: https://github.com/home-assistant/core/pull/108447
+[#108448]: https://github.com/home-assistant/core/pull/108448
+[#108449]: https://github.com/home-assistant/core/pull/108449
+[#108450]: https://github.com/home-assistant/core/pull/108450
+[#108451]: https://github.com/home-assistant/core/pull/108451
+[#108452]: https://github.com/home-assistant/core/pull/108452
+[#108453]: https://github.com/home-assistant/core/pull/108453
+[#108455]: https://github.com/home-assistant/core/pull/108455
+[#108456]: https://github.com/home-assistant/core/pull/108456
+[#108457]: https://github.com/home-assistant/core/pull/108457
+[#108458]: https://github.com/home-assistant/core/pull/108458
+[#108460]: https://github.com/home-assistant/core/pull/108460
+[#108461]: https://github.com/home-assistant/core/pull/108461
+[#108462]: https://github.com/home-assistant/core/pull/108462
+[#108463]: https://github.com/home-assistant/core/pull/108463
+[#108464]: https://github.com/home-assistant/core/pull/108464
+[#108465]: https://github.com/home-assistant/core/pull/108465
+[#108466]: https://github.com/home-assistant/core/pull/108466
+[#108467]: https://github.com/home-assistant/core/pull/108467
+[#108469]: https://github.com/home-assistant/core/pull/108469
+[#108470]: https://github.com/home-assistant/core/pull/108470
+[#108471]: https://github.com/home-assistant/core/pull/108471
+[#108472]: https://github.com/home-assistant/core/pull/108472
+[#108473]: https://github.com/home-assistant/core/pull/108473
+[#108474]: https://github.com/home-assistant/core/pull/108474
+[#108475]: https://github.com/home-assistant/core/pull/108475
+[#108476]: https://github.com/home-assistant/core/pull/108476
+[#108477]: https://github.com/home-assistant/core/pull/108477
+[#108479]: https://github.com/home-assistant/core/pull/108479
+[#108480]: https://github.com/home-assistant/core/pull/108480
+[#108481]: https://github.com/home-assistant/core/pull/108481
+[#108482]: https://github.com/home-assistant/core/pull/108482
+[#108484]: https://github.com/home-assistant/core/pull/108484
+[#108486]: https://github.com/home-assistant/core/pull/108486
+[#108488]: https://github.com/home-assistant/core/pull/108488
+[#108491]: https://github.com/home-assistant/core/pull/108491
+[#108494]: https://github.com/home-assistant/core/pull/108494
+[#108495]: https://github.com/home-assistant/core/pull/108495
+[#108498]: https://github.com/home-assistant/core/pull/108498
+[#108499]: https://github.com/home-assistant/core/pull/108499
+[#108501]: https://github.com/home-assistant/core/pull/108501
+[#108506]: https://github.com/home-assistant/core/pull/108506
+[#108507]: https://github.com/home-assistant/core/pull/108507
+[#108508]: https://github.com/home-assistant/core/pull/108508
+[#108511]: https://github.com/home-assistant/core/pull/108511
+[#108532]: https://github.com/home-assistant/core/pull/108532
+[#108534]: https://github.com/home-assistant/core/pull/108534
+[#108543]: https://github.com/home-assistant/core/pull/108543
+[#108544]: https://github.com/home-assistant/core/pull/108544
+[#108546]: https://github.com/home-assistant/core/pull/108546
+[#108554]: https://github.com/home-assistant/core/pull/108554
+[#108556]: https://github.com/home-assistant/core/pull/108556
+[#108559]: https://github.com/home-assistant/core/pull/108559
+[#108564]: https://github.com/home-assistant/core/pull/108564
+[#108568]: https://github.com/home-assistant/core/pull/108568
+[#108569]: https://github.com/home-assistant/core/pull/108569
+[#108571]: https://github.com/home-assistant/core/pull/108571
+[#108576]: https://github.com/home-assistant/core/pull/108576
+[#108586]: https://github.com/home-assistant/core/pull/108586
+[#108587]: https://github.com/home-assistant/core/pull/108587
+[#108594]: https://github.com/home-assistant/core/pull/108594
+[#108599]: https://github.com/home-assistant/core/pull/108599
+[#108600]: https://github.com/home-assistant/core/pull/108600
+[#108604]: https://github.com/home-assistant/core/pull/108604
+[#108605]: https://github.com/home-assistant/core/pull/108605
+[#108606]: https://github.com/home-assistant/core/pull/108606
+[#108608]: https://github.com/home-assistant/core/pull/108608
+[#108611]: https://github.com/home-assistant/core/pull/108611
+[#108617]: https://github.com/home-assistant/core/pull/108617
+[#108623]: https://github.com/home-assistant/core/pull/108623
+[#108624]: https://github.com/home-assistant/core/pull/108624
+[#108625]: https://github.com/home-assistant/core/pull/108625
+[#108626]: https://github.com/home-assistant/core/pull/108626
+[#108627]: https://github.com/home-assistant/core/pull/108627
+[#108628]: https://github.com/home-assistant/core/pull/108628
+[#108629]: https://github.com/home-assistant/core/pull/108629
+[#108632]: https://github.com/home-assistant/core/pull/108632
+[#108633]: https://github.com/home-assistant/core/pull/108633
+[#108634]: https://github.com/home-assistant/core/pull/108634
+[#108637]: https://github.com/home-assistant/core/pull/108637
+[#108638]: https://github.com/home-assistant/core/pull/108638
+[#108639]: https://github.com/home-assistant/core/pull/108639
+[#108643]: https://github.com/home-assistant/core/pull/108643
+[#108645]: https://github.com/home-assistant/core/pull/108645
+[#108648]: https://github.com/home-assistant/core/pull/108648
+[#108650]: https://github.com/home-assistant/core/pull/108650
+[#108653]: https://github.com/home-assistant/core/pull/108653
+[#108656]: https://github.com/home-assistant/core/pull/108656
+[#108667]: https://github.com/home-assistant/core/pull/108667
+[#108668]: https://github.com/home-assistant/core/pull/108668
+[#108669]: https://github.com/home-assistant/core/pull/108669
+[#108670]: https://github.com/home-assistant/core/pull/108670
+[#108671]: https://github.com/home-assistant/core/pull/108671
+[#108672]: https://github.com/home-assistant/core/pull/108672
+[#108673]: https://github.com/home-assistant/core/pull/108673
+[#108674]: https://github.com/home-assistant/core/pull/108674
+[#108675]: https://github.com/home-assistant/core/pull/108675
+[#108676]: https://github.com/home-assistant/core/pull/108676
+[#108677]: https://github.com/home-assistant/core/pull/108677
+[#108678]: https://github.com/home-assistant/core/pull/108678
+[#108679]: https://github.com/home-assistant/core/pull/108679
+[#108680]: https://github.com/home-assistant/core/pull/108680
+[#108681]: https://github.com/home-assistant/core/pull/108681
+[#108682]: https://github.com/home-assistant/core/pull/108682
+[#108683]: https://github.com/home-assistant/core/pull/108683
+[#108684]: https://github.com/home-assistant/core/pull/108684
+[#108686]: https://github.com/home-assistant/core/pull/108686
+[#108688]: https://github.com/home-assistant/core/pull/108688
+[#108689]: https://github.com/home-assistant/core/pull/108689
+[#108690]: https://github.com/home-assistant/core/pull/108690
+[#108691]: https://github.com/home-assistant/core/pull/108691
+[#108692]: https://github.com/home-assistant/core/pull/108692
+[#108695]: https://github.com/home-assistant/core/pull/108695
+[#108699]: https://github.com/home-assistant/core/pull/108699
+[#108703]: https://github.com/home-assistant/core/pull/108703
+[#108704]: https://github.com/home-assistant/core/pull/108704
+[#108710]: https://github.com/home-assistant/core/pull/108710
+[#108713]: https://github.com/home-assistant/core/pull/108713
+[#108715]: https://github.com/home-assistant/core/pull/108715
+[#108716]: https://github.com/home-assistant/core/pull/108716
+[#108717]: https://github.com/home-assistant/core/pull/108717
+[#108718]: https://github.com/home-assistant/core/pull/108718
+[#108719]: https://github.com/home-assistant/core/pull/108719
+[#108721]: https://github.com/home-assistant/core/pull/108721
+[#108722]: https://github.com/home-assistant/core/pull/108722
+[#108723]: https://github.com/home-assistant/core/pull/108723
+[#108725]: https://github.com/home-assistant/core/pull/108725
+[#108726]: https://github.com/home-assistant/core/pull/108726
+[#108727]: https://github.com/home-assistant/core/pull/108727
+[#108730]: https://github.com/home-assistant/core/pull/108730
+[#108731]: https://github.com/home-assistant/core/pull/108731
+[#108733]: https://github.com/home-assistant/core/pull/108733
+[#108734]: https://github.com/home-assistant/core/pull/108734
+[#108735]: https://github.com/home-assistant/core/pull/108735
+[#108736]: https://github.com/home-assistant/core/pull/108736
+[#108737]: https://github.com/home-assistant/core/pull/108737
+[#108738]: https://github.com/home-assistant/core/pull/108738
+[#108740]: https://github.com/home-assistant/core/pull/108740
+[#108741]: https://github.com/home-assistant/core/pull/108741
+[#108750]: https://github.com/home-assistant/core/pull/108750
+[#108751]: https://github.com/home-assistant/core/pull/108751
+[#108753]: https://github.com/home-assistant/core/pull/108753
+[#108756]: https://github.com/home-assistant/core/pull/108756
+[#108757]: https://github.com/home-assistant/core/pull/108757
+[#108758]: https://github.com/home-assistant/core/pull/108758
+[#108759]: https://github.com/home-assistant/core/pull/108759
+[#108760]: https://github.com/home-assistant/core/pull/108760
+[#108761]: https://github.com/home-assistant/core/pull/108761
+[#108762]: https://github.com/home-assistant/core/pull/108762
+[#108766]: https://github.com/home-assistant/core/pull/108766
+[#108767]: https://github.com/home-assistant/core/pull/108767
+[#108768]: https://github.com/home-assistant/core/pull/108768
+[#108769]: https://github.com/home-assistant/core/pull/108769
+[#108770]: https://github.com/home-assistant/core/pull/108770
+[#108772]: https://github.com/home-assistant/core/pull/108772
+[#108779]: https://github.com/home-assistant/core/pull/108779
+[#108783]: https://github.com/home-assistant/core/pull/108783
+[#108787]: https://github.com/home-assistant/core/pull/108787
+[#108788]: https://github.com/home-assistant/core/pull/108788
+[#108791]: https://github.com/home-assistant/core/pull/108791
+[#108798]: https://github.com/home-assistant/core/pull/108798
+[#108800]: https://github.com/home-assistant/core/pull/108800
+[#108801]: https://github.com/home-assistant/core/pull/108801
+[#108804]: https://github.com/home-assistant/core/pull/108804
+[#108805]: https://github.com/home-assistant/core/pull/108805
+[#108811]: https://github.com/home-assistant/core/pull/108811
+[#108812]: https://github.com/home-assistant/core/pull/108812
+[#108815]: https://github.com/home-assistant/core/pull/108815
+[#108818]: https://github.com/home-assistant/core/pull/108818
+[#108820]: https://github.com/home-assistant/core/pull/108820
+[#108823]: https://github.com/home-assistant/core/pull/108823
+[#108826]: https://github.com/home-assistant/core/pull/108826
+[#108830]: https://github.com/home-assistant/core/pull/108830
+[#108831]: https://github.com/home-assistant/core/pull/108831
+[#108838]: https://github.com/home-assistant/core/pull/108838
+[#108848]: https://github.com/home-assistant/core/pull/108848
+[#108850]: https://github.com/home-assistant/core/pull/108850
+[#108851]: https://github.com/home-assistant/core/pull/108851
+[#108852]: https://github.com/home-assistant/core/pull/108852
+[#108853]: https://github.com/home-assistant/core/pull/108853
+[#108854]: https://github.com/home-assistant/core/pull/108854
+[#108855]: https://github.com/home-assistant/core/pull/108855
+[#108856]: https://github.com/home-assistant/core/pull/108856
+[#108858]: https://github.com/home-assistant/core/pull/108858
+[#108861]: https://github.com/home-assistant/core/pull/108861
+[#108862]: https://github.com/home-assistant/core/pull/108862
+[#108865]: https://github.com/home-assistant/core/pull/108865
+[#108866]: https://github.com/home-assistant/core/pull/108866
+[#108868]: https://github.com/home-assistant/core/pull/108868
+[#108870]: https://github.com/home-assistant/core/pull/108870
+[#108875]: https://github.com/home-assistant/core/pull/108875
+[#108877]: https://github.com/home-assistant/core/pull/108877
+[#108884]: https://github.com/home-assistant/core/pull/108884
+[#108885]: https://github.com/home-assistant/core/pull/108885
+[#108889]: https://github.com/home-assistant/core/pull/108889
+[#108890]: https://github.com/home-assistant/core/pull/108890
+[#108892]: https://github.com/home-assistant/core/pull/108892
+[#108893]: https://github.com/home-assistant/core/pull/108893
+[#108894]: https://github.com/home-assistant/core/pull/108894
+[#108895]: https://github.com/home-assistant/core/pull/108895
+[#108898]: https://github.com/home-assistant/core/pull/108898
+[#108899]: https://github.com/home-assistant/core/pull/108899
+[#108900]: https://github.com/home-assistant/core/pull/108900
+[#108902]: https://github.com/home-assistant/core/pull/108902
+[#108909]: https://github.com/home-assistant/core/pull/108909
+[#108910]: https://github.com/home-assistant/core/pull/108910
+[#108911]: https://github.com/home-assistant/core/pull/108911
+[#108913]: https://github.com/home-assistant/core/pull/108913
+[#108924]: https://github.com/home-assistant/core/pull/108924
+[#108933]: https://github.com/home-assistant/core/pull/108933
+[#108934]: https://github.com/home-assistant/core/pull/108934
+[#108935]: https://github.com/home-assistant/core/pull/108935
+[#108937]: https://github.com/home-assistant/core/pull/108937
+[#108938]: https://github.com/home-assistant/core/pull/108938
+[#108939]: https://github.com/home-assistant/core/pull/108939
+[#108942]: https://github.com/home-assistant/core/pull/108942
+[#108944]: https://github.com/home-assistant/core/pull/108944
+[#108947]: https://github.com/home-assistant/core/pull/108947
+[#108951]: https://github.com/home-assistant/core/pull/108951
+[#108952]: https://github.com/home-assistant/core/pull/108952
+[#108956]: https://github.com/home-assistant/core/pull/108956
+[#108961]: https://github.com/home-assistant/core/pull/108961
+[#108962]: https://github.com/home-assistant/core/pull/108962
+[#108963]: https://github.com/home-assistant/core/pull/108963
+[#108964]: https://github.com/home-assistant/core/pull/108964
+[#108965]: https://github.com/home-assistant/core/pull/108965
+[#108966]: https://github.com/home-assistant/core/pull/108966
+[#108967]: https://github.com/home-assistant/core/pull/108967
+[#108969]: https://github.com/home-assistant/core/pull/108969
+[#108970]: https://github.com/home-assistant/core/pull/108970
+[#108971]: https://github.com/home-assistant/core/pull/108971
+[#108972]: https://github.com/home-assistant/core/pull/108972
+[#108973]: https://github.com/home-assistant/core/pull/108973
+[#108974]: https://github.com/home-assistant/core/pull/108974
+[#108976]: https://github.com/home-assistant/core/pull/108976
+[#108977]: https://github.com/home-assistant/core/pull/108977
+[#108978]: https://github.com/home-assistant/core/pull/108978
+[#108979]: https://github.com/home-assistant/core/pull/108979
+[#108984]: https://github.com/home-assistant/core/pull/108984
+[#108987]: https://github.com/home-assistant/core/pull/108987
+[#108990]: https://github.com/home-assistant/core/pull/108990
+[#108992]: https://github.com/home-assistant/core/pull/108992
+[#109000]: https://github.com/home-assistant/core/pull/109000
+[#109002]: https://github.com/home-assistant/core/pull/109002
+[#109004]: https://github.com/home-assistant/core/pull/109004
+[#109008]: https://github.com/home-assistant/core/pull/109008
+[#109010]: https://github.com/home-assistant/core/pull/109010
+[#109015]: https://github.com/home-assistant/core/pull/109015
+[#109016]: https://github.com/home-assistant/core/pull/109016
+[#109020]: https://github.com/home-assistant/core/pull/109020
+[#109027]: https://github.com/home-assistant/core/pull/109027
+[#109031]: https://github.com/home-assistant/core/pull/109031
+[#109032]: https://github.com/home-assistant/core/pull/109032
+[#109033]: https://github.com/home-assistant/core/pull/109033
+[#109038]: https://github.com/home-assistant/core/pull/109038
+[#109039]: https://github.com/home-assistant/core/pull/109039
+[#109041]: https://github.com/home-assistant/core/pull/109041
+[#109042]: https://github.com/home-assistant/core/pull/109042
+[#109044]: https://github.com/home-assistant/core/pull/109044
+[#109045]: https://github.com/home-assistant/core/pull/109045
+[#109048]: https://github.com/home-assistant/core/pull/109048
+[#109054]: https://github.com/home-assistant/core/pull/109054
+[#109061]: https://github.com/home-assistant/core/pull/109061
+[#109064]: https://github.com/home-assistant/core/pull/109064
+[#109065]: https://github.com/home-assistant/core/pull/109065
+[#109066]: https://github.com/home-assistant/core/pull/109066
+[#109067]: https://github.com/home-assistant/core/pull/109067
+[#109068]: https://github.com/home-assistant/core/pull/109068
+[#109069]: https://github.com/home-assistant/core/pull/109069
+[#109071]: https://github.com/home-assistant/core/pull/109071
+[#109072]: https://github.com/home-assistant/core/pull/109072
+[#109076]: https://github.com/home-assistant/core/pull/109076
+[#109077]: https://github.com/home-assistant/core/pull/109077
+[#109078]: https://github.com/home-assistant/core/pull/109078
+[#109079]: https://github.com/home-assistant/core/pull/109079
+[#109083]: https://github.com/home-assistant/core/pull/109083
+[#109085]: https://github.com/home-assistant/core/pull/109085
+[#109089]: https://github.com/home-assistant/core/pull/109089
+[#109091]: https://github.com/home-assistant/core/pull/109091
+[#109098]: https://github.com/home-assistant/core/pull/109098
+[#109100]: https://github.com/home-assistant/core/pull/109100
+[#109101]: https://github.com/home-assistant/core/pull/109101
+[#109105]: https://github.com/home-assistant/core/pull/109105
+[#109106]: https://github.com/home-assistant/core/pull/109106
+[#109107]: https://github.com/home-assistant/core/pull/109107
+[#109108]: https://github.com/home-assistant/core/pull/109108
+[#109109]: https://github.com/home-assistant/core/pull/109109
+[#109110]: https://github.com/home-assistant/core/pull/109110
+[#109111]: https://github.com/home-assistant/core/pull/109111
+[#109113]: https://github.com/home-assistant/core/pull/109113
+[#109114]: https://github.com/home-assistant/core/pull/109114
+[#109115]: https://github.com/home-assistant/core/pull/109115
+[#109116]: https://github.com/home-assistant/core/pull/109116
+[#109118]: https://github.com/home-assistant/core/pull/109118
+[#109122]: https://github.com/home-assistant/core/pull/109122
+[#109124]: https://github.com/home-assistant/core/pull/109124
+[#109126]: https://github.com/home-assistant/core/pull/109126
+[#109127]: https://github.com/home-assistant/core/pull/109127
+[#109131]: https://github.com/home-assistant/core/pull/109131
+[#109132]: https://github.com/home-assistant/core/pull/109132
+[#109133]: https://github.com/home-assistant/core/pull/109133
+[#109134]: https://github.com/home-assistant/core/pull/109134
+[#109135]: https://github.com/home-assistant/core/pull/109135
+[#109136]: https://github.com/home-assistant/core/pull/109136
+[#109137]: https://github.com/home-assistant/core/pull/109137
+[#109138]: https://github.com/home-assistant/core/pull/109138
+[#109139]: https://github.com/home-assistant/core/pull/109139
+[#109140]: https://github.com/home-assistant/core/pull/109140
+[#109141]: https://github.com/home-assistant/core/pull/109141
+[#109145]: https://github.com/home-assistant/core/pull/109145
+[#109146]: https://github.com/home-assistant/core/pull/109146
+[#109147]: https://github.com/home-assistant/core/pull/109147
+[#109149]: https://github.com/home-assistant/core/pull/109149
+[#109150]: https://github.com/home-assistant/core/pull/109150
+[#109151]: https://github.com/home-assistant/core/pull/109151
+[#109152]: https://github.com/home-assistant/core/pull/109152
+[#109154]: https://github.com/home-assistant/core/pull/109154
+[#109155]: https://github.com/home-assistant/core/pull/109155
+[#109156]: https://github.com/home-assistant/core/pull/109156
+[#109157]: https://github.com/home-assistant/core/pull/109157
+[#109160]: https://github.com/home-assistant/core/pull/109160
+[#109161]: https://github.com/home-assistant/core/pull/109161
+[#109163]: https://github.com/home-assistant/core/pull/109163
+[#109167]: https://github.com/home-assistant/core/pull/109167
+[#109168]: https://github.com/home-assistant/core/pull/109168
+[#109170]: https://github.com/home-assistant/core/pull/109170
+[#109172]: https://github.com/home-assistant/core/pull/109172
+[#109173]: https://github.com/home-assistant/core/pull/109173
+[#109174]: https://github.com/home-assistant/core/pull/109174
+[#109178]: https://github.com/home-assistant/core/pull/109178
+[#109180]: https://github.com/home-assistant/core/pull/109180
+[#109184]: https://github.com/home-assistant/core/pull/109184
+[#109186]: https://github.com/home-assistant/core/pull/109186
+[#109188]: https://github.com/home-assistant/core/pull/109188
+[#109189]: https://github.com/home-assistant/core/pull/109189
+[#109191]: https://github.com/home-assistant/core/pull/109191
+[#109192]: https://github.com/home-assistant/core/pull/109192
+[#109195]: https://github.com/home-assistant/core/pull/109195
+[#109199]: https://github.com/home-assistant/core/pull/109199
+[#109200]: https://github.com/home-assistant/core/pull/109200
+[#109202]: https://github.com/home-assistant/core/pull/109202
+[#109207]: https://github.com/home-assistant/core/pull/109207
+[#109209]: https://github.com/home-assistant/core/pull/109209
+[#109212]: https://github.com/home-assistant/core/pull/109212
+[#109214]: https://github.com/home-assistant/core/pull/109214
+[#109216]: https://github.com/home-assistant/core/pull/109216
+[#109217]: https://github.com/home-assistant/core/pull/109217
+[#109218]: https://github.com/home-assistant/core/pull/109218
+[#109219]: https://github.com/home-assistant/core/pull/109219
+[#109220]: https://github.com/home-assistant/core/pull/109220
+[#109224]: https://github.com/home-assistant/core/pull/109224
+[#109226]: https://github.com/home-assistant/core/pull/109226
+[#109231]: https://github.com/home-assistant/core/pull/109231
+[#109235]: https://github.com/home-assistant/core/pull/109235
+[#109239]: https://github.com/home-assistant/core/pull/109239
+[#109241]: https://github.com/home-assistant/core/pull/109241
+[#109242]: https://github.com/home-assistant/core/pull/109242
+[#109243]: https://github.com/home-assistant/core/pull/109243
+[#109249]: https://github.com/home-assistant/core/pull/109249
+[#109250]: https://github.com/home-assistant/core/pull/109250
+[#109251]: https://github.com/home-assistant/core/pull/109251
+[#109260]: https://github.com/home-assistant/core/pull/109260
+[#109267]: https://github.com/home-assistant/core/pull/109267
+[#109268]: https://github.com/home-assistant/core/pull/109268
+[#109269]: https://github.com/home-assistant/core/pull/109269
+[#109271]: https://github.com/home-assistant/core/pull/109271
+[#109274]: https://github.com/home-assistant/core/pull/109274
+[#109277]: https://github.com/home-assistant/core/pull/109277
+[#109279]: https://github.com/home-assistant/core/pull/109279
+[#109282]: https://github.com/home-assistant/core/pull/109282
+[#109284]: https://github.com/home-assistant/core/pull/109284
+[#109292]: https://github.com/home-assistant/core/pull/109292
+[#109294]: https://github.com/home-assistant/core/pull/109294
+[#109296]: https://github.com/home-assistant/core/pull/109296
+[#109302]: https://github.com/home-assistant/core/pull/109302
+[#109306]: https://github.com/home-assistant/core/pull/109306
+[#109307]: https://github.com/home-assistant/core/pull/109307
+[#109311]: https://github.com/home-assistant/core/pull/109311
+[#109316]: https://github.com/home-assistant/core/pull/109316
+[#109317]: https://github.com/home-assistant/core/pull/109317
+[#109325]: https://github.com/home-assistant/core/pull/109325
+[#109329]: https://github.com/home-assistant/core/pull/109329
+[#109331]: https://github.com/home-assistant/core/pull/109331
+[#109333]: https://github.com/home-assistant/core/pull/109333
+[#109338]: https://github.com/home-assistant/core/pull/109338
+[#109340]: https://github.com/home-assistant/core/pull/109340
+[#109341]: https://github.com/home-assistant/core/pull/109341
+[#109344]: https://github.com/home-assistant/core/pull/109344
+[#109347]: https://github.com/home-assistant/core/pull/109347
+[#109350]: https://github.com/home-assistant/core/pull/109350
+[#109359]: https://github.com/home-assistant/core/pull/109359
+[#109360]: https://github.com/home-assistant/core/pull/109360
+[#109361]: https://github.com/home-assistant/core/pull/109361
+[#109364]: https://github.com/home-assistant/core/pull/109364
+[#109372]: https://github.com/home-assistant/core/pull/109372
+[#109388]: https://github.com/home-assistant/core/pull/109388
+[#109391]: https://github.com/home-assistant/core/pull/109391
+[#109393]: https://github.com/home-assistant/core/pull/109393
+[#109394]: https://github.com/home-assistant/core/pull/109394
+[#109397]: https://github.com/home-assistant/core/pull/109397
+[#109399]: https://github.com/home-assistant/core/pull/109399
+[#109401]: https://github.com/home-assistant/core/pull/109401
+[#109403]: https://github.com/home-assistant/core/pull/109403
+[#109404]: https://github.com/home-assistant/core/pull/109404
+[#109408]: https://github.com/home-assistant/core/pull/109408
+[#109410]: https://github.com/home-assistant/core/pull/109410
+[#109412]: https://github.com/home-assistant/core/pull/109412
+[#109413]: https://github.com/home-assistant/core/pull/109413
+[#109414]: https://github.com/home-assistant/core/pull/109414
+[#109415]: https://github.com/home-assistant/core/pull/109415
+[#109416]: https://github.com/home-assistant/core/pull/109416
+[#109417]: https://github.com/home-assistant/core/pull/109417
+[#109418]: https://github.com/home-assistant/core/pull/109418
+[#109419]: https://github.com/home-assistant/core/pull/109419
+[#109420]: https://github.com/home-assistant/core/pull/109420
+[#109421]: https://github.com/home-assistant/core/pull/109421
+[#109422]: https://github.com/home-assistant/core/pull/109422
+[#109423]: https://github.com/home-assistant/core/pull/109423
+[#109424]: https://github.com/home-assistant/core/pull/109424
+[#109425]: https://github.com/home-assistant/core/pull/109425
+[#109426]: https://github.com/home-assistant/core/pull/109426
+[#109427]: https://github.com/home-assistant/core/pull/109427
+[#109428]: https://github.com/home-assistant/core/pull/109428
+[#109429]: https://github.com/home-assistant/core/pull/109429
+[#109430]: https://github.com/home-assistant/core/pull/109430
+[#109431]: https://github.com/home-assistant/core/pull/109431
+[#109433]: https://github.com/home-assistant/core/pull/109433
+[#109434]: https://github.com/home-assistant/core/pull/109434
+[#109435]: https://github.com/home-assistant/core/pull/109435
+[#109436]: https://github.com/home-assistant/core/pull/109436
+[#109437]: https://github.com/home-assistant/core/pull/109437
+[#109438]: https://github.com/home-assistant/core/pull/109438
+[#109439]: https://github.com/home-assistant/core/pull/109439
+[#109440]: https://github.com/home-assistant/core/pull/109440
+[#109441]: https://github.com/home-assistant/core/pull/109441
+[#109442]: https://github.com/home-assistant/core/pull/109442
+[#109443]: https://github.com/home-assistant/core/pull/109443
+[#109444]: https://github.com/home-assistant/core/pull/109444
+[#109445]: https://github.com/home-assistant/core/pull/109445
+[#109446]: https://github.com/home-assistant/core/pull/109446
+[#109447]: https://github.com/home-assistant/core/pull/109447
+[#109448]: https://github.com/home-assistant/core/pull/109448
+[#109449]: https://github.com/home-assistant/core/pull/109449
+[#109450]: https://github.com/home-assistant/core/pull/109450
+[#109451]: https://github.com/home-assistant/core/pull/109451
+[#109452]: https://github.com/home-assistant/core/pull/109452
+[#109454]: https://github.com/home-assistant/core/pull/109454
+[#109455]: https://github.com/home-assistant/core/pull/109455
+[#109456]: https://github.com/home-assistant/core/pull/109456
+[#109457]: https://github.com/home-assistant/core/pull/109457
+[#109458]: https://github.com/home-assistant/core/pull/109458
+[#109459]: https://github.com/home-assistant/core/pull/109459
+[#109461]: https://github.com/home-assistant/core/pull/109461
+[#109462]: https://github.com/home-assistant/core/pull/109462
+[#109463]: https://github.com/home-assistant/core/pull/109463
+[#109464]: https://github.com/home-assistant/core/pull/109464
+[#109465]: https://github.com/home-assistant/core/pull/109465
+[#109466]: https://github.com/home-assistant/core/pull/109466
+[#109467]: https://github.com/home-assistant/core/pull/109467
+[#109468]: https://github.com/home-assistant/core/pull/109468
+[#109469]: https://github.com/home-assistant/core/pull/109469
+[#109470]: https://github.com/home-assistant/core/pull/109470
+[#109471]: https://github.com/home-assistant/core/pull/109471
+[#109472]: https://github.com/home-assistant/core/pull/109472
+[#109473]: https://github.com/home-assistant/core/pull/109473
+[#109474]: https://github.com/home-assistant/core/pull/109474
+[#109475]: https://github.com/home-assistant/core/pull/109475
+[#109476]: https://github.com/home-assistant/core/pull/109476
+[#109477]: https://github.com/home-assistant/core/pull/109477
+[#109478]: https://github.com/home-assistant/core/pull/109478
+[#109479]: https://github.com/home-assistant/core/pull/109479
+[#109480]: https://github.com/home-assistant/core/pull/109480
+[#109481]: https://github.com/home-assistant/core/pull/109481
+[#109482]: https://github.com/home-assistant/core/pull/109482
+[#109490]: https://github.com/home-assistant/core/pull/109490
+[#109493]: https://github.com/home-assistant/core/pull/109493
+[#109494]: https://github.com/home-assistant/core/pull/109494
+[#109501]: https://github.com/home-assistant/core/pull/109501
+[#109510]: https://github.com/home-assistant/core/pull/109510
+[#109515]: https://github.com/home-assistant/core/pull/109515
+[#109522]: https://github.com/home-assistant/core/pull/109522
+[#109523]: https://github.com/home-assistant/core/pull/109523
+[#109525]: https://github.com/home-assistant/core/pull/109525
+[#109530]: https://github.com/home-assistant/core/pull/109530
+[#109534]: https://github.com/home-assistant/core/pull/109534
+[#109535]: https://github.com/home-assistant/core/pull/109535
+[#109536]: https://github.com/home-assistant/core/pull/109536
+[#109537]: https://github.com/home-assistant/core/pull/109537
+[#109538]: https://github.com/home-assistant/core/pull/109538
+[#109539]: https://github.com/home-assistant/core/pull/109539
+[#109540]: https://github.com/home-assistant/core/pull/109540
+[#109541]: https://github.com/home-assistant/core/pull/109541
+[#109542]: https://github.com/home-assistant/core/pull/109542
+[#109543]: https://github.com/home-assistant/core/pull/109543
+[#109544]: https://github.com/home-assistant/core/pull/109544
+[#109545]: https://github.com/home-assistant/core/pull/109545
+[#109546]: https://github.com/home-assistant/core/pull/109546
+[#109547]: https://github.com/home-assistant/core/pull/109547
+[#109548]: https://github.com/home-assistant/core/pull/109548
+[#109549]: https://github.com/home-assistant/core/pull/109549
+[#109550]: https://github.com/home-assistant/core/pull/109550
+[#109551]: https://github.com/home-assistant/core/pull/109551
+[#109552]: https://github.com/home-assistant/core/pull/109552
+[#109553]: https://github.com/home-assistant/core/pull/109553
+[#109554]: https://github.com/home-assistant/core/pull/109554
+[#109555]: https://github.com/home-assistant/core/pull/109555
+[#109556]: https://github.com/home-assistant/core/pull/109556
+[#109557]: https://github.com/home-assistant/core/pull/109557
+[#109558]: https://github.com/home-assistant/core/pull/109558
+[#109559]: https://github.com/home-assistant/core/pull/109559
+[#109560]: https://github.com/home-assistant/core/pull/109560
+[#109562]: https://github.com/home-assistant/core/pull/109562
+[#109563]: https://github.com/home-assistant/core/pull/109563
+[#109564]: https://github.com/home-assistant/core/pull/109564
+[#109565]: https://github.com/home-assistant/core/pull/109565
+[#109566]: https://github.com/home-assistant/core/pull/109566
+[#109568]: https://github.com/home-assistant/core/pull/109568
+[#109569]: https://github.com/home-assistant/core/pull/109569
+[#109570]: https://github.com/home-assistant/core/pull/109570
+[#109571]: https://github.com/home-assistant/core/pull/109571
+[#109572]: https://github.com/home-assistant/core/pull/109572
+[#109575]: https://github.com/home-assistant/core/pull/109575
+[#109580]: https://github.com/home-assistant/core/pull/109580
+[#109582]: https://github.com/home-assistant/core/pull/109582
+[#109585]: https://github.com/home-assistant/core/pull/109585
+[#109594]: https://github.com/home-assistant/core/pull/109594
+[#109596]: https://github.com/home-assistant/core/pull/109596
+[#109600]: https://github.com/home-assistant/core/pull/109600
+[#109614]: https://github.com/home-assistant/core/pull/109614
+[#109615]: https://github.com/home-assistant/core/pull/109615
+[#109626]: https://github.com/home-assistant/core/pull/109626
+[#109627]: https://github.com/home-assistant/core/pull/109627
+[#109628]: https://github.com/home-assistant/core/pull/109628
+[#109630]: https://github.com/home-assistant/core/pull/109630
+[#109644]: https://github.com/home-assistant/core/pull/109644
+[#109648]: https://github.com/home-assistant/core/pull/109648
+[#109650]: https://github.com/home-assistant/core/pull/109650
+[#109651]: https://github.com/home-assistant/core/pull/109651
+[#109652]: https://github.com/home-assistant/core/pull/109652
+[#109653]: https://github.com/home-assistant/core/pull/109653
+[#109656]: https://github.com/home-assistant/core/pull/109656
+[#109658]: https://github.com/home-assistant/core/pull/109658
+[#109659]: https://github.com/home-assistant/core/pull/109659
+[#109664]: https://github.com/home-assistant/core/pull/109664
+[#109666]: https://github.com/home-assistant/core/pull/109666
+[#109675]: https://github.com/home-assistant/core/pull/109675
+[#109692]: https://github.com/home-assistant/core/pull/109692
+[#109694]: https://github.com/home-assistant/core/pull/109694
+[#109695]: https://github.com/home-assistant/core/pull/109695
+[#109701]: https://github.com/home-assistant/core/pull/109701
+[#109702]: https://github.com/home-assistant/core/pull/109702
+[#109707]: https://github.com/home-assistant/core/pull/109707
+[#109708]: https://github.com/home-assistant/core/pull/109708
+[#109709]: https://github.com/home-assistant/core/pull/109709
+[#109716]: https://github.com/home-assistant/core/pull/109716
+[#109717]: https://github.com/home-assistant/core/pull/109717
+[#109720]: https://github.com/home-assistant/core/pull/109720
+[#109727]: https://github.com/home-assistant/core/pull/109727
+[#109737]: https://github.com/home-assistant/core/pull/109737
+[#109744]: https://github.com/home-assistant/core/pull/109744
+[#109748]: https://github.com/home-assistant/core/pull/109748
+[#109749]: https://github.com/home-assistant/core/pull/109749
+[#109750]: https://github.com/home-assistant/core/pull/109750
+[#109755]: https://github.com/home-assistant/core/pull/109755
+[#109757]: https://github.com/home-assistant/core/pull/109757
+[#109760]: https://github.com/home-assistant/core/pull/109760
+[#109762]: https://github.com/home-assistant/core/pull/109762
+[#109765]: https://github.com/home-assistant/core/pull/109765
+[#109767]: https://github.com/home-assistant/core/pull/109767
+[#109770]: https://github.com/home-assistant/core/pull/109770
+[#109778]: https://github.com/home-assistant/core/pull/109778
+[#109783]: https://github.com/home-assistant/core/pull/109783
+[#109787]: https://github.com/home-assistant/core/pull/109787
+[#109789]: https://github.com/home-assistant/core/pull/109789
+[#109793]: https://github.com/home-assistant/core/pull/109793
+[#109797]: https://github.com/home-assistant/core/pull/109797
+[#109807]: https://github.com/home-assistant/core/pull/109807
+[#109809]: https://github.com/home-assistant/core/pull/109809
+[#109810]: https://github.com/home-assistant/core/pull/109810
+[#109812]: https://github.com/home-assistant/core/pull/109812
+[#109814]: https://github.com/home-assistant/core/pull/109814
+[#109817]: https://github.com/home-assistant/core/pull/109817
+[#109823]: https://github.com/home-assistant/core/pull/109823
+[#109824]: https://github.com/home-assistant/core/pull/109824
+[#109825]: https://github.com/home-assistant/core/pull/109825
+[#109830]: https://github.com/home-assistant/core/pull/109830
+[#109832]: https://github.com/home-assistant/core/pull/109832
+[#109837]: https://github.com/home-assistant/core/pull/109837
+[#109845]: https://github.com/home-assistant/core/pull/109845
+[#109848]: https://github.com/home-assistant/core/pull/109848
+[#109859]: https://github.com/home-assistant/core/pull/109859
+[#109871]: https://github.com/home-assistant/core/pull/109871
+[#109873]: https://github.com/home-assistant/core/pull/109873
+[#66130]: https://github.com/home-assistant/core/pull/66130
+[#80061]: https://github.com/home-assistant/core/pull/80061
+[#86522]: https://github.com/home-assistant/core/pull/86522
+[#93462]: https://github.com/home-assistant/core/pull/93462
+[#93750]: https://github.com/home-assistant/core/pull/93750
+[#93768]: https://github.com/home-assistant/core/pull/93768
+[#96723]: https://github.com/home-assistant/core/pull/96723
+[#97208]: https://github.com/home-assistant/core/pull/97208
+[#97681]: https://github.com/home-assistant/core/pull/97681
+[#97937]: https://github.com/home-assistant/core/pull/97937
+[#98136]: https://github.com/home-assistant/core/pull/98136
+[#98145]: https://github.com/home-assistant/core/pull/98145
+[#98489]: https://github.com/home-assistant/core/pull/98489
+[#98703]: https://github.com/home-assistant/core/pull/98703
+[#99212]: https://github.com/home-assistant/core/pull/99212
+[#99670]: https://github.com/home-assistant/core/pull/99670
+[#99752]: https://github.com/home-assistant/core/pull/99752
+[@2franix]: https://github.com/2franix
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Anonym-tsk]: https://github.com/Anonym-tsk
+[@Antoni-Czaplicki]: https://github.com/Antoni-Czaplicki
+[@BHSPitMonkey]: https://github.com/BHSPitMonkey
+[@Bre77]: https://github.com/Bre77
+[@CFenner]: https://github.com/CFenner
+[@Caius-Bonus]: https://github.com/Caius-Bonus
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@DCSBL]: https://github.com/DCSBL
+[@DellanX]: https://github.com/DellanX
+[@Ernst79]: https://github.com/Ernst79
+[@Flash1232]: https://github.com/Flash1232
+[@FlorianOosterhof]: https://github.com/FlorianOosterhof
+[@Floris272]: https://github.com/Floris272
+[@Galorhallen]: https://github.com/Galorhallen
+[@Guy293]: https://github.com/Guy293
+[@IsakNyberg]: https://github.com/IsakNyberg
+[@Jc2k]: https://github.com/Jc2k
+[@JeroenvIS]: https://github.com/JeroenvIS
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@Lash-L]: https://github.com/Lash-L
+[@Luap99]: https://github.com/Luap99
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@MisterCommand]: https://github.com/MisterCommand
+[@Moustachauve]: https://github.com/Moustachauve
+[@Noltari]: https://github.com/Noltari
+[@RJPoelstra]: https://github.com/RJPoelstra
+[@RickeyWard]: https://github.com/RickeyWard
+[@RoboMagus]: https://github.com/RoboMagus
+[@SLaks]: https://github.com/SLaks
+[@Shulyaka]: https://github.com/Shulyaka
+[@SteveEasley]: https://github.com/SteveEasley
+[@TNTLarsn]: https://github.com/TNTLarsn
+[@TheFes]: https://github.com/TheFes
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@ThePapaG]: https://github.com/ThePapaG
+[@Xitee1]: https://github.com/Xitee1
+[@abmantis]: https://github.com/abmantis
+[@agners]: https://github.com/agners
+[@al-s]: https://github.com/al-s
+[@allenporter]: https://github.com/allenporter
+[@angristan]: https://github.com/angristan
+[@ashleigh-hopkins]: https://github.com/ashleigh-hopkins
+[@astrandb]: https://github.com/astrandb
+[@autinerd]: https://github.com/autinerd
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bazwilliams]: https://github.com/bazwilliams
+[@bdr99]: https://github.com/bdr99
+[@bdraco]: https://github.com/bdraco
+[@bgoncal]: https://github.com/bgoncal
+[@bieniu]: https://github.com/bieniu
+[@boralyl]: https://github.com/boralyl
+[@bouwew]: https://github.com/bouwew
+[@bramkragten]: https://github.com/bramkragten
+[@bubonicbob]: https://github.com/bubonicbob
+[@catsmanac]: https://github.com/catsmanac
+[@cbrherms]: https://github.com/cbrherms
+[@cdce8p]: https://github.com/cdce8p
+[@cgtobi]: https://github.com/cgtobi
+[@chatziko]: https://github.com/chatziko
+[@chemelli74]: https://github.com/chemelli74
+[@chenjiayi8]: https://github.com/chenjiayi8
+[@codesalatdev]: https://github.com/codesalatdev
+[@codyc1515]: https://github.com/codyc1515
+[@cottsay]: https://github.com/cottsay
+[@crug80]: https://github.com/crug80
+[@ctalkington]: https://github.com/ctalkington
+[@danieldotnl]: https://github.com/danieldotnl
+[@danzel]: https://github.com/danzel
+[@dcmeglio]: https://github.com/dcmeglio
+[@dgomes]: https://github.com/dgomes
+[@dieselrabbit]: https://github.com/dieselrabbit
+[@dmulcahey]: https://github.com/dmulcahey
+[@dougiteixeira]: https://github.com/dougiteixeira
+[@eclair4151]: https://github.com/eclair4151
+[@edenhaus]: https://github.com/edenhaus
+[@eifinger]: https://github.com/eifinger
+[@elmurato]: https://github.com/elmurato
+[@elupus]: https://github.com/elupus
+[@emichael]: https://github.com/emichael
+[@emontnemery]: https://github.com/emontnemery
+[@emtunc]: https://github.com/emtunc
+[@engrbm87]: https://github.com/engrbm87
+[@erwindouna]: https://github.com/erwindouna
+[@escoand]: https://github.com/escoand
+[@esev]: https://github.com/esev
+[@exxamalte]: https://github.com/exxamalte
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@frwickst]: https://github.com/frwickst
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@h3ss]: https://github.com/h3ss
+[@idstein]: https://github.com/idstein
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jeverley]: https://github.com/jeverley
+[@jimmyd-be]: https://github.com/jimmyd-be
+[@jjlawren]: https://github.com/jjlawren
+[@jklausa]: https://github.com/jklausa
+[@jkrall]: https://github.com/jkrall
+[@jmwaldrip]: https://github.com/jmwaldrip
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@jrieger]: https://github.com/jrieger
+[@julienfreche]: https://github.com/julienfreche
+[@jurriaan]: https://github.com/jurriaan
+[@karwosts]: https://github.com/karwosts
+[@kbickar]: https://github.com/kbickar
+[@killer0071234]: https://github.com/killer0071234
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@kpine]: https://github.com/kpine
+[@krmarien]: https://github.com/krmarien
+[@kvanzuijlen]: https://github.com/kvanzuijlen
+[@leahoswald]: https://github.com/leahoswald
+[@lellky]: https://github.com/lellky
+[@lhgravendeel]: https://github.com/lhgravendeel
+[@liudger]: https://github.com/liudger
+[@llluis]: https://github.com/llluis
+[@ludeeus]: https://github.com/ludeeus
+[@madpilot]: https://github.com/madpilot
+[@mandarons]: https://github.com/mandarons
+[@marcelveldt]: https://github.com/marcelveldt
+[@marcolivierarsenault]: https://github.com/marcolivierarsenault
+[@matrixd2]: https://github.com/matrixd2
+[@matt7aylor]: https://github.com/matt7aylor
+[@max2697]: https://github.com/max2697
+[@miaucl]: https://github.com/miaucl
+[@mib1185]: https://github.com/mib1185
+[@michaelarnauts]: https://github.com/michaelarnauts
+[@mikey0000]: https://github.com/mikey0000
+[@mill1000]: https://github.com/mill1000
+[@mj23000]: https://github.com/mj23000
+[@mkmer]: https://github.com/mkmer
+[@msavazzi]: https://github.com/msavazzi
+[@myztillx]: https://github.com/myztillx
+[@nprez83]: https://github.com/nprez83
+[@ollo69]: https://github.com/ollo69
+[@pajzo]: https://github.com/pajzo
+[@peebles]: https://github.com/peebles
+[@peterkh]: https://github.com/peterkh
+[@piitaya]: https://github.com/piitaya
+[@pnbruckner]: https://github.com/pnbruckner
+[@puddly]: https://github.com/puddly
+[@raman325]: https://github.com/raman325
+[@rappenze]: https://github.com/rappenze
+[@reedy]: https://github.com/reedy
+[@rfverbruggen]: https://github.com/rfverbruggen
+[@rikroe]: https://github.com/rikroe
+[@rokam]: https://github.com/rokam
+[@rsiv]: https://github.com/rsiv
+[@rytilahti]: https://github.com/rytilahti
+[@sdb9696]: https://github.com/sdb9696
+[@slovdahl]: https://github.com/slovdahl
+[@spycle]: https://github.com/spycle
+[@starkillerOG]: https://github.com/starkillerOG
+[@steffenrapp]: https://github.com/steffenrapp
+[@stegm]: https://github.com/stegm
+[@suaveolent]: https://github.com/suaveolent
+[@synesthesiam]: https://github.com/synesthesiam
+[@teharris1]: https://github.com/teharris1
+[@thomaskistler]: https://github.com/thomaskistler
+[@tkdrob]: https://github.com/tkdrob
+[@tronikos]: https://github.com/tronikos
+[@vilppuvuorinen]: https://github.com/vilppuvuorinen
+[@wilburCforce]: https://github.com/wilburCforce
+[@wittypluck]: https://github.com/wittypluck
+[@xMohamd]: https://github.com/xMohamd
+[@xeniter]: https://github.com/xeniter
+[@xmow49]: https://github.com/xmow49
+[@yuvalabou]: https://github.com/yuvalabou
+[@zweckj]: https://github.com/zweckj
+[@zxdavb]: https://github.com/zxdavb
diff --git a/source/changelogs/core-2024.3.markdown b/source/changelogs/core-2024.3.markdown
new file mode 100644
index 000000000000..133864a49aee
--- /dev/null
+++ b/source/changelogs/core-2024.3.markdown
@@ -0,0 +1,2444 @@
+---
+title: Full changelog for Home Assistant Core 2024.3
+description: Detailed changelog for the Home Assistant Core 2024.3 release
+replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$
+---
+
+These are all the changes included in the Home Assistant Core 2024.3 release.
+
+For a summary in a more readable format:
+[Release notes blog for this release](/blog/2024/03/06/release-20243/).
+
+## All changes
+
+- Bump version to 2024.3.0dev0 ([@frenck] - [#109238])
+- Only decode msg topic once when handling mqtt payloads ([@bdraco] - [#109258])
+- Bump sigstore/cosign-installer from 3.3.0 to 3.4.0 (@dependabot - [#109278])
+- Add icon translations to GPSd ([@jrieger] - [#108602])
+- Update ruff to 0.1.15 ([@cdce8p] - [#109303])
+- Add connect octoprint printer service ([@rfleming71] - [#99899])
+- Reduce lock contention when all icons are already cached ([@bdraco] - [#109352])
+- Load json file as binary instead of decoding to string ([@bdraco] - [#109351])
+- Avoid de/recode of bytes to string to bytes when writing json files ([@bdraco] - [#109348])
+- Add Duquesne Light virtual integration supported by opower ([@swartzd] - [#109272])
+- Use send_json_auto_id in recorder tests ([@emontnemery] - [#109355])
+- Use a mocked API client in Traccar Server tests ([@ludeeus] - [#109358])
+- Improve color mode handling in MockLight ([@emontnemery] - [#109298])
+- Hide unsupported devices in Airthings BLE config flow ([@LaStrada] - [#107648])
+- Disable less interesting sensors by default in ViCare integration ([@CFenner] - [#109014])
+- Update sentry-sdk to 1.40.0 ([@frenck] - [#109363])
+- Use translation placeholders in 1-Wire ([@jrieger] - [#109120])
+- Change device class of Auto Seat Heater sensors in Tessie ([@Bre77] - [#109240])
+- Centralize validation for modbus config ([@janiversen] - [#108906])
+- Add Charging sensor to Tessie ([@Bre77] - [#108205])
+- Add entity name translations to Tibber ([@jpbede] - [#108797])
+- Add entity description to GPSD ([@jrieger] - [#109320])
+- Use send_json_auto_id in conversation tests ([@emontnemery] - [#109354])
+- Remove remaning ESPHome files from coveragerc ([@bdraco] - [#109400])
+- Mask sensitive data in google_assistant logs ([@emontnemery] - [#109366])
+- Convert auth token removal websocket api to normal functions ([@bdraco] - [#109432])
+- Improve color mode handling in light groups ([@emontnemery] - [#109390])
+- Update Twinkly DHCP discovery addresses ([@codyc1515] - [#109495])
+- Remove useless _handle_pipeline_event function in ESPHome ([@bdraco] - [#109484])
+- Update pyfronius to 0.7.3 ([@farmio] - [#109507])
+- Bump qingping_ble to 0.10.0 - Add support for GCP22C (Qingping CO2 Temp RH) ([@AidasK] - [#108567])
+- Bump mopeka-iot-ble to 0.7.0 ([@bdraco] - [#109516])
+- Add Speed Limit to Tessie lock platform ([@Bre77] - [#106527])
+- Reduce overhead to convert history to float states ([@bdraco] - [#109526])
+- Cache path for Store helper ([@bdraco] - [#109587])
+- Avoid looking up services to check if they support responses ([@bdraco] - [#109588])
+- Add ZonderGas virtual integration ([@klaasnicolaas] - [#109601])
+- Add SamSam virtual integration ([@klaasnicolaas] - [#109602])
+- Avoid converting to same units when compiling stats ([@bdraco] - [#109531])
+- Update Flo test to address review comment ([@dmulcahey] - [#109604])
+- Remove default name prefix of HomePods from Suggested Area in Apple TV integration ([@codyc1515] - [#109489])
+- Avoid many string lowers in the state machine ([@bdraco] - [#109607])
+- Add tests for shelly switch unique ids ([@bdraco] - [#109617])
+- Add diagnostics platform to Traccar Server ([@ludeeus] - [#109521])
+- Reduce complexity of shelly button setup ([@bdraco] - [#109625])
+- Remove default values from calls to async_fire ([@bdraco] - [#109613])
+- Use get_entries_for_config_entry_id helper in async_migrate_entries ([@bdraco] - [#109629])
+- Avoid linear search of entity registry in guardian ([@bdraco] - [#109634])
+- Avoid linear search of entity registry in keenetic_ndms2 ([@bdraco] - [#109635])
+- Avoid linear search of entity registry in lcn ([@bdraco] - [#109638])
+- Avoid linear search of entity registry in huawei_lte ([@bdraco] - [#109637])
+- Avoid linear search of entity registry in mikrotik ([@bdraco] - [#109639])
+- Avoid linear search of entity registry in nmap_tracker ([@bdraco] - [#109640])
+- Avoid linear search of entity registry in rainmachine ([@bdraco] - [#109642])
+- Avoid linear search of entity registry in ruckus_unleashed ([@bdraco] - [#109643])
+- Avoid linear search of entity registry in async_get_device_automations ([@bdraco] - [#109633])
+- Bump `aionotion` to 2024.02.0 ([@bachya] - [#109577])
+- Make get_entries_for_device_id skip disabled devices by default ([@bdraco] - [#109645])
+- Improve scalability of DHCP matchers ([@bdraco] - [#109406])
+- Add icons for fan preset modes ([@mill1000] - [#109334])
+- Add Xiaomi-ble remotes and dimmers ([@Ernst79] - [#109327])
+- Bump plexapi to 4.15.9 ([@jjlawren] - [#109676])
+- Use identity check in hassio websocket ingress ([@bdraco] - [#109672])
+- Bump github/codeql-action from 3.23.2 to 3.24.0 (@dependabot - [#109677])
+- Move nested code to class level as static method in imap coordinator ([@jbouwh] - [#109665])
+- Index area_ids in the entity registry ([@bdraco] - [#109660])
+- Use builtin TimeoutError [a-d] ([@cdce8p] - [#109678])
+- Use builtin TimeoutError [e-i] ([@cdce8p] - [#109679])
+- Use builtin TimeoutError [k-n] ([@cdce8p] - [#109681])
+- Use builtin TimeoutError [core + helpers] ([@cdce8p] - [#109684])
+- Use builtin TimeoutError [o-s] ([@cdce8p] - [#109682])
+- Use builtin TimeoutError [t-z] ([@cdce8p] - [#109683])
+- Remove raspberry_pi config entry if hassio is not present ([@emontnemery] - [#109687])
+- Remove hardkernel config entry if hassio is not present ([@emontnemery] - [#109680])
+- Avoid linear search of device registry when no areas are referenced in service calls ([@bdraco] - [#109669])
+- Remove homeassistant_green config entry if hassio is not present ([@emontnemery] - [#109685])
+- Remove homeassistant_yellow config entry if hassio is not present ([@emontnemery] - [#109686])
+- Add test of remote enabling of remote UI ([@emontnemery] - [#109698])
+- Use dict.get instead of inline if ([@cdce8p] - [#109693])
+- Bump hass-nabucasa from 0.76.0 to 0.77.0 ([@emontnemery] - [#109699])
+- Copy callbacks instead of slice for event dispatch ([@bdraco] - [#109711])
+- Use a single call to add entities in Nuki ([@pree] - [#109696])
+- Allow weight to be used as total_increasing state_class for sensors ([@jbouwh] - [#108505])
+- Use builtin TimeoutError [misc] ([@cdce8p] - [#109703])
+- Use builtin TimeoutError [socket.timeout] ([@cdce8p] - [#109704])
+- Move async_deinitialize to google_assistant AbstractConfig ([@emontnemery] - [#109736])
+- Remove lru cache size limit of TemperatureConverter ([@emontnemery] - [#109726])
+- Set default for OSTYPE in run-in-env script ([@synesthesiam] - [#109731])
+- Fix string in xiaomi_ble ([@Betacart] - [#109758])
+- Avoid linear search in entity registry to clear an area ([@bdraco] - [#109735])
+- Avoid linear search of entity registry in async_clear_config_entry ([@bdraco] - [#109724])
+- Switch utc_to_timestamp to .timestamp() where possible ([@bdraco] - [#109729])
+- Reduce dict lookups in entity registry indices ([@bdraco] - [#109712])
+- Avoid linear search of the entity registry in ps4 ([@bdraco] - [#109723])
+- Clean up Alexa when logging out from cloud ([@emontnemery] - [#109738])
+- Add Process binary sensor in System Monitor ([@gjohansson-ST] - [#108585])
+- Fix docstring length in ZHA sensor class ([@TheJulianJES] - [#109774])
+- Remove aux heat support from mqtt climate ([@jbouwh] - [#109513])
+- Improve tests of mqtt device triggers ([@jbouwh] - [#108318])
+- Break long strings in Google generative ai conversation ([@tronikos] - [#109771])
+- Bump yolink-api to 0.3.7 ([@matrixd2] - [#109776])
+- Use has_capability instead of hasattr for ring history ([@sdb9696] - [#109791])
+- Include exception when reraising inside except ([@cdce8p] - [#109706])
+- Add myuplink sensor descriptions for current and frequency sensors ([@astrandb] - [#109784])
+- Improve typing of cloud HTTP API ([@emontnemery] - [#109780])
+- Add slots to bluetooth matcher objects ([@bdraco] - [#109768])
+- Rename google_assistant.AbstractConfig.get_local_agent_user_id ([@emontnemery] - [#109798])
+- Update ruff to 0.2.1 ([@cdce8p] - [#109796])
+- Make bluetooth use naming from the entity description ([@joostlek] - [#97401])
+- Bump hass-nabucasa from 0.77.0 to 0.78.0 ([@emontnemery] - [#109813])
+- Make additional methods of google_assistant.AbstractConfig abstract ([@emontnemery] - [#109811])
+- Add transition support to Matter light platform ([@marcelveldt] - [#109803])
+- Add update platform to myuplink ([@astrandb] - [#109786])
+- Fix hue fallback onoff colormode ([@emontnemery] - [#109856])
+- Add late PR changes to tedee ([@zweckj] - [#109858])
+- Simplify Hue v2 color mode calculation ([@emontnemery] - [#109857])
+- Move Roborock map retrieval to coordinator and made map always diagnostic ([@Lash-L] - [#104680])
+- Add Husqvarna Automower integration ([@Thomas55555] - [#109073])
+- Update syrupy to 4.6.1 ([@cdce8p] - [#109860])
+- Add sensor for Ecowitt raw soil moisture value ([@dcmeglio] - [#109849])
+- Fix light color mode in tplink ([@emontnemery] - [#109831])
+- Fix Shelly white light test ([@emontnemery] - [#109855])
+- Add support for air purifiers to HomeKit Device ([@Jc2k] - [#109880])
+- Test unique IDs for Shelly entities ([@bieniu] - [#109879])
+- Add analog input value sensor for Shelly ([@bieniu] - [#109312])
+- Reset log level in script tests ([@cdce8p] - [#109881])
+- Bump myuplink dependency to 0.1.1 ([@astrandb] - [#109878])
+- Add missing `unique_id` check for Shelly Analog Input sensor ([@bieniu] - [#109888])
+- Bump pymodbus to v3.6.4 ([@janiversen] - [#109980])
+- Fix callable import ([@cdce8p] - [#110003])
+- Update pylint-per-file-ignores to 1.3.2 ([@cdce8p] - [#110014])
+- Bump Wandalen/wretry.action from 1.3.0 to 1.4.0 (@dependabot - [#109950])
+- Add option-icons for Plugwise Select ([@bouwew] - [#109986])
+- bump wretry.action@v1.4.4 ([@mib1185] - [#110053])
+- Avoid directly changing config entry state in tests ([@bdraco] - [#110048])
+- Bump aiodiscover 1.6.1 ([@bdraco] - [#110059])
+- Cleanup test config entry setup to use best practices ([@allenporter] - [#110070])
+- Convert dhcp watcher to asyncio ([@bdraco] - [#109938])
+- Remove homekit_controller entity registry entries when backing char or service is gone ([@Jc2k] - [#109952])
+- Update sentry-sdk to 1.40.2 ([@frenck] - [#110049])
+- Improve ability to debug one time listeners blocking the event loop ([@bdraco] - [#110064])
+- Address late review on husqvarna_automower ([@Thomas55555] - [#109896])
+- Update debugpy to 1.8.1 ([@frenck] - [#110076])
+- Allow passing version to ConfigEntry.async_update_entry ([@emontnemery] - [#110077])
+- Add entry diagnostics to imap integration ([@jbouwh] - [#109460])
+- Fix scene tests ([@emontnemery] - [#110097])
+- Fix color mode in flux_led light ([@emontnemery] - [#110096])
+- Improve apple_tv error reporting when setup fails ([@bdraco] - [#110071])
+- Make ConfigEntryItems responsible for updating unique ids ([@bdraco] - [#110018])
+- Avoid delaying startup in dlna_dmr ([@bdraco] - [#109836])
+- Reduce complexity in the homekit config flow filters ([@bdraco] - [#109850])
+- Avoid linear search of entity registry in async_extract_referenced_entity_ids ([@bdraco] - [#109667])
+- Use async_update_entry in github tests ([@bdraco] - [#110119])
+- Update pytest-asyncio to 0.23.5 ([@cdce8p] - [#110129])
+- Update sentry-sdk to 1.40.3 ([@frenck] - [#110109])
+- Add icon translations to GIOS ([@bieniu] - [#110131])
+- Add icon translations to NAM ([@bieniu] - [#110135])
+- Add icon translations to Tractive ([@bieniu] - [#110138])
+- Use async_update_entry to update esphome options in tests ([@bdraco] - [#110118])
+- Simplify emulated_hue exposed entities cache ([@bdraco] - [#109890])
+- Avoid directly changing config entry state in tests (part 2) ([@bdraco] - [#110115])
+- Use async_update_entry to update dlna_dmr options in tests ([@bdraco] - [#110117])
+- Add state_translated function to jinja templates ([@PiotrMachowski] - [#96906])
+- Add icon translations to Brother ([@bieniu] - [#110128])
+- Update systemmonitor to set config entry version using async_update_entry ([@bdraco] - [#110192])
+- Update switch_as_x to set ConfigEntry version with async_update_entry ([@bdraco] - [#110193])
+- Update islamic_prayer_times to set ConfigEntry version with async_update_entry ([@bdraco] - [#110194])
+- Update prusalink to set ConfigEntry version with async_update_entry ([@bdraco] - [#110196])
+- Update swiss_public_transport to set ConfigEntry version with async_update_entry ([@bdraco] - [#110197])
+- Update airnow to set ConfigEntry version with async_update_entry ([@bdraco] - [#110202])
+- Update airvisual to set ConfigEntry version with async_update_entry ([@bdraco] - [#110204])
+- Improve package schema validation ([@chammp] - [#108125])
+- Enable compression for manifest.json ([@bdraco] - [#110229])
+- Update `denonavr` to `0.11.6` ([@ol-iver] - [#110231])
+- Bump aioautomower to 2024.2.4 ([@Thomas55555] - [#110209])
+- Add icon translations to NextDNS ([@bieniu] - [#110179])
+- Refactor tradfri tests ([@MartinHjelmare] - [#110094])
+- Add missing log message for error resolving OAuth token ([@deosrc] - [#107606])
+- Update pre-commit to 3.6.1 ([@cdce8p] - [#110278])
+- Bump thermopro-ble to 0.10.0 ([@bdraco] - [#110279])
+- Update tqdm to 4.66.2 ([@cdce8p] - [#110277])
+- Implement late feedback for Bluecurrent ([@Floris272] - [#106918])
+- Add icon translations to Shelly ([@bieniu] - [#110183])
+- Avoid calling hass internals when adding mock config entry in Blink ([@jpbede] - [#110290])
+- Avoid calling hass internals when adding mock config entry in Fully Kiosk ([@jpbede] - [#110291])
+- Convert test helpers to get hass instance to contextmanagers ([@cdce8p] - [#109990])
+- Update pytest to 8.0.0 ([@cdce8p] - [#109876])
+- Migrate ambient_station to use async_update_entry to alter config entries ([@bdraco] - [#110305])
+- Migrate lametric to use async_update_entry to alter config entries ([@bdraco] - [#110313])
+- Migrate forecast_solar to use async_update_entry to alter config entries ([@bdraco] - [#110306])
+- Migrate huawei_lte to use async_update_entry to alter config entries ([@bdraco] - [#110309])
+- Migrate homematicip_cloud to use async_update_entry to alter config entries ([@bdraco] - [#110308])
+- Migrate blink to use async_update_entry to alter config entries ([@bdraco] - [#110303])
+- Migrate axis to use async_update_entry to alter config entries ([@bdraco] - [#110302])
+- Migrate knx to use async_update_entry to alter config entries ([@bdraco] - [#110312])
+- Add pulse counter sensors for Shelly ([@bieniu] - [#110248])
+- Fix color mode in hive light ([@emontnemery] - [#110330])
+- Fix color mode in comelit light ([@emontnemery] - [#110326])
+- Remove old BMW vehicles/devices automatically ([@rikroe] - [#110255])
+- Add myuplink diagnostics download ([@astrandb] - [#109925])
+- Migrate google_assistant_sdk to use async_update_entry to alter config entries ([@bdraco] - [#110307])
+- Migrate landisgyr_heat_meter to use async_update_entry to alter config entries ([@bdraco] - [#110314])
+- Correct screenlogic test's mock adapter name ([@dieselrabbit] - [#110317])
+- Bump pytraccar from 2.0.0 to 2.1.0 ([@ludeeus] - [#110320])
+- Update pytest warnings filter ([@cdce8p] - [#110332])
+- Update python rflink to 0.0.66 ([@Minims] - [#110060])
+- Upgrade myuplink package to 0.2.1 ([@pajzo] - [#110343])
+- Change function name in hvv_departures ([@joostlek] - [#110349])
+- Add myuplink specific sensor descriptions ([@astrandb] - [#109867])
+- Improve type annotation in Shelly tests ([@bieniu] - [#110361])
+- Warn when lights violate color mode rules ([@emontnemery] - [#110336])
+- Migrate openuv to use async_update_entry to alter config entries ([@bdraco] - [#110371])
+- Migrate rainmachine to use async_update_entry to alter config entries ([@bdraco] - [#110377])
+- Migrate ridwell to use async_update_entry to alter config entries ([@bdraco] - [#110380])
+- Migrate recollect_waste to use async_update_entry to alter config entries ([@bdraco] - [#110378])
+- Migrate samsungtv to use async_update_entry to alter config entries ([@bdraco] - [#110362])
+- Remove store from google_assistant AbstractConfig ([@emontnemery] - [#109877])
+- Migrate zwave_js to use async_update_entry to alter config entries ([@bdraco] - [#110376])
+- Fix color mode in wiz light ([@emontnemery] - [#110328])
+- Migrate trafikverket_camera to use async_update_entry to alter config entries ([@bdraco] - [#110393])
+- Migrate smhi to use async_update_entry to alter config entries ([@bdraco] - [#110391])
+- Migrate sensibo to use async_update_entry to alter config entries ([@bdraco] - [#110390])
+- Migrate sonarr to use async_update_entry to alter config entries ([@bdraco] - [#110364])
+- Bump securetar to 2024.2.0 ([@bdraco] - [#110383])
+- Migrate utility_meter to use async_update_entry to alter config entries ([@bdraco] - [#110394])
+- Migrate switchbee to use async_update_entry to alter config entries ([@bdraco] - [#110392])
+- Migrate ps4 to use async_update_entry to alter config entries ([@bdraco] - [#110373])
+- Migrate foscam to use async_update_entry to alter config entries ([@bdraco] - [#110365])
+- Migrate minecraft_server to use async_update_entry to alter config entries ([@bdraco] - [#110367])
+- Bump SQLAlchemy to 2.0.26 ([@bdraco] - [#110358])
+- Add back `supported_color_modes` property to `blebox` light ([@emontnemery] - [#110350])
+- Add power strip with 2 outlets to kitchen_sink ([@emontnemery] - [#110346])
+- Migrate roku to use async_update_entry to alter config entries ([@bdraco] - [#110363])
+- Add `removal_condition` for Shelly analog input sensors ([@bieniu] - [#110331])
+- Migrate obihai to use async_update_entry to alter config entries ([@bdraco] - [#110368])
+- Migrate openweathermap to use async_update_entry to alter config entries ([@bdraco] - [#110372])
+- Update Home Assistant base image to 2024.02.1 ([@frenck] - [#110395])
+- Migrate ipp to use async_update_entry to alter config entries ([@bdraco] - [#110311])
+- Migrate hue to use async_update_entry to alter config entries ([@bdraco] - [#110310])
+- Cleanup myuplink imports ([@astrandb] - [#110374])
+- Migrate velbus to use async_update_entry to alter config entries ([@bdraco] - [#110399])
+- Migrate yale_smart_alarm to use async_update_entry to alter config entries ([@bdraco] - [#110401])
+- Migrate verisure to use async_update_entry to alter config entries ([@bdraco] - [#110400])
+- Migrate smartthings to use async_update_entry to alter config entries ([@bdraco] - [#110403])
+- Migrate zha to use async_update_entry to alter config entries ([@bdraco] - [#110402])
+- Migrate ping to use async_update_entry to alter config entries ([@bdraco] - [#110404])
+- Migrate mqtt to use async_update_entry to alter config entries ([@bdraco] - [#110407])
+- Migrate unifiprotect to use async_update_entry to alter config entries ([@bdraco] - [#110409])
+- Migrate plex to use async_update_entry to alter config entries ([@bdraco] - [#110405])
+- Migrate trend to use async_update_entry to alter config entries ([@bdraco] - [#110408])
+- Migrate tplink to use async_update_entry to alter config entries ([@bdraco] - [#110406])
+- Ensure deconz tests add config entry before updating it ([@bdraco] - [#110417])
+- Migrate onewire to use async_update_entry to alter config entries ([@bdraco] - [#110413])
+- Ensure sonarr tests add config entry before updating it ([@bdraco] - [#110422])
+- Migrate twentemilieu to use async_update_entry to alter config entries ([@bdraco] - [#110419])
+- Migrate luftdaten to use async_update_entry to alter config entries ([@bdraco] - [#110424])
+- Ensure blink tests add config entry before updating it ([@bdraco] - [#110415])
+- Ensure gdacs tests add config entry before updating it ([@bdraco] - [#110431])
+- Ensure homematicip_cloud tests add config entry before updating it ([@bdraco] - [#110429])
+- Ensure config entry oauth2 tests add config entry before updating it ([@bdraco] - [#110421])
+- Ensure dlna_dmr tests add config entry before updating it ([@bdraco] - [#110418])
+- Ensure cast tests add config entry before updating it ([@bdraco] - [#110416])
+- Ensure knx tests add config entry before updating it ([@bdraco] - [#110425])
+- Improve tests for Shelly WallDisplay ([@bieniu] - [#110435])
+- Improve climate turn_on/turn_off services for zwave_js ([@raman325] - [#109187])
+- Remove unused instance variable in Z-wave ([@raman325] - [#110442])
+- Update Notion auth to store refresh tokens instead of account passwords ([@bachya] - [#109670])
+- Add myuplink unit-based sensor descriptions ([@astrandb] - [#110370])
+- Ensure hue tests add config entry before updating it ([@bdraco] - [#110428])
+- Ensure github tests add config entry before updating it ([@bdraco] - [#110430])
+- Ensure cast tests add config entry before updating it ([@bdraco] - [#110441])
+- Remove power_state_template from mqtt climate value template list ([@jbouwh] - [#110452])
+- Add additonal number entities to La Marzocco ([@zweckj] - [#108258])
+- Handle template errors on MQTT payload handling ([@jbouwh] - [#110180])
+- Change function name in tfiac ([@joostlek] - [#110466])
+- Change function name in flexit_bacnet ([@joostlek] - [#110465])
+- Change function name in tesla_wall_connector ([@joostlek] - [#110467])
+- Deprecate cloud tts platform config ([@MartinHjelmare] - [#110461])
+- Avoid creating many tasks when adding hue v2 entities ([@bdraco] - [#110386])
+- Switch to new Bring! lib ([@miaucl] - [#110355])
+- Small performance improvements to config entry setup retry ([@bdraco] - [#110448])
+- Add setpoints for fans to flexit_bacnet ([@lellky] - [#110262])
+- Set icons for switch without device class ([@piitaya] - [#110470])
+- Add icon translations to Teslemetry ([@StephenBrown2] - [#109928])
+- Add myuplink binary_sensor platform ([@astrandb] - [#110388])
+- Refactor flexit_bacnet to use icon translations ([@lellky] - [#110479])
+- Bump aiowebostv to 0.4.0 ([@thecode] - [#110477])
+- Fix logger message in samsungtv ([@bdraco] - [#110484])
+- Add config flow to Velux ([@DeerMaximum] - [#89155])
+- Add DeerMaximum to velux codeowners ([@DeerMaximum] - [#110504])
+- Refactor dhcp to move all mac formatting into the client processor ([@bdraco] - [#110509])
+- Bump github/codeql-action from 3.24.0 to 3.24.1 (@dependabot - [#110522])
+- Bump SQLAlchemy to 2.0.27 ([@bdraco] - [#110517])
+- Move Shelly thermostat check to status endpoint ([@chemelli74] - [#110543])
+- Migrate Twinkly to has entity naming ([@joostlek] - [#97206])
+- Create backups files without having to copy inner tarballs ([@bdraco] - [#110267])
+- Add entity translations to OralB ([@joostlek] - [#97402])
+- Migrate Vizio to has entity name ([@joostlek] - [#96773])
+- Fix formatting of mac addresses from dhcp discovery mocking in hunterdouglas_powerview ([@bdraco] - [#110577])
+- Fix formatting of mac addresses from dhcp discovery mocking in insteon ([@bdraco] - [#110578])
+- Fix formatting of mac addresses from dhcp discovery mocking in obihai ([@bdraco] - [#110586])
+- Fix formatting of mac addresses from dhcp discovery mocking in nuki ([@bdraco] - [#110585])
+- Fix formatting of mac addresses from dhcp discovery mocking in motion_blinds ([@bdraco] - [#110583])
+- Fix formatting of mac addresses from dhcp discovery mocking in lifx ([@bdraco] - [#110581])
+- Fix formatting of mac addresses from dhcp discovery mocking in intellifire ([@bdraco] - [#110579])
+- Fix formatting of mac addresses from dhcp discovery mocking in guardian ([@bdraco] - [#110575])
+- Fix formatting of mac addresses from dhcp discovery mocking in fully_kiosk ([@bdraco] - [#110573])
+- Fix formatting of mac addresses from dhcp discovery mocking in onvif ([@bdraco] - [#110589])
+- Fix formatting of mac addresses from dhcp discovery mocking in flux_led ([@bdraco] - [#110568])
+- Fix formatting of mac addresses from dhcp discovery mocking in esphome ([@bdraco] - [#110567])
+- Fix formatting of mac addresses from dhcp discovery mocking in emonitor ([@bdraco] - [#110565])
+- Fix formatting of mac addresses from dhcp discovery mocking in elkm1 ([@bdraco] - [#110564])
+- Fix formatting of mac addresses from dhcp discovery mocking in airzone ([@bdraco] - [#110559])
+- Improve hassio decorator typing ([@cdce8p] - [#110545])
+- Fix formatting of mac addresses from dhcp discovery mocking in reolink ([@bdraco] - [#110594])
+- Add support for Fully Kiosk sound playing state ([@cgarwood] - [#105762])
+- Avoid calling internals when adding mock config entry in Squeezebox ([@jpbede] - [#110601])
+- Fix formatting of mac addresses from dhcp discovery mocking in overkiz ([@bdraco] - [#110590])
+- Fix formatting of mac addresses from dhcp discovery mocking in dlink ([@bdraco] - [#110562])
+- Fix misaligned mac formatting in goalzero ([@bdraco] - [#110574])
+- Fix formatting of mac addresses from dhcp discovery mocking in powerwall ([@bdraco] - [#110591])
+- Bump aioautomower to 2024.2.6 ([@Thomas55555] - [#110598])
+- Fix formatting of mac addresses from dhcp discovery mocking in fronius ([@bdraco] - [#110572])
+- Fix formatting of mac addresses from dhcp discovery mocking in yeelight ([@bdraco] - [#110616])
+- Fix formatting of mac addresses from dhcp discovery mocking in wiz ([@bdraco] - [#110615])
+- Fix formatting of mac addresses from dhcp discovery mocking in vicare ([@bdraco] - [#110613])
+- Fix formatting of mac addresses from dhcp discovery mocking in verisure ([@bdraco] - [#110611])
+- Fix formatting of mac addresses from dhcp discovery mocking in unifiprotect ([@bdraco] - [#110610])
+- Fix formatting of mac addresses from dhcp discovery mocking in twinkly ([@bdraco] - [#110609])
+- Fix formatting of mac addresses from dhcp discovery mocking in tolo ([@bdraco] - [#110608])
+- Fix formatting of mac addresses from dhcp discovery mocking in tesla_wall_connector ([@bdraco] - [#110607])
+- Fix formatting of mac addresses from dhcp discovery mocking in tailwind ([@bdraco] - [#110606])
+- Fix formatting of mac addresses from dhcp discovery mocking in steamist ([@bdraco] - [#110605])
+- Fix formatting of mac addresses from dhcp discovery mocking in squeezebox ([@bdraco] - [#110604])
+- Fix formatting of mac addresses from dhcp discovery mocking in somfy_mylink ([@bdraco] - [#110603])
+- Fix formatting of mac addresses from dhcp discovery mocking in screenlogic ([@bdraco] - [#110602])
+- Fix formatting of mac addresses from dhcp discovery mocking in lametric ([@bdraco] - [#110580])
+- Fix formatting of mac addresses from dhcp discovery mocking in qnap_qsw ([@bdraco] - [#110592])
+- Fix formatting of mac addresses from dhcp discovery mocking in roomba ([@bdraco] - [#110596])
+- Correct misaligned formatting of mac addresses in samsungtv ([@bdraco] - [#110599])
+- Fix formatting of mac addresses from dhcp discovery mocking in ruuvi_gateway ([@bdraco] - [#110597])
+- Fix formatting of mac addresses from dhcp discovery mocking in radiotherm ([@bdraco] - [#110593])
+- Fix formatting of mac addresses from dhcp discovery mocking in nest ([@bdraco] - [#110584])
+- Fix formatting of mac addresses from dhcp discovery mocking in broadlink ([@bdraco] - [#110558])
+- Fix formatting of mac addresses from dhcp discovery mocking in config_entries test ([@bdraco] - [#110617])
+- Fix formatting of mac addresses from dhcp discovery mocking in axis ([@bdraco] - [#110560])
+- Bump libpyfoscam to 1.2.2 ([@krmarien] - [#110625])
+- Add monthly forecast sensor to RymPro ([@OnFreund] - [#101012])
+- Split pre/post backup actions into dedicated methods ([@ludeeus] - [#110632])
+- Add some myuplink tests ([@astrandb] - [#110521])
+- Add support for multiple devices linked to a Viessmann account ([@CFenner] - [#96044])
+- Update wallbox to 0.6.0 ([@pilotopirx] - [#110636])
+- Enable strict type checking on apple_tv integration ([@stackia] - [#101688])
+- Bump pyMicrobot to 0.0.15 ([@spycle] - [#110502])
+- Powerview Gen 3 functionality ([@kingy444] - [#110158])
+- Ensure lamarzocco tests add config entry before updating it ([@bdraco] - [#110423])
+- Add state_class to ring battery sensor for LTS ([@livioavalle] - [#109872])
+- Add option to block remote enabling of HA Cloud remote ([@emontnemery] - [#109700])
+- Categorize burner and compressor sensors as diagnostic entities in ViCare integration ([@CFenner] - [#110653])
+- Bump pychromecast to 14.0.0 ([@emontnemery] - [#108374])
+- Bump nextcord to 2.6.0 ([@tkdrob] - [#110485])
+- Correct config entry setup in fritz tests ([@emontnemery] - [#110669])
+- Don't add fritz entities with update_before_add ([@emontnemery] - [#110667])
+- Remove unneeded list copy in icon helper ([@bdraco] - [#110680])
+- Speed up registry config websocket api calls with list comps ([@bdraco] - [#110693])
+- Move late import of config flows in loader to load time ([@bdraco] - [#110688])
+- Use bytes join fast path for large states payload ([@bdraco] - [#110694])
+- Migrate dependencies loader to use async_get_integrations ([@bdraco] - [#110690])
+- Add Aprilaire integration ([@chamberlain2007] - [#95093])
+- Add translations to AVM FRITZ!Box Call Monitor state attributes ([@jrieger] - [#108412])
+- Avoid calling internals when adding mock config entry in Nightscout ([@jpbede] - [#110600])
+- Bump dorny/paths-filter from 3.0.0 to 3.0.1 (@dependabot - [#110698])
+- Bump github/codeql-action from 3.24.1 to 3.24.3 (@dependabot - [#110700])
+- add missing state class to dsmr sensors ([@dupondje] - [#110712])
+- Small performance improvements to collecting analytics ([@bdraco] - [#110662])
+- Bump dawidd6/action-download-artifact from 3.0.0 to 3.1.0 (@dependabot - [#110699])
+- Small performance improvement to async_get_config_flows ([@bdraco] - [#110666])
+- Fix recorder ws_info blocking the event loop ([@bdraco] - [#110657])
+- Add media file playback to DuneHD ([@iliessens] - [#105796])
+- Generic Hygrostat: Do not log warning if the hygrostat is already not active ([@Shulyaka] - [#102662])
+- Use snapshots in analytics tests ([@ludeeus] - [#110704])
+- Make context in data entry flow possible to modify for subclasses ([@gjohansson-ST] - [#110561])
+- Add toggle service to climate ([@arturpragacz] - [#100418])
+- Raise translatable exceptions in entity set methods for BSBLan ([@jpbede] - [#105693])
+- Speed up bootstrap by preloading manifests for base platforms ([@bdraco] - [#110130])
+- Remove hourly weather entity from met.no ([@emontnemery] - [#97023])
+- Simplify loading of icons ([@bdraco] - [#110687])
+- Stop building Python 3.11 wheels ([@frenck] - [#110727])
+- Adjust ConfigEntry.async_setup comments to be more clear ([@bdraco] - [#110726])
+- Guard ConfigEntry from being mutated externally without using the built-in interfaces ([@bdraco] - [#110023])
+- Add breeze switch to Renson integration ([@jimmyd-be] - [#101641])
+- Add filter to translation event listeners to avoid creating tasks ([@bdraco] - [#110732])
+- Run codeql on schedule only ([@frenck] - [#110729])
+- Bump cryptography to 42.0.3 ([@bdraco] - [#110728])
+- Wait for client to be created in wyoming tests ([@bdraco] - [#110751])
+- Fix flo sensor native unit ([@rb28z2] - [#110745])
+- Bump georss-ign-sismologia-client to 0.8 ([@exxamalte] - [#110501])
+- Refactor config integration to use normal functions for setup ([@bdraco] - [#110750])
+- Bump aiopegelonline to 0.0.9 ([@mib1185] - [#110760])
+- Fix race in wyoming test ([@bdraco] - [#110766])
+- Add myuplink reauth flow ([@astrandb] - [#110587])
+- Avoid creating tasks to setup ignored and disabled config entries ([@bdraco] - [#110756])
+- Bump aioesphomeapi to 21.0.3 ([@bdraco] - [#110772])
+- Cleanups in area registry tests ([@frenck] - [#110785])
+- Avoid creating tasks to load integration platforms that do not exist ([@bdraco] - [#110743])
+- Cleanups in device registry tests ([@frenck] - [#110786])
+- Cleanup Shelly async_setup_block_attribute_entities ([@thecode] - [#110792])
+- Fix translations for binary sensors in System Bridge ([@timmo001] - [#110095])
+- Add number platform to powerview to control velocity on gen 3 hubs ([@kingy444] - [#110724])
+- Enable Enphase Envoy authentication credentials update ([@catsmanac] - [#110474])
+- Make template trigger callbacks when nothing needs to be awaited ([@bdraco] - [#110771])
+- Improve performance of _async_when_setup ([@bdraco] - [#110791])
+- Simplify ConfigFlow._async_current_entries ([@bdraco] - [#110799])
+- Small performance improvement in tracking template results ([@bdraco] - [#110622])
+- Cleanups in entity registry tests ([@frenck] - [#110788])
+- Improve performance of async_get_integration_with_requirements ([@bdraco] - [#110770])
+- Add modbus option to manage different setPoint registers ([@crug80] - [#107600])
+- Add floor registry ([@frenck] - [#110741])
+- Remove unneeded mock from Epion ([@joostlek] - [#110815])
+- Bump pyrainbird to 4.0.2 ([@allenporter] - [#110814])
+- Bump ical to 7.0.0 ([@allenporter] - [#110811])
+- Add typing for EVENT_COMPONENT_LOADED ([@bdraco] - [#110812])
+- Fix Local Calendar changing user-specified capitalisation of calendar names ([@codyc1515] - [#108454])
+- Avoid creating tasks for checking integrations platforms ([@bdraco] - [#110795])
+- Enable augmented-assignment operations in scripts ([@akx] - [#108081])
+- Add typing of EVENT_COMPONENT_LOADED to integration_platform helper ([@bdraco] - [#110826])
+- Convert Integration platforms processors where nothing is awaited to callbacks ([@bdraco] - [#110825])
+- Cache JSON representation of ConfigEntry objects ([@bdraco] - [#110823])
+- Ensure translations for other integrations can be loaded if one integration fails ([@bdraco] - [#110748])
+- Refactor integration startup time tracking to reduce overhead ([@bdraco] - [#110136])
+- Group loading of translations for integrations to reduce executor jobs at startup ([@bdraco] - [#110674])
+- Fix local todo list persistence for due dates ([@allenporter] - [#110830])
+- Clean up twitch setup ([@joostlek] - [#110849])
+- Set up smtp integration via the UI ([@jbouwh] - [#110817])
+- Use covariant for fire event data type ([@frenck] - [#110843])
+- Improve floor registry event typing ([@frenck] - [#110844])
+- Add hex color validator ([@frenck] - [#110846])
+- Revert "Set up smtp integration via the UI" ([@jbouwh] - [#110862])
+- Fix races in ESPHome manager tests ([@bdraco] - [#110867])
+- Add Identify device class to homekit_controller ([@Jc2k] - [#110878])
+- Show WebRTC cameras that also support HLS in the media browser ([@OnFreund] - [#108796])
+- Fix sending multiple empty integration timing in bootstrap ([@bdraco] - [#110872])
+- Enable compression on error log api ([@bdraco] - [#110865])
+- Update coverage artifact actions to v4 [ci] ([@cdce8p] - [#110344])
+- Fix trigger attachment race in conversation tests ([@bdraco] - [#110869])
+- Fix Velux setup ([@pawlizio] - [#110886])
+- Use entity registry fixture in octoprint tests ([@jpbede] - [#110887])
+- Avoid creating two tasks to setup components at startup ([@bdraco] - [#110828])
+- Bump pyMicrobot to 0.0.16 ([@spycle] - [#110876])
+- Update AEMET-OpenData to v0.4.8 ([@Noltari] - [#110890])
+- Add better HassJob typing for IntegrationPlatform process_job ([@cdce8p] - [#110896])
+- Use entity & device registry fixtures in unifi tests ([@jpbede] - [#110889])
+- Fix Motionblinds brand name consistency ([@LennP] - [#110222])
+- Partially revert setup typing update ([@cdce8p] - [#110901])
+- Update pytest to 8.0.1 ([@cdce8p] - [#110907])
+- Convert config entry subscriptions to callback ([@bdraco] - [#110900])
+- Update pre-commit to 3.6.2 ([@cdce8p] - [#110908])
+- Fix mqtt discovery subscribe unsubscribe test with one less task ([@bdraco] - [#110914])
+- Update wheels artifact actions to v4 [ci] ([@cdce8p] - [#110894])
+- Narrow bosch_shc patch target in config flow tests ([@bdraco] - [#110922])
+- Fix homekit_controller test race ([@bdraco] - [#110917])
+- Reduce one iteration of pending flows in the discovery flow helper ([@bdraco] - [#110918])
+- Fix switcher_kis tests not holding patch while calling async_block_till_done ([@bdraco] - [#110916])
+- Fix steamist not setting unique id when discovered in user flow ([@bdraco] - [#110915])
+- Add missing async_block_till_done to github config flow tests ([@bdraco] - [#110913])
+- Fix cloud test RuntimeWarning ([@cdce8p] - [#110909])
+- Improve performance of waiting for after dependencies and device config entries ([@bdraco] - [#110902])
+- Avoid creating tasks to run homekit accessories ([@bdraco] - [#110895])
+- Bump esphome dependencies ([@bdraco] - [#110892])
+- Fix BroadlinkThermostat inheritance order ([@eifinger] - [#110927])
+- Bump zhong-hong-hvac to 1.0.12 ([@crhan] - [#110701])
+- Add label registry ([@frenck] - [#110821])
+- Bump dawidd6/action-download-artifact from 3.1.0 to 3.1.1 (@dependabot - [#110925])
+- Add Motionblinds vitual integrations __init__.py ([@starkillerOG] - [#110903])
+- Update vallox_websocket_api to 5.0.2 ([@yozik04] - [#110752])
+- Fix concurrent reloads in yeelight tests ([@bdraco] - [#110911])
+- Add microBees integration ([@marcolettieri] - [#99573]) ([microBees docs])
+- Freeze light profiles for further development ([@MartinHjelmare] - [#110946])
+- Revert powerwall back to awaiting each api call ([@bdraco] - [#110947])
+- Improve timing mqtt integration discovery test ([@jbouwh] - [#110960])
+- Do not turn on `denonavr` receiver when changing the source ([@ol-iver] - [#110964])
+- Group adding unifi entities together to reduce number of tasks ([@bdraco] - [#110965])
+- Make EntityRegistryDisabledHandler._handle_entry_updated a callback ([@bdraco] - [#110966])
+- Add new range sensors to Tessie ([@Bre77] - [#110446])
+- Add async_schedule_reload helper to the ConfigEntries manager ([@bdraco] - [#110912])
+- Add check for myuplink startup ClientError ([@astrandb] - [#110926])
+- Fix failing tessie tests ([@bdraco] - [#110980])
+- Add new intents for cover, valve, vacuum, and media player ([@synesthesiam] - [#110757])
+- Fix last_reset set for Sense percentage sensors ([@kbickar] - [#110977])
+- Migrate yalexs_ble to use async_update_reload_and_abort ([@bdraco] - [#110985])
+- Migrate unifi to use async_update_reload_and_abort ([@bdraco] - [#110987])
+- Migrate xiaomi_miio to use async_update_reload_and_abort ([@bdraco] - [#110988])
+- Bump bring-api to 0.3.1 ([@tr4nt0r] - [#110769])
+- Unifi rename controller to hub ([@Kane610] - [#110976])
+- Handle empty name in powerview config flow ([@bdraco] - [#110969])
+- Expose Hive Motion Sensor temperature ([@drsgoodall] - [#105985])
+- Introduce actuator base entity to microBees ([@FedDam] - [#111000]) ([microBees docs])
+- Bump aioautomower to 2024.2.7 ([@Thomas55555] - [#110991])
+- Bump microBeesPy to 0.2.9 ([@FedDam] - [#111006]) ([microBees docs])
+- Migrate sensibo to use async_update_reload_and_abort ([@bdraco] - [#110986])
+- Add sensor platform to microBees ([@marcolettieri] - [#111008]) ([microBees docs])
+- Bump pyOverkiz to 1.13.7 ([@Tronix117] - [#111004])
+- Remove update_before_add from nut sensors ([@bdraco] - [#111032])
+- Remove update_before_add from legacy ios integration ([@bdraco] - [#111033])
+- Add presets to Advantage Air ([@Bre77] - [#109485])
+- Fix race in gardena_bluetooth config flow tests ([@bdraco] - [#111042])
+- Add state class to Motion Blinds battery sensor ([@some-guy-23] - [#111016])
+- Reduce registry overhead in tests ([@bdraco] - [#110955])
+- Avoid creating tasks to shutdown entity platforms ([@bdraco] - [#111026])
+- Avoid creating tasks to install dependent requirements ([@bdraco] - [#111048])
+- Make ConfigEntry.async_shutdown a callback ([@bdraco] - [#111027])
+- Fix race in removing entities from the registry ([@bdraco] - [#110978])
+- Reduce overhead to load multiple languages in translations ([@bdraco] - [#111028])
+- Avoid creating multiple tasks for config entry init ([@bdraco] - [#110899])
+- Fix Shelly RPC RSSI sensor removal ([@thecode] - [#111035])
+- Add calendar platform to La Marzocco ([@zweckj] - [#108237])
+- Avoid creating tasks to remove entities ([@bdraco] - [#110967])
+- Fix race in automation test_extraction_functions ([@bdraco] - [#111056])
+- Improve UniFi Protect re-auth ([@AngellusMortis] - [#110021])
+- Guide users to migrate from Ubiquiti Cloud Accounts to local for UniFi Protect ([@AngellusMortis] - [#111018])
+- Make adding new device in unifiprotect callback functions ([@bdraco] - [#111054])
+- Increase unifiprotect fallback interval to 20s ([@bdraco] - [#110870])
+- Add async_schedule_call to the Debouncer ([@bdraco] - [#111051])
+- Revert "Reduce dict lookups in entity registry indices" ([@bdraco] - [#111055])
+- Do not directly call async_setup_entry in MQTT tests ([@jbouwh] - [#111010])
+- Make device registry cleanup a callback function ([@bdraco] - [#111052])
+- Replace Wolflink dependency with wolf_comm to support authentication via OpenID ([@janrothkegel] - [#110249])
+- Add tests to myuplink binary_sensor ([@astrandb] - [#110995])
+- Avoid the final write of every registry at the end of each test ([@bdraco] - [#111053])
+- Add code owner to roomba integration ([@Orhideous] - [#111071])
+- Support Bring! recently list ([@miaucl] - [#109854])
+- Migrate shelly to use Debouncer.async_schedule_call ([@bdraco] - [#111087])
+- Update AEMET-OpenData to v0.4.9 ([@Noltari] - [#111092])
+- Avoid late import of area registry in device registry if its not used ([@bdraco] - [#111081])
+- Avoid compressing application (tarfile) downloads from supervisor ([@bdraco] - [#110224])
+- Avoid circular import in Storage.async_delay_save ([@bdraco] - [#111086])
+- Fix Motionblinds TDBU ([@starkillerOG] - [#110871])
+- Add icon translations to Tessie ([@piitaya] - [#111096])
+- Add Vital 100S & Vital 200S to VeSync sensors ([@jkossis] - [#111017])
+- Add translation to Tessie exceptions ([@Bre77] - [#106525])
+- Auto detect ZHA SMLIGHT SLZB-07 dongle ([@tl-sl] - [#110982])
+- Remove ZHA storage file cleanup logic ([@dmulcahey] - [#111088])
+- KNX: Group address validators use more detailed error messages ([@farmio] - [#110875])
+- Bump pyschlage to 2024.2.0 ([@dknowles2] - [#111079])
+- Fix race in otbr config flow ([@bdraco] - [#111044])
+- Migrate Bluetooth coordinators to use Debouncer async_schedule_call ([@bdraco] - [#111077])
+- Add sensor platform for husqvarna_automower ([@Thomas55555] - [#110410])
+- Remove reserved UpdateFailed exception in AsusWRT ([@ollo69] - [#110910])
+- Move backup/* WS commands to the backup integration ([@ludeeus] - [#110651])
+- Add myuplink switch platform ([@astrandb] - [#110810])
+- Bump microBeesPy to 0.3.2 ([@FedDam] - [#111067]) ([microBees docs])
+- Bump dawidd6/action-download-artifact from 3.1.1 to 3.1.2 (@dependabot - [#111120])
+- Add switch platform for husqvarna_automower ([@Thomas55555] - [#110139])
+- Disable AEMET legacy options ([@Noltari] - [#107795])
+- Replace dash with hard hyphen in myuplink entity names ([@astrandb] - [#111074])
+- Bump georss-qld-bushfire-alert-client to 0.7 ([@exxamalte] - [#111075])
+- Bump pydrawise to 2024.2.0 ([@dknowles2] - [#111080])
+- 2024.2.3 ([@frenck] - [#111133])
+- Revert "Move backup/* WS commands to the backup integration" ([@ludeeus] - [#111136])
+- Use async_update_reload_and_abort helper in discord ([@jpbede] - [#111104])
+- Handle media position in Bravia TV ([@Drafteed] - [#107080])
+- Remove filter of -1 in Shelly block based sensors ([@thecode] - [#111116])
+- Bump pyunifiprotect to 4.23.3 ([@AngellusMortis] - [#111059])
+- Cache formatting of mac addresses ([@bdraco] - [#111140])
+- bump bring-api to 0.4.1 ([@tr4nt0r] - [#111149])
+- Bump rova to 0.4.0 ([@rkruisselbrink] - [#111131])
+- Add number entities to change heat pump program temperatures in ViCare integration ([@CFenner] - [#109315])
+- Update AEMET-OpenData to v0.5.0 ([@Noltari] - [#111155])
+- Refactor Debouncer usage in august ([@bdraco] - [#111102])
+- Correct myUplink dash replacement ([@astrandb] - [#111143])
+- Bump `brother` library to version 4.0.0 ([@bieniu] - [#111157])
+- Simplify ESPHome entity removal process ([@bdraco] - [#111076])
+- Fix lingering timer in enphase_envoy test ([@bdraco] - [#111165])
+- Avoid creating tasks for dependencies already being setup ([@bdraco] - [#111034])
+- Add base class AndroidTVEntity to AndroidTV ([@ollo69] - [#105945])
+- Add metadata for UniFi Protect Media Source ([@AngellusMortis] - [#109389])
+- Update pylutron-caseta to 0.20.0 ([@mdonoughe] - [#111169])
+- Improve error reporting in tplink config flow ([@bdraco] - [#111166])
+- Rework how shade updates are processed in powerview ([@kingy444] - [#110928])
+- Fix stale sensors for Recollect Waste ([@mikeodr] - [#111174])
+- Bump plexapi to 4.15.10 ([@jjlawren] - [#111180])
+- Optimize mqtt device cleanup ([@jbouwh] - [#111170])
+- Fix race in openalpr_cloud tests ([@bdraco] - [#111185])
+- Convert hardware system status websocket api to a normal function ([@bdraco] - [#111172])
+- Bump pytraccar from 2.1.0 to 2.1.1 ([@ludeeus] - [#111188])
+- Update AEMET-OpenData to v0.5.1 ([@Noltari] - [#111191])
+- Bump github/codeql-action from 3.24.3 to 3.24.4 (@dependabot - [#111184])
+- Enable SIM114 ruff rule ([@joostlek] - [#111125])
+- Update coverage to 7.4.2 ([@cdce8p] - [#111194])
+- Update beautifulsoup4 to 4.12.3 ([@cdce8p] - [#111195])
+- Convert hassio websocket_apis that did not await to normal functions ([@bdraco] - [#111173])
+- Avoid creating tasks to register hassio panels ([@bdraco] - [#111206])
+- Migrate zha to use Debouncer.async_schedule_call ([@bdraco] - [#111103])
+- Add device counter entities to ZHA ([@dmulcahey] - [#111175])
+- Fix race in ESPHome entity test ([@bdraco] - [#111179])
+- Avoid yalexs_ble delaying startup when the lock is not advertising ([@bdraco] - [#111167])
+- YAML loader performance improvements ([@bdraco] - [#111199])
+- Avoid creating tasks for automation and script validation ([@bdraco] - [#111181])
+- Improve performance of filtering HomeKit entities ([@bdraco] - [#111201])
+- Refactor storage collections to reduce tasks during startup ([@bdraco] - [#111182])
+- Refactor keyed event trackers to reduce future refactoring risk ([@bdraco] - [#111150])
+- Avoid linear search to remove from the entity registry index ([@bdraco] - [#111138])
+- Bump python-hpilo to 4.4.3 ([@Nirostar] - [#110325])
+- Isolate systemmonitor from psutil shared state ([@gjohansson-ST] - [#111110])
+- Avoid rechecking for missing platforms in the loader ([@bdraco] - [#111204])
+- Avoid scheduling a task to add each entity when not using update_before_add ([@bdraco] - [#110951])
+- Code improvements for microbees component ([@rlippmann] - [#111208]) ([microBees docs])
+- Update pylint to 3.0.4 ([@cdce8p] - [#111229])
+- Avoid creating task per device when adding legacy device trackers ([@bdraco] - [#111220])
+- Bump ZHA dependencies ([@dmulcahey] - [#111227])
+- Fix bluetooth manager stop missing callback decorator ([@bdraco] - [#111232])
+- Improve tplink authenticate description wording ([@rytilahti] - [#111250])
+- Convert debouncer async_shutdown to be a normal function ([@bdraco] - [#111257])
+- Avoid reschedule churn in Storage.async_delay_save ([@bdraco] - [#111091])
+- Bump cryptography to 42.0.5 ([@bdraco] - [#111259])
+- Add debugging to coordinator output in System Monitor ([@gjohansson-ST] - [#111244])
+- Bump `pysnmp-lextudio` library to version 6.0.2 ([@bieniu] - [#111193])
+- Subscribe to Traccar Server events ([@ludeeus] - [#111262])
+- Fix bring! comment pep8 conformity ([@miaucl] - [#111276])
+- Update pipdeptree to 2.15.1 ([@cdce8p] - [#111269])
+- Update pytest-socket to 0.7.0 ([@cdce8p] - [#111270])
+- Update pytest-sugar to 1.0.0 ([@cdce8p] - [#111271])
+- Update coverage to 7.4.3 ([@cdce8p] - [#111267])
+- Bump habluetooth to 2.4.1 ([@bdraco] - [#111236])
+- Add Airzone Cloud Air Quality zone sensors ([@Noltari] - [#106571])
+- Add Airzone Cloud Air Quality zone binary sensors ([@Noltari] - [#106573])
+- Bump odp-amsterdam to v6.0.1 ([@klaasnicolaas] - [#111296])
+- Update pytest-timeout to 2.2.0 ([@cdce8p] - [#111272])
+- Bump yalexs-ble to 2.4.2 ([@bdraco] - [#111247])
+- Nuki add battery critical binary sensor ([@steffenrapp] - [#111285])
+- Add strings to the options attribute ([@dougiteixeira] - [#111302])
+- Bump motionblinds to 0.6.23 ([@starkillerOG] - [#111265])
+- Add light platform to microBees and change docstring in sensor ([@FedDam] - [#111093]) ([microBees docs])
+- Add diagnostics support for AEMET ([@Noltari] - [#111218])
+- Add diagnostics to System Monitor ([@gjohansson-ST] - [#111291])
+- Add ECO temp to Generic Thermostat ([@Minims] - [#110471])
+- Remove obsolete entities from System Monitor automatically ([@gjohansson-ST] - [#111231])
+- Fix `async_validate_location` arguments order ([@engrbm87] - [#111277])
+- Bump pydiscovergy to 3.0.0 ([@jpbede] - [#111305])
+- Unifi websocket manager ([@Kane610] - [#111041])
+- Fix workday blocking the event loop ([@bdraco] - [#111310])
+- Fix profiler.lru_stats always throwing an exception ([@bdraco] - [#111249])
+- Freeze time in aemet diagnostics test ([@jpbede] - [#111308])
+- Load translations at setup time if they were not loaded at bootstrap ([@bdraco] - [#110921])
+- Reduce Bluetooth setup time ([@bdraco] - [#111304])
+- Add myuplink number platform ([@astrandb] - [#111154])
+- Fix sql integration no recorder ([@gjohansson-ST] - [#111263])
+- Bump tplink-omada-client to 1.3.11 ([@MarkGodwin] - [#111273])
+- Add icons translations for airvisual ([@joostlek] - [#111318])
+- Bump ibeacon-ble to 1.2.0 ([@bdraco] - [#111315])
+- Update python-homewizard-energy to 4.3.1 ([@cdce8p] - [#111311])
+- Add icon translations to alarmdecoder ([@joostlek] - [#111319])
+- Add icon translations to amberelectric ([@joostlek] - [#111321])
+- Add icon translations to aftership ([@joostlek] - [#111317])
+- Add icon translations to Blue current ([@joostlek] - [#111347])
+- Add icon translations to Balboa ([@joostlek] - [#111343])
+- Add icon translations to apcupsd ([@joostlek] - [#111342])
+- Add icon translations to aosmith ([@joostlek] - [#111340])
+- Use device class icon in Anthem AV ([@joostlek] - [#111339])
+- Add icon translations to Android TV ([@joostlek] - [#111338])
+- Add icon translations to Blink ([@joostlek] - [#111346])
+- Add icon translations to Comelit ([@joostlek] - [#111358])
+- Add icon translations to DNS IP ([@joostlek] - [#111369])
+- Refactor deprecated workday argument ([@cdce8p] - [#111379])
+- Make matter import in google_assistant late to avoid blocking the event loop ([@bdraco] - [#111335])
+- Add icon translations to Nuki ([@steffenrapp] - [#111377])
+- Nuki add binary sensor for battery charging ([@steffenrapp] - [#111320])
+- Add icon translations to Cast ([@joostlek] - [#111352])
+- Add icon translations to Bring ([@joostlek] - [#111351])
+- Add icon translations to Cloud ([@joostlek] - [#111355])
+- Add icon translations to Coolmaster ([@joostlek] - [#111359])
+- Add icon translations to Cert expiry ([@joostlek] - [#111354])
+- Add icon translations to Daikin ([@joostlek] - [#111362])
+- Use device class icon in Crownstone ([@joostlek] - [#111361])
+- Use device class icon in cpu-speed ([@joostlek] - [#111360])
+- Add icon translations to Color extractor ([@joostlek] - [#111357])
+- Add icon translations to Cloudflare ([@joostlek] - [#111356])
+- Add icon translations to Bosch SHC ([@joostlek] - [#111350])
+- Add icon translations to Dremel 3D printer ([@joostlek] - [#111371])
+- Add icon translations to Doorbird ([@joostlek] - [#111370])
+- Add icon translations to Dexcom ([@joostlek] - [#111368])
+- Bump Geosphere to v0.3.6 ([@killer0071234] - [#111376])
+- Add icons translations for android_ip_webcam ([@joostlek] - [#111324])
+- Add icons translations for ambiclimate ([@joostlek] - [#111322])
+- Make hardware setup in hassio a normal function ([@bdraco] - [#111328])
+- Allow EM Setpoint in Honeywell ([@mkmer] - [#111332])
+- Adjustment post move to WS in Traccar Server ([@ludeeus] - [#111337])
+- Add icon translations to Deconz ([@joostlek] - [#111363])
+- Update aionotion to 2024.02.2 ([@cdce8p] - [#111388])
+- Update pylint to 3.1.0 ([@cdce8p] - [#111392])
+- Fix flakey utility meter test ([@bdraco] - [#111400])
+- Update pytest to 8.0.2 ([@cdce8p] - [#111399])
+- Add Nuki ID as serial number ([@steffenrapp] - [#111381])
+- Run pylint sorted platform check also when platform has type annotations ([@jpbede] - [#111407])
+- Fix Glances translation keys on CPU load, Memory use, Swap use ([@wittypluck] - [#111401])
+- Update ciso8601 to 2.3.1 ([@cdce8p] - [#111389])
+- Bump homematicip to 1.1.0 ([@hahn-th] - [#111385])
+- Bump bluetooth-adapters to 0.18.0 ([@bdraco] - [#111316])
+- Update bcrypt to 4.1.2 ([@cdce8p] - [#111283])
+- Enable CONF_STATION_UPDATES by default on AEMET ([@Noltari] - [#111214])
+- Add icon translations to EasyEnergy ([@joostlek] - [#111413])
+- Add icon translations to Ecoforest ([@joostlek] - [#111417])
+- Add icon translations to Electric Kiwi ([@joostlek] - [#111422])
+- Add icon translations to edl21 ([@joostlek] - [#111420])
+- Add icon translations to Ecobee ([@joostlek] - [#111416])
+- Add icon translations to Dynalite ([@joostlek] - [#111412])
+- Fix KNX cover schema for voluptuous 0.14.2 ([@farmio] - [#111427])
+- Bump tesla-fleet-api to 0.4.6 in Teslemetry ([@Bre77] - [#111127])
+- Bump aioesphomeapi to 22.1.0 ([@dougiteixeira] - [#111435])
+- Update freezegun to 1.4.0 ([@cdce8p] - [#111268])
+- Fix uneeded state update in Idasen Desk sensor ([@abmantis] - [#111433])
+- Esphome text sensor device class ([@dougiteixeira] - [#111057])
+- Add sensors for energy storage system to ViCare integration ([@CFenner] - [#106600])
+- Add @astrandb as myuplink codeowner ([@astrandb] - [#111449])
+- Add TechnoVE auto charge switch ([@Moustachauve] - [#109093])
+- Add validation to water_heater set_operation mode at entity component ([@jbouwh] - [#111168])
+- Add Motionblinds virtual integration Acomax ([@starkillerOG] - [#111458])
+- Improve handling mqtt command template exceptions ([@jbouwh] - [#110499])
+- Add Motionblinds virtual integration Krispol ([@starkillerOG] - [#111456])
+- Add Motionblinds virtual integration Madeco ([@starkillerOG] - [#111455])
+- Improve logging of google_assistant messages ([@emontnemery] - [#110637])
+- Add @tronix117 as overkiz codeowner ([@Tronix117] - [#111464])
+- Bump vallox-websocket-api to 5.1.0 ([@yozik04] - [#111471])
+- Bump Python-roborock to 0.39.2 ([@Lash-L] - [#111479])
+- Add webmin integration ([@autinerd] - [#106976])
+- Fix race in dlna_dmr test ([@bdraco] - [#111428])
+- Bump myuplink lib to 0.5.0 ([@astrandb] - [#111447])
+- Update idasen-ha to v2.5.1 to fix regression ([@abmantis] - [#111439])
+- 2024.2.4 ([@balloob] - [#111441])
+- Switch nmap_tracker to use aiooui ([@bdraco] - [#111415])
+- Add support for eager tasks ([@bdraco] - [#111425])
+- Remove `@bind_hass` from async_active_zone and make callback function ([@jpbede] - [#111488])
+- Use discovery flow helper for hardware integrations ([@bdraco] - [#111437])
+- Update xknx to 2.12.1 and xknxproject to 3.7.0 ([@farmio] - [#111460])
+- Add `single_config_entry` manifest option ([@jpbede] - [#109505])
+- Image entity media source ([@OnFreund] - [#104743])
+- Update rfxtrx library to handle connection retries ([@elupus] - [#111366])
+- Remove JuiceNet integration ([@emontnemery] - [#111477])
+- Add hvac_action to flexit_bacnet climate entity ([@lellky] - [#110498])
+- Bump pyMicrobot to 0.0.17 ([@spycle] - [#111496])
+- Reolink trigger ReAuth when credentials invalid during update ([@starkillerOG] - [#111492])
+- Add support for importing integrations in the executor ([@bdraco] - [#111336])
+- Improve code comment for Chrome frame bug in Camera ([@OnFreund] - [#111504])
+- Fix dict changing size during iteration in deconz ([@bdraco] - [#111523])
+- Add support to Lutron lights for color and temperature control ([@eclair4151] - [#109019])
+- Import radio_browser in the executor to avoid blocking the event loop ([@bdraco] - [#111519])
+- Import influxdb in the executor to avoid blocking the event loop ([@bdraco] - [#111520])
+- WeatherFlow Forecast (REST API) ([@jeeftor] - [#106615])
+- Import mqtt in the executor to avoid blocking the event loop ([@bdraco] - [#111521])
+- Add icon translations to Flo ([@joostlek] - [#111542])
+- Bump aioshelly to 8.0.2 ([@thecode] - [#111414])
+- Avoid call to `hass.helpers` in permobile ([@jpbede] - [#111541])
+- Add Tado add meter readings service ([@niro1987] - [#111552])
+- Add icon translations to Fritz ([@joostlek] - [#111547])
+- Fix text in docstrings and debug logging for loader ([@bdraco] - [#111560])
+- Add speech-to-text cooldown for local wake word ([@synesthesiam] - [#108806])
+- Use an eager task to update multiple entities ([@bdraco] - [#111556])
+- Create tasks eagerly in the discovery flow helper ([@bdraco] - [#111557])
+- Reduce latency to set up websocket forwarding in hassio ([@bdraco] - [#111558])
+- Reduce latency to connect websocket writer ([@bdraco] - [#111559])
+- Convert person start to be a callback function ([@bdraco] - [#111571])
+- Start the debouncer task eagerly ([@bdraco] - [#111569])
+- Start automations with eager tasks ([@bdraco] - [#111568])
+- Bump yalexs to 1.11.4 ([@bdraco] - [#111567])
+- Make unifiprotect fallback update an eager task ([@bdraco] - [#111580])
+- Use eager_start for sonos ping background task ([@bdraco] - [#111578])
+- Refactor rainmachine to increase chance of reusing the connection ([@bdraco] - [#111573])
+- Migrate gather_with_limited_concurrency to use create_eager_task ([@bdraco] - [#111565])
+- Use eager start for august subscriber refreshes ([@bdraco] - [#111581])
+- Use eager task creation for entity platform polling ([@bdraco] - [#111575])
+- Import zeroconf in the executor to avoid blocking the event loop ([@bdraco] - [#111591])
+- Import dhcp in the executor to avoid blocking the event loop ([@bdraco] - [#111589])
+- Import samsungtv in the executor to avoid blocking the event loop ([@bdraco] - [#111588])
+- Import wemo in the executor to avoid blocking the event loop ([@bdraco] - [#111587])
+- Import thread in the executor to avoid blocking the event loop ([@bdraco] - [#111586])
+- ESPHome: Pass through wake_word_phrase from on-device microWakeWord ([@jesserockz] - [#111585])
+- Import spotify in the executor to avoid blocking the event loop ([@bdraco] - [#111594])
+- Import august in the executor to avoid blocking the event loop ([@bdraco] - [#111595])
+- Use an eager task in the update coordinator scheduled refresh ([@bdraco] - [#111570])
+- Create component setup tasks eagerly in bootstrap ([@bdraco] - [#111511])
+- Import usb in the executor to avoid blocking the event loop ([@bdraco] - [#111592])
+- Fully fix race in removing entities ([@bdraco] - [#111499])
+- Load config entry platforms eagerly ([@bdraco] - [#111498])
+- Create bootstrap tasks eagerly ([@bdraco] - [#111497])
+- Remove zeroconf from ssdp after deps ([@bdraco] - [#111326])
+- Reduce bootstrap code ([@bdraco] - [#111450])
+- Import ssdp in the executor to avoid blocking the event loop ([@bdraco] - [#111593])
+- Update pyipp to 0.14.5 ([@ctalkington] - [#111590])
+- Refactor eafm to avoid creating entities in the coordinator update ([@bdraco] - [#111601])
+- Bump deebot-client to 6.0.2 ([@edenhaus] - [#111507])
+- Make core tests that should run in the event loop coros ([@bdraco] - [#111605])
+- Add icon translations to Geocaching ([@joostlek] - [#111613])
+- Add icon translations to Garages Amsterdam ([@joostlek] - [#111610])
+- Deprecate Logi Circle integration ([@emontnemery] - [#111491])
+- Bump actions/download-artifact from 4.1.2 to 4.1.3 (@dependabot - [#111602])
+- Update python-slugify to 8.0.4 ([@cdce8p] - [#111284])
+- Update typing-extensions to 4.10.0 ([@cdce8p] - [#111538])
+- Add device list to ZHA config entry diagnostics ([@dmulcahey] - [#111549])
+- Import zwave_js in the executor to avoid blocking the event loop ([@bdraco] - [#111622])
+- Add statistics keep_last_sample option ([@brenank] - [#88655])
+- Deprecate the Ambiclimate integration ([@emontnemery] - [#111627])
+- Deprecate mailbox platform ([@edenhaus] - [#110930])
+- Extend ZHA thermostat local temperature calibration range for Sonoff TRVZB ([@TheNoim] - [#109691])
+- Import xbox in the executor to avoid blocking the event loop ([@bdraco] - [#111625])
+- Import airvisual in the executor to avoid blocking the event loop ([@bdraco] - [#111624])
+- Import shelly in the executor to avoid blocking the event loop ([@bdraco] - [#111623])
+- Add icon translations to Fully kiosk ([@joostlek] - [#111609])
+- Use an eager task to setup entity platforms ([@bdraco] - [#111574])
+- Ensure all data is set in seventeentrack before adding entities ([@bdraco] - [#111603])
+- Avoid call to `hass.helpers.store` in LabelRegistry ([@jpbede] - [#111555])
+- Always allow ignore and unignore flows for single config entry integrations ([@emontnemery] - [#111631])
+- Wolflink connection pooling ([@janrothkegel] - [#111483])
+- Fix rfxtrx flaky reconnect test ([@MartinHjelmare] - [#111635])
+- Avoid race condition with UDP voice server starting in ESPHome ([@synesthesiam] - [#111644])
+- Move backup/* WS commands to the backup integration ([@ludeeus] - [#111636])
+- Import bluetooth in the executor to avoid blocking the event loop ([@bdraco] - [#111596])
+- Update list of integrations known to violate color mode rules ([@emontnemery] - [#111647])
+- Break out UniFi get_unifi_api function ([@Kane610] - [#111323])
+- Return FlowResultType.ABORT when violating single_config_entry ([@emontnemery] - [#111637])
+- 2024.2.5 ([@balloob] - [#111648])
+- Add button platform to microBees ([@FedDam] - [#111141]) ([microBees docs])
+- Bump aiounifi to v72 ([@Kane610] - [#111649])
+- Use eager task creation to add entities to entity platform ([@bdraco] - [#111553])
+- Bump pyenphase to 1.19.1 ([@catsmanac] - [#111653])
+- Bump aiohomekit to 3.1.5 ([@bdraco] - [#111663])
+- Fix Switcher test update CI failure ([@thecode] - [#111667])
+- Bad Request from supervisor should be error ([@mdegat01] - [#111162])
+- Add ODROID-M1S as a supported OS hardware board ([@sairon] - [#111022])
+- Add icon translations to Goodwe ([@joostlek] - [#111655])
+- Add icon translations to Google Sheets ([@joostlek] - [#111661])
+- Add icon translations to Google Mail ([@joostlek] - [#111660])
+- Add icon translations to Google Generative AI Conversation ([@joostlek] - [#111659])
+- Add icon translations to Google Assistant ([@joostlek] - [#111657])
+- Add Grid import export to Enphase Envoy ([@catsmanac] - [#110884])
+- Add icon translations to Goalzero ([@joostlek] - [#111630])
+- Use eager_start for shelly task creation ([@bdraco] - [#111671])
+- Remove `@bind_hass` from `camera` functions ([@jpbede] - [#111494])
+- Cleanup BLE-only controls when migrating HomeKit BLE device to Thread ([@Jc2k] - [#110334])
+- Avoid call to `hass.helpers.store` in FloorRegistry ([@jpbede] - [#111554])
+- Use eager_start for background service call tasks ([@bdraco] - [#111620])
+- Add icon translations to Energyzero ([@joostlek] - [#111513])
+- Migrate setup to use eager tasks ([@bdraco] - [#111619])
+- Small speed up to Bluetooth setup ([@bdraco] - [#111677])
+- Use eager_start for homekit task creation ([@bdraco] - [#111675])
+- Await service calls in emulated_hue instead of making them blocking ([@bdraco] - [#111674])
+- Update httpx to 0.27.0 and httpcore to 1.0.4 ([@bdraco] - [#111681])
+- Bump aioshelly to 8.1.1 ([@chemelli74] - [#111678])
+- Drop `@bind_hass` use from hassio component ([@jpbede] - [#111522])
+- Add icon translations to Google ([@joostlek] - [#111656])
+- Add icon translations to Foscam ([@joostlek] - [#111546])
+- Bump pysignalclirestapi to 0.3.23 ([@bbernhard] - [#111501])
+- Add icon translations to Generic camera ([@joostlek] - [#111612])
+- Reduce task overhead in homekit_controller ([@bdraco] - [#111670])
+- Reduce hassio setup time ([@bdraco] - [#111686])
+- Reduce latency in storage by making the tasks eager ([@bdraco] - [#111500])
+- Add icon translations to Flume ([@joostlek] - [#111543])
+- Avoid tracking tasks that finish right away ([@bdraco] - [#111690])
+- Import xiaomi_ble in the executor to avoid blocking the event loop ([@bdraco] - [#111693])
+- Make homekit_controller platform load tasks eagerly ([@bdraco] - [#111701])
+- Add icon translations to Epson ([@joostlek] - [#111528])
+- Add icon translations to Glances ([@joostlek] - [#111615])
+- Add icon translations to GDACS ([@joostlek] - [#111611])
+- Add icon translations to FiveM ([@joostlek] - [#111539])
+- Add icon translations to Environment Canada ([@joostlek] - [#111527])
+- Add icon translations to Escea ([@joostlek] - [#111529])
+- Add icon translations to Fireservicerota ([@joostlek] - [#111537])
+- Add icon translations to Fastdotcom ([@joostlek] - [#111534])
+- Add icon translations to Eufylife BLE ([@joostlek] - [#111530])
+- Add icon translations to FAA delays ([@joostlek] - [#111533])
+- Add icon translations to Google Assistant SDK ([@joostlek] - [#111658])
+- Avoid creating system monitor disk sensors for non-dirs ([@bdraco] - [#111695])
+- Add icon translations to Filesize ([@joostlek] - [#111536])
+- Revert "Remove `@bind_hass` from `camera` functions" ([@jpbede] - [#111703])
+- Revert "Remove `@bind_hass` from async_active_zone and make callback function" ([@jpbede] - [#111704])
+- Revert "Drop `@bind_hass` use from hassio component (#111522)" ([@jpbede] - [#111705])
+- Add icon translations to Denon avr ([@joostlek] - [#111364])
+- Add icon translations to Devolo home network ([@joostlek] - [#111367])
+- Tado code quality improvements ([@erwindouna] - [#107678])
+- Add icon translations to Gree ([@joostlek] - [#111662])
+- Add icon translations to Fronius ([@joostlek] - [#111608])
+- Bump blebox_uniapi to 2.2.1 ([@swistakm] - [#108918])
+- Import mobile_app in the executor to avoid blocking the event loop ([@bdraco] - [#111692])
+- Use eager tasks in a few more places in bootstrap ([@bdraco] - [#111697])
+- Make entity component platform setup tasks eager ([@bdraco] - [#111698])
+- Use eager tasks when updating entity state after service calls ([@bdraco] - [#111702])
+- Add icon translations to DSMR ([@joostlek] - [#111411])
+- Add icon translations to DROP connect ([@joostlek] - [#111373])
+- Add icon translations to BMW ([@joostlek] - [#111348])
+- Add icon translations to Guardian ([@joostlek] - [#111712])
+- Add Comelit humidifier/dehumidifier ([@chemelli74] - [#111203])
+- Add entities for Balboa Spa pumps ([@snoack] - [#111245])
+- Add icon translations to HVV departures ([@joostlek] - [#111728])
+- Adapt Axis integration to library refactoring ([@Kane610] - [#110898])
+- Bump github/codeql-action from 3.24.4 to 3.24.5 (@dependabot - [#111448])
+- Import tplink in the executor to avoid blocking the event loop ([@bdraco] - [#111691])
+- Import nexia in the executor to avoid blocking the event loop ([@bdraco] - [#111694])
+- Allow translating device names ([@emontnemery] - [#110711])
+- Add entities for Balboa Spa lights ([@snoack] - [#111252])
+- Add icon translations to Homematic IP Cloud ([@joostlek] - [#111723])
+- Add icon translations to Homekit Controller ([@joostlek] - [#111720])
+- Add icon translations to Home connect ([@joostlek] - [#111718])
+- Add icon translations to Hive ([@joostlek] - [#111717])
+- Add icon translations to Heos ([@joostlek] - [#111716])
+- Add icon translations to Hassio ([@joostlek] - [#111715])
+- Add icon translations to Harmony ([@joostlek] - [#111714])
+- Add icon translations to Homekit ([@joostlek] - [#111719])
+- Add ecovacs lawn mover ([@Augar] - [#111673])
+- Add icon translations to Huawei LTE ([@joostlek] - [#111724])
+- Add icon translations to Huisbaasje ([@joostlek] - [#111726])
+- Remove gather for loading generated files in zeroconf ([@bdraco] - [#111699])
+- Use eager tasks in ssdp ([@bdraco] - [#111696])
+- Update frontend to 20240228.0 ([@bramkragten] - [#111736])
+- Cleanup swiss_public_transport error logging ([@miaucl] - [#111741])
+- Import plex in the executor to avoid blocking the event loop ([@bdraco] - [#111743])
+- Eagerly unload config entries in tests ([@bdraco] - [#111707])
+- Import powerwall in the executor to avoid blocking the event loop ([@bdraco] - [#111749])
+- Bump aioraven to 0.5.1 ([@cottsay] - [#111600])
+- Use new zigpy OTA providers for ZHA ([@puddly] - [#111159])
+- Add Ecovacs goat switch entities ([@Augar] - [#111751])
+- Add overkiz support for Atlantic Shogun ZoneControl 2.0 (AtlanticPassAPCHeatingAndCoolingZone) ([@Tronix117] - [#110510])
+- Fix calendar trigger to survive config entry reloads ([@allenporter] - [#111334])
+- Read min/max number of showers from state for DomesticHotWaterProduction in Overkiz integration ([@yanuino] - [#111535])
+- Improve ZHA group color modes ([@puddly] - [#111669])
+- Pre-import api, config, and lovelace in bootstrap to avoid loading them at runtime ([@bdraco] - [#111752])
+- Move DATA_LOGGING constant to homeassistant.const ([@bdraco] - [#111763])
+- Bump Python Matter Server to 5.7.0 ([@marcelveldt] - [#111765])
+- Import isy994 in the executor to avoid blocking the event loop ([@bdraco] - [#111766])
+- Import cryptography early since importing openssl is not thread-safe ([@bdraco] - [#111768])
+- Bump aiohue to 4.7.1 ([@marcelveldt] - [#111770])
+- Import blink in the executor to avoid blocking the event loop ([@bdraco] - [#111772])
+- Import coinbase in the executor to avoid blocking the event loop ([@bdraco] - [#111774])
+- Import androidtv_remote in the executor to avoid blocking the event loop ([@bdraco] - [#111776])
+- Import opower in the executor to avoid blocking the event loop ([@bdraco] - [#111778])
+- Import backup in the executor to avoid blocking the event loop ([@bdraco] - [#111781])
+- Bump securetar to 2024.2.1 ([@bdraco] - [#111782])
+- Fix time trigger tests with leap year ([@bdraco] - [#111785])
+- Import analytics_insights in the executor to avoid blocking the event loop ([@bdraco] - [#111786])
+- Fix flux_led blocking startup by waiting for discovery ([@bdraco] - [#111787])
+- Fix tplink blocking startup by waiting for discovery ([@bdraco] - [#111788])
+- Fix steamist blocking startup by waiting for discovery ([@bdraco] - [#111789])
+- Import discord in the executor to avoid blocking the event loop ([@bdraco] - [#111790])
+- Bump intents and add sentence tests ([@synesthesiam] - [#111791])
+- get_matter_device_info: Test the Matter config entry is set up ([@balloob] - [#111792])
+- Add support for ZHA entities exposed by Zigpy quirks ([@dmulcahey] - [#111176])
+- Deprecate `hass.components` and log warning if used inside custom component ([@jpbede] - [#111508])
+- Fix race in config entry setup again ([@bdraco] - [#111800])
+- Include filename in exception when loading a json file fails ([@bdraco] - [#111802])
+- Import cryptography OpenSSL backend ([@balloob] - [#111840])
+- Support HitachiAirToAirHeatPump (ovp:HLinkMainController) in Overkiz integration ([@dotvav] - [#102159])
+- Update frontend to 20240228.1 ([@bramkragten] - [#111859])
+- Move HassSetPosition to homeassistant domain ([@synesthesiam] - [#111867])
+- Fallback to event loop import on deadlock ([@bdraco] - [#111868])
+- Use correct service name with Wyoming satellite + local wake word detection ([@synesthesiam] - [#111870])
+- Fix circular imports in core integrations ([@bdraco] - [#111875])
+- Add missing unit of measurement for tolerance option in proximity ([@mib1185] - [#111876])
+- Update aioairzone to v0.7.5 ([@Noltari] - [#111879])
+- Bump habluetooth to 2.4.2 ([@bdraco] - [#111885])
+- Deconz fix gradient color mode ([@Kane610] - [#111890])
+- Fix unsupported device type in deCONZ integration ([@Kane610] - [#111892])
+- Limit executor imports to a single thread ([@bdraco] - [#111898])
+- Change `hass.components` removal version in log to 2024.9 ([@jpbede] - [#111903])
+- Bump pyOverkiz to 1.13.8 ([@iMicknl] - [#111930])
+- Update frontend to 20240301.0 ([@piitaya] - [#111961])
+- Update reporting for media_source.async_resolve_media ([@balloob] - [#111969])
+- Bump Zigpy to 0.63.3 ([@dmulcahey] - [#112002])
+- Fix minor language issues in strings.json ([@chelming] - [#112006])
+- Update aioairzone-cloud to v0.4.5 ([@Noltari] - [#112034])
+- Use description key instead of name for Tibber RT unique ID ([@ludeeus] - [#112035])
+- Fix config schema for velux ([@ludeeus] - [#112037])
+- Bump weatherflow4py to v0.1.12 ([@jeeftor] - [#112040])
+- Import anonymize_data in unifiprotect init to avoid it being imported in the event loop ([@bdraco] - [#112052])
+- Bump unifi-discovery to 1.1.8 ([@bdraco] - [#112056])
+- Bump bthome-ble to 3.6.0 ([@thecode] - [#112060])
+- Add device class for permobil record distance sensor ([@IsakNyberg] - [#112062])
+- Only load camera prefs once ([@balloob] - [#112064])
+- Bump pydrawise to 2024.3.0 ([@dknowles2] - [#112066])
+- Fix setup failure due to temporary DNS issue in Minecraft Server ([@elmurato] - [#112068])
+- Ensure all homekit_controller controllers are imported in advance ([@bdraco] - [#112079])
+- Fix bootstrap being fetched three times during unifiprotect startup ([@bdraco] - [#112082])
+- Fix executor being overloaded in caldav ([@bdraco] - [#112084])
+- Avoid expensive inspect calls in config validators ([@bdraco] - [#112085])
+- Handle exception in ViCare integration ([@CFenner] - [#111128])
+- Bump bring-api to 0.5.4 ([@tr4nt0r] - [#111654])
+- Bump Zigpy to 0.63.4 ([@dmulcahey] - [#112117])
+- Bump reolink-aio to 0.8.9 ([@starkillerOG] - [#112124])
+- Ignore failing gas stations in Tankerkoening ([@mib1185] - [#112125])
+- Fix ZHA groups page ([@dmulcahey] - [#112140])
+- Limit rainbird aiohttp client session to a single connection ([@allenporter] - [#112146])
+- Add rainbird request debouncer and immediately update entity switch state ([@allenporter] - [#112152])
+- Update frontend to 20240304.0 ([@piitaya] - [#112263])
+- Fix deCONZ light entity might not report a supported color mode ([@Kane610] - [#112116])
+- Bump python_roborock to 0.40.0 ([@Lash-L] - [#112238])
+- Update aioairzone to v0.7.6 ([@Noltari] - [#112264])
+- Bump bring-api to 0.5.5 ([@tr4nt0r] - [#112266])
+- Allow duplicate modbus addresses on different devices ([@janiversen] - [#112434])
+- Do not use list comprehension in async_add_entities in Unifi ([@Kane610] - [#112435])
+- Fix handling missing parameter by bumping axis library to v50 ([@Kane610] - [#112437])
+- Bump holidays to 0.44 ([@gjohansson-ST] - [#112442])
+- Update xknx to 2.12.2 - Fix thread leak on unsuccessful connections ([@farmio] - [#112450])
+- Avoid errors when there is no internet connection in Husqvarna Automower ([@Thomas55555] - [#111101])
+- Add custom integration block list ([@emontnemery] - [#112481])
+- Update frontend to 20240306.0 ([@bramkragten] - [#112492])
+- Bump pytedee_async to 0.2.15 ([@zweckj] - [#112495])
+- Allow start_time >= 1.1.7 ([@emontnemery] - [#112500])
+
+## Release 2024.3.1 - March 14
+
+- Fix optional Jellyfin RunTimeTicks ([@j-stienstra] - [#108254])
+- Add auto fan mode icon ([@mattmccormack] - [#110185])
+- Ignore AussieBroadband services that don't support usage information ([@FieldofClay] - [#110253])
+- Use friendly name for camera media source ([@OnFreund] - [#110882])
+- Improve discovering upnp/igd device by always using the SSDP-discovery for the Unique Device Name ([@StevenLooman] - [#111487])
+- Update the numato-gpio dependency of the numato integration to v0.12.0 ([@clssn] - [#112272])
+- Disable updating ZHA coordinator path from discovery info ([@puddly] - [#112415])
+- Bump intents to 2024.3.6 ([@synesthesiam] - [#112515])
+- Weatherflow_cloud backing lib bump ([@jeeftor] - [#112262])
+- Bump weatherflow4py to 0.1.14 ([@jeeftor] - [#112554])
+- Restore the juicenet integration ([@emontnemery] - [#112578])
+- Fix incorrect filtering of unsupported locales in bring-api ([@tr4nt0r] - [#112589])
+- Include pytedee_async logger in tedee integration ([@zweckj] - [#112590])
+- Issue warning modbus configuration when modbus configuration is empty ([@janiversen] - [#112618])
+- modbus scan_interval: 0 is correct configuration ([@janiversen] - [#112619])
+- Update frontend to 20240307.0 ([@bramkragten] - [#112620])
+- Make hass-nabucasa a core requirement ([@emontnemery] - [#112623])
+- Bump aioautomower to 2024.3.0 ([@Thomas55555] - [#112627])
+- Bump pymodbus to v3.6.5 ([@janiversen] - [#112629])
+- Bump axis to v52 ([@Kane610] - [#112632])
+- Update Loqed helper for more logging ([@mikewoudenberg] - [#112646])
+- Bump weatherflow4py to 0.1.17 ([@jeeftor] - [#112661])
+- Bump `aionotion` to 2024.03.0 ([@bachya] - [#112675])
+- Make sure Notion saves new refresh token upon startup ([@bachya] - [#112676])
+- Fix tado climate service ([@alinbalutoiu] - [#112686])
+- Downgrade `pysnmp-lextudio` to version `5.0.34` ([@bieniu] - [#112696])
+- Allow duplicate names in different modbus entities ([@janiversen] - [#112701])
+- Guard against db corruption when renaming entities ([@bdraco] - [#112718])
+- Fix local calendar handling of empty recurrence ids ([@allenporter] - [#112745])
+- Bump pyenphase to 1.19.2 ([@catsmanac] - [#112747])
+- Bump bthome-ble to 3.7.0 ([@thecode] - [#112783])
+- Upgrade `pysnmp-lextudio` to version `6.0.9` ([@lextm] - [#112795])
+- Bump openwrt-luci-rpc version to 1.1.17 ([@mrchi] - [#112796])
+- Fix google_asssistant sensor state reporting ([@jbouwh] - [#112838])
+- Fix MJPEG fallback when still image URL is missing with basic auth ([@bdraco] - [#112861])
+- Bump boschshcpy to 0.2.82 ([@FlyingFeng2021] - [#112890])
+- Add missing translation placeholder in Hydrawise ([@dknowles2] - [#113007])
+- Bump bthome-ble to 3.8.0 ([@Ernst79] - [#113008])
+- Bump axis to v53 ([@Kane610] - [#113019])
+- Fix availability for GIOS index sensors ([@bieniu] - [#113021])
+- Bump ical to 7.0.1 and always use home assistant timezone for local todo dtstart ([@allenporter] - [#113034])
+- Fix some handle leaks in rainforest_raven ([@cottsay] - [#113035])
+- Fix hvac_mode for viessmann devices with heatingCooling mode ([@folke] - [#113054])
+- components/gardena_bluetooth: Improve avaliability reliability ([@alistair23] - [#113056])
+- Fix for controlling Hue switch entities ([@marcelveldt] - [#113064])
+- Bump rova to 0.4.1 ([@LukasdeBoer] - [#113066])
+- Fix colormode attribute on grouped Hue light ([@marcelveldt] - [#113071])
+- Bump axis to v54 ([@Kane610] - [#113091])
+- Bump aiodhcpwatcher to 0.8.1 ([@bdraco] - [#113096])
+- bump pytedee_async to 0.2.16 ([@zweckj] - [#113135])
+- Add message from Bad Request errors to HassioAPIError ([@agners] - [#113144])
+- Bump intents to 2023.3.12 ([@synesthesiam] - [#113160])
+- Bump airthings_ble to 0.7.1 ([@LaStrada] - [#113172])
+- Bump rokuecp to 0.19.2 ([@ctalkington] - [#113198])
+- Bump `brother` library to version `4.0.2` ([@bieniu] - [#113235])
+- Hotfix import error in ZHA for 2024.3.1 patch release ([@frenck] - [#113250])
+- Fix Twitch auth token refresh ([@jonnybergdahl] - [#112833])
+- Fix failing google diagnostics test ([@bdraco] - [#113095])
+- Add diagnostics for IPP ([@ctalkington] - [#113205])
+- Apply suggestion failures fail supervisor repair ([@mdegat01] - [#113372])
+- Supervisor issues update retries on failure ([@mdegat01] - [#113373])
+- Add loggers to Husqvarna Automower ([@Thomas55555] - [#113381])
+- Bump pyipp to 0.15.0 ([@ctalkington] - [#113204])
+
+[#108254]: https://github.com/home-assistant/core/pull/108254
+[#110185]: https://github.com/home-assistant/core/pull/110185
+[#110253]: https://github.com/home-assistant/core/pull/110253
+[#110882]: https://github.com/home-assistant/core/pull/110882
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111487]: https://github.com/home-assistant/core/pull/111487
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#112262]: https://github.com/home-assistant/core/pull/112262
+[#112272]: https://github.com/home-assistant/core/pull/112272
+[#112415]: https://github.com/home-assistant/core/pull/112415
+[#112515]: https://github.com/home-assistant/core/pull/112515
+[#112516]: https://github.com/home-assistant/core/pull/112516
+[#112554]: https://github.com/home-assistant/core/pull/112554
+[#112578]: https://github.com/home-assistant/core/pull/112578
+[#112589]: https://github.com/home-assistant/core/pull/112589
+[#112590]: https://github.com/home-assistant/core/pull/112590
+[#112618]: https://github.com/home-assistant/core/pull/112618
+[#112619]: https://github.com/home-assistant/core/pull/112619
+[#112620]: https://github.com/home-assistant/core/pull/112620
+[#112623]: https://github.com/home-assistant/core/pull/112623
+[#112627]: https://github.com/home-assistant/core/pull/112627
+[#112629]: https://github.com/home-assistant/core/pull/112629
+[#112632]: https://github.com/home-assistant/core/pull/112632
+[#112646]: https://github.com/home-assistant/core/pull/112646
+[#112661]: https://github.com/home-assistant/core/pull/112661
+[#112675]: https://github.com/home-assistant/core/pull/112675
+[#112676]: https://github.com/home-assistant/core/pull/112676
+[#112686]: https://github.com/home-assistant/core/pull/112686
+[#112696]: https://github.com/home-assistant/core/pull/112696
+[#112701]: https://github.com/home-assistant/core/pull/112701
+[#112718]: https://github.com/home-assistant/core/pull/112718
+[#112745]: https://github.com/home-assistant/core/pull/112745
+[#112747]: https://github.com/home-assistant/core/pull/112747
+[#112783]: https://github.com/home-assistant/core/pull/112783
+[#112795]: https://github.com/home-assistant/core/pull/112795
+[#112796]: https://github.com/home-assistant/core/pull/112796
+[#112833]: https://github.com/home-assistant/core/pull/112833
+[#112838]: https://github.com/home-assistant/core/pull/112838
+[#112861]: https://github.com/home-assistant/core/pull/112861
+[#112890]: https://github.com/home-assistant/core/pull/112890
+[#113007]: https://github.com/home-assistant/core/pull/113007
+[#113008]: https://github.com/home-assistant/core/pull/113008
+[#113019]: https://github.com/home-assistant/core/pull/113019
+[#113021]: https://github.com/home-assistant/core/pull/113021
+[#113034]: https://github.com/home-assistant/core/pull/113034
+[#113035]: https://github.com/home-assistant/core/pull/113035
+[#113054]: https://github.com/home-assistant/core/pull/113054
+[#113056]: https://github.com/home-assistant/core/pull/113056
+[#113064]: https://github.com/home-assistant/core/pull/113064
+[#113066]: https://github.com/home-assistant/core/pull/113066
+[#113071]: https://github.com/home-assistant/core/pull/113071
+[#113091]: https://github.com/home-assistant/core/pull/113091
+[#113095]: https://github.com/home-assistant/core/pull/113095
+[#113096]: https://github.com/home-assistant/core/pull/113096
+[#113135]: https://github.com/home-assistant/core/pull/113135
+[#113144]: https://github.com/home-assistant/core/pull/113144
+[#113160]: https://github.com/home-assistant/core/pull/113160
+[#113172]: https://github.com/home-assistant/core/pull/113172
+[#113198]: https://github.com/home-assistant/core/pull/113198
+[#113204]: https://github.com/home-assistant/core/pull/113204
+[#113205]: https://github.com/home-assistant/core/pull/113205
+[#113235]: https://github.com/home-assistant/core/pull/113235
+[#113250]: https://github.com/home-assistant/core/pull/113250
+[#113372]: https://github.com/home-assistant/core/pull/113372
+[#113373]: https://github.com/home-assistant/core/pull/113373
+[#113381]: https://github.com/home-assistant/core/pull/113381
+[@Ernst79]: https://github.com/Ernst79
+[@FieldofClay]: https://github.com/FieldofClay
+[@FlyingFeng2021]: https://github.com/FlyingFeng2021
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@LukasdeBoer]: https://github.com/LukasdeBoer
+[@OnFreund]: https://github.com/OnFreund
+[@StevenLooman]: https://github.com/StevenLooman
+[@Thomas55555]: https://github.com/Thomas55555
+[@agners]: https://github.com/agners
+[@alinbalutoiu]: https://github.com/alinbalutoiu
+[@alistair23]: https://github.com/alistair23
+[@allenporter]: https://github.com/allenporter
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@clssn]: https://github.com/clssn
+[@cottsay]: https://github.com/cottsay
+[@ctalkington]: https://github.com/ctalkington
+[@dknowles2]: https://github.com/dknowles2
+[@emontnemery]: https://github.com/emontnemery
+[@folke]: https://github.com/folke
+[@frenck]: https://github.com/frenck
+[@j-stienstra]: https://github.com/j-stienstra
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jeeftor]: https://github.com/jeeftor
+[@jonnybergdahl]: https://github.com/jonnybergdahl
+[@lextm]: https://github.com/lextm
+[@marcelveldt]: https://github.com/marcelveldt
+[@mattmccormack]: https://github.com/mattmccormack
+[@mdegat01]: https://github.com/mdegat01
+[@mikewoudenberg]: https://github.com/mikewoudenberg
+[@mrchi]: https://github.com/mrchi
+[@puddly]: https://github.com/puddly
+[@synesthesiam]: https://github.com/synesthesiam
+[@thecode]: https://github.com/thecode
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@zweckj]: https://github.com/zweckj
+
+## Release 2024.3.2 - March 22
+
+- Streamline Notion config entry updates (refresh token and user ID) ([@bachya] - [#112832])
+- Bump aioautomower to 2024.3.2 ([@Thomas55555] - [#113162])
+- Bump aioautomower to 2024.3.3 ([@Thomas55555] - [#113430])
+- Check for EA release channel for UniFi Protect ([@AngellusMortis] - [#113432])
+- Bump `pysnmp-lextudio` to version `6.0.11` ([@lextm] - [#113463])
+- Tado fix water heater ([@erwindouna] - [#113464])
+- Bump aiodhcpwatcher to 0.8.2 ([@bdraco] - [#113466])
+- Bump axis to v55 ([@Kane610] - [#113479])
+- Bump croniter to 2.0.2 ([@dgomes] - [#113494])
+- Revert setting communication delay in Risco init ([@OnFreund] - [#113497])
+- Bump pyrisco to 0.5.10 ([@OnFreund] - [#113505])
+- Fix missing context when running script from template entity ([@emontnemery] - [#113523])
+- Bump ical to 7.0.3 to fix local-todo persisted with invalid DTSTART values ([@allenporter] - [#113526])
+- Fix Airthings BLE illuminance sensor name ([@joostlek] - [#113560])
+- Ignore Shelly block update with cfgChanged None ([@thecode] - [#113587])
+- Catch `TimeoutError` in `Brother` config flow ([@bieniu] - [#113593])
+- Bump axis to v56 ([@Kane610] - [#113608])
+- Bump pyunifiprotect to 5.0.1 ([@AngellusMortis] - [#113630])
+- Bump pyunifiprotect to 5.0.2 ([@AngellusMortis] - [#113651])
+- Add removal condition to Shelly battery sensor ([@bieniu] - [#113703])
+- Bump aioraven to 0.5.2 ([@cottsay] - [#113714])
+- Fix unknown values in onewire ([@epenet] - [#113731])
+- Bump pymodbus v3.6.6 ([@janiversen] - [#113796])
+- Catch API errors in cast media_player service handlers ([@emontnemery] - [#113839])
+- Bump pychromecast to 14.0.1 ([@emontnemery] - [#113841])
+- Fix startup race in cast ([@emontnemery] - [#113843])
+- Redact the area of traccar server geofences ([@ludeeus] - [#113861])
+- Bump pytedee_async to 0.2.17 ([@zweckj] - [#113933])
+- Bump axis to v57 ([@Kane610] - [#113952])
+
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#112516]: https://github.com/home-assistant/core/pull/112516
+[#112832]: https://github.com/home-assistant/core/pull/112832
+[#113162]: https://github.com/home-assistant/core/pull/113162
+[#113249]: https://github.com/home-assistant/core/pull/113249
+[#113430]: https://github.com/home-assistant/core/pull/113430
+[#113432]: https://github.com/home-assistant/core/pull/113432
+[#113463]: https://github.com/home-assistant/core/pull/113463
+[#113464]: https://github.com/home-assistant/core/pull/113464
+[#113466]: https://github.com/home-assistant/core/pull/113466
+[#113479]: https://github.com/home-assistant/core/pull/113479
+[#113494]: https://github.com/home-assistant/core/pull/113494
+[#113497]: https://github.com/home-assistant/core/pull/113497
+[#113505]: https://github.com/home-assistant/core/pull/113505
+[#113523]: https://github.com/home-assistant/core/pull/113523
+[#113526]: https://github.com/home-assistant/core/pull/113526
+[#113560]: https://github.com/home-assistant/core/pull/113560
+[#113587]: https://github.com/home-assistant/core/pull/113587
+[#113593]: https://github.com/home-assistant/core/pull/113593
+[#113608]: https://github.com/home-assistant/core/pull/113608
+[#113630]: https://github.com/home-assistant/core/pull/113630
+[#113651]: https://github.com/home-assistant/core/pull/113651
+[#113703]: https://github.com/home-assistant/core/pull/113703
+[#113714]: https://github.com/home-assistant/core/pull/113714
+[#113731]: https://github.com/home-assistant/core/pull/113731
+[#113796]: https://github.com/home-assistant/core/pull/113796
+[#113839]: https://github.com/home-assistant/core/pull/113839
+[#113841]: https://github.com/home-assistant/core/pull/113841
+[#113843]: https://github.com/home-assistant/core/pull/113843
+[#113861]: https://github.com/home-assistant/core/pull/113861
+[#113933]: https://github.com/home-assistant/core/pull/113933
+[#113952]: https://github.com/home-assistant/core/pull/113952
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Kane610]: https://github.com/Kane610
+[@OnFreund]: https://github.com/OnFreund
+[@Thomas55555]: https://github.com/Thomas55555
+[@allenporter]: https://github.com/allenporter
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@cottsay]: https://github.com/cottsay
+[@dgomes]: https://github.com/dgomes
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@joostlek]: https://github.com/joostlek
+[@lextm]: https://github.com/lextm
+[@ludeeus]: https://github.com/ludeeus
+[@thecode]: https://github.com/thecode
+[@zweckj]: https://github.com/zweckj
+
+## Release 2024.3.3 - March 22
+
+- Update cosign to 2.2.3 ([@frenck] - [#113996])
+- Bump axis to v58 ([@Kane610] - [#114008])
+
+[#113996]: https://github.com/home-assistant/core/pull/113996
+[#114008]: https://github.com/home-assistant/core/pull/114008
+[@frenck]: https://github.com/frenck
+[@Kane610]: https://github.com/Kane610
+
+[#100418]: https://github.com/home-assistant/core/pull/100418
+[#101012]: https://github.com/home-assistant/core/pull/101012
+[#101641]: https://github.com/home-assistant/core/pull/101641
+[#101688]: https://github.com/home-assistant/core/pull/101688
+[#102159]: https://github.com/home-assistant/core/pull/102159
+[#102662]: https://github.com/home-assistant/core/pull/102662
+[#104680]: https://github.com/home-assistant/core/pull/104680
+[#104743]: https://github.com/home-assistant/core/pull/104743
+[#105693]: https://github.com/home-assistant/core/pull/105693
+[#105762]: https://github.com/home-assistant/core/pull/105762
+[#105796]: https://github.com/home-assistant/core/pull/105796
+[#105945]: https://github.com/home-assistant/core/pull/105945
+[#105985]: https://github.com/home-assistant/core/pull/105985
+[#106525]: https://github.com/home-assistant/core/pull/106525
+[#106527]: https://github.com/home-assistant/core/pull/106527
+[#106571]: https://github.com/home-assistant/core/pull/106571
+[#106573]: https://github.com/home-assistant/core/pull/106573
+[#106600]: https://github.com/home-assistant/core/pull/106600
+[#106615]: https://github.com/home-assistant/core/pull/106615
+[#106918]: https://github.com/home-assistant/core/pull/106918
+[#106976]: https://github.com/home-assistant/core/pull/106976
+[#107080]: https://github.com/home-assistant/core/pull/107080
+[#107600]: https://github.com/home-assistant/core/pull/107600
+[#107606]: https://github.com/home-assistant/core/pull/107606
+[#107648]: https://github.com/home-assistant/core/pull/107648
+[#107678]: https://github.com/home-assistant/core/pull/107678
+[#107795]: https://github.com/home-assistant/core/pull/107795
+[#108081]: https://github.com/home-assistant/core/pull/108081
+[#108125]: https://github.com/home-assistant/core/pull/108125
+[#108205]: https://github.com/home-assistant/core/pull/108205
+[#108237]: https://github.com/home-assistant/core/pull/108237
+[#108258]: https://github.com/home-assistant/core/pull/108258
+[#108318]: https://github.com/home-assistant/core/pull/108318
+[#108374]: https://github.com/home-assistant/core/pull/108374
+[#108412]: https://github.com/home-assistant/core/pull/108412
+[#108454]: https://github.com/home-assistant/core/pull/108454
+[#108505]: https://github.com/home-assistant/core/pull/108505
+[#108567]: https://github.com/home-assistant/core/pull/108567
+[#108585]: https://github.com/home-assistant/core/pull/108585
+[#108602]: https://github.com/home-assistant/core/pull/108602
+[#108796]: https://github.com/home-assistant/core/pull/108796
+[#108797]: https://github.com/home-assistant/core/pull/108797
+[#108806]: https://github.com/home-assistant/core/pull/108806
+[#108906]: https://github.com/home-assistant/core/pull/108906
+[#108918]: https://github.com/home-assistant/core/pull/108918
+[#109014]: https://github.com/home-assistant/core/pull/109014
+[#109019]: https://github.com/home-assistant/core/pull/109019
+[#109073]: https://github.com/home-assistant/core/pull/109073
+[#109093]: https://github.com/home-assistant/core/pull/109093
+[#109120]: https://github.com/home-assistant/core/pull/109120
+[#109187]: https://github.com/home-assistant/core/pull/109187
+[#109238]: https://github.com/home-assistant/core/pull/109238
+[#109240]: https://github.com/home-assistant/core/pull/109240
+[#109258]: https://github.com/home-assistant/core/pull/109258
+[#109272]: https://github.com/home-assistant/core/pull/109272
+[#109278]: https://github.com/home-assistant/core/pull/109278
+[#109298]: https://github.com/home-assistant/core/pull/109298
+[#109303]: https://github.com/home-assistant/core/pull/109303
+[#109312]: https://github.com/home-assistant/core/pull/109312
+[#109315]: https://github.com/home-assistant/core/pull/109315
+[#109320]: https://github.com/home-assistant/core/pull/109320
+[#109327]: https://github.com/home-assistant/core/pull/109327
+[#109334]: https://github.com/home-assistant/core/pull/109334
+[#109348]: https://github.com/home-assistant/core/pull/109348
+[#109351]: https://github.com/home-assistant/core/pull/109351
+[#109352]: https://github.com/home-assistant/core/pull/109352
+[#109354]: https://github.com/home-assistant/core/pull/109354
+[#109355]: https://github.com/home-assistant/core/pull/109355
+[#109358]: https://github.com/home-assistant/core/pull/109358
+[#109363]: https://github.com/home-assistant/core/pull/109363
+[#109366]: https://github.com/home-assistant/core/pull/109366
+[#109389]: https://github.com/home-assistant/core/pull/109389
+[#109390]: https://github.com/home-assistant/core/pull/109390
+[#109400]: https://github.com/home-assistant/core/pull/109400
+[#109406]: https://github.com/home-assistant/core/pull/109406
+[#109432]: https://github.com/home-assistant/core/pull/109432
+[#109460]: https://github.com/home-assistant/core/pull/109460
+[#109484]: https://github.com/home-assistant/core/pull/109484
+[#109485]: https://github.com/home-assistant/core/pull/109485
+[#109489]: https://github.com/home-assistant/core/pull/109489
+[#109495]: https://github.com/home-assistant/core/pull/109495
+[#109505]: https://github.com/home-assistant/core/pull/109505
+[#109507]: https://github.com/home-assistant/core/pull/109507
+[#109513]: https://github.com/home-assistant/core/pull/109513
+[#109516]: https://github.com/home-assistant/core/pull/109516
+[#109521]: https://github.com/home-assistant/core/pull/109521
+[#109526]: https://github.com/home-assistant/core/pull/109526
+[#109531]: https://github.com/home-assistant/core/pull/109531
+[#109577]: https://github.com/home-assistant/core/pull/109577
+[#109587]: https://github.com/home-assistant/core/pull/109587
+[#109588]: https://github.com/home-assistant/core/pull/109588
+[#109601]: https://github.com/home-assistant/core/pull/109601
+[#109602]: https://github.com/home-assistant/core/pull/109602
+[#109604]: https://github.com/home-assistant/core/pull/109604
+[#109607]: https://github.com/home-assistant/core/pull/109607
+[#109613]: https://github.com/home-assistant/core/pull/109613
+[#109617]: https://github.com/home-assistant/core/pull/109617
+[#109625]: https://github.com/home-assistant/core/pull/109625
+[#109629]: https://github.com/home-assistant/core/pull/109629
+[#109633]: https://github.com/home-assistant/core/pull/109633
+[#109634]: https://github.com/home-assistant/core/pull/109634
+[#109635]: https://github.com/home-assistant/core/pull/109635
+[#109637]: https://github.com/home-assistant/core/pull/109637
+[#109638]: https://github.com/home-assistant/core/pull/109638
+[#109639]: https://github.com/home-assistant/core/pull/109639
+[#109640]: https://github.com/home-assistant/core/pull/109640
+[#109642]: https://github.com/home-assistant/core/pull/109642
+[#109643]: https://github.com/home-assistant/core/pull/109643
+[#109645]: https://github.com/home-assistant/core/pull/109645
+[#109660]: https://github.com/home-assistant/core/pull/109660
+[#109665]: https://github.com/home-assistant/core/pull/109665
+[#109667]: https://github.com/home-assistant/core/pull/109667
+[#109669]: https://github.com/home-assistant/core/pull/109669
+[#109670]: https://github.com/home-assistant/core/pull/109670
+[#109672]: https://github.com/home-assistant/core/pull/109672
+[#109676]: https://github.com/home-assistant/core/pull/109676
+[#109677]: https://github.com/home-assistant/core/pull/109677
+[#109678]: https://github.com/home-assistant/core/pull/109678
+[#109679]: https://github.com/home-assistant/core/pull/109679
+[#109680]: https://github.com/home-assistant/core/pull/109680
+[#109681]: https://github.com/home-assistant/core/pull/109681
+[#109682]: https://github.com/home-assistant/core/pull/109682
+[#109683]: https://github.com/home-assistant/core/pull/109683
+[#109684]: https://github.com/home-assistant/core/pull/109684
+[#109685]: https://github.com/home-assistant/core/pull/109685
+[#109686]: https://github.com/home-assistant/core/pull/109686
+[#109687]: https://github.com/home-assistant/core/pull/109687
+[#109691]: https://github.com/home-assistant/core/pull/109691
+[#109693]: https://github.com/home-assistant/core/pull/109693
+[#109696]: https://github.com/home-assistant/core/pull/109696
+[#109698]: https://github.com/home-assistant/core/pull/109698
+[#109699]: https://github.com/home-assistant/core/pull/109699
+[#109700]: https://github.com/home-assistant/core/pull/109700
+[#109703]: https://github.com/home-assistant/core/pull/109703
+[#109704]: https://github.com/home-assistant/core/pull/109704
+[#109706]: https://github.com/home-assistant/core/pull/109706
+[#109711]: https://github.com/home-assistant/core/pull/109711
+[#109712]: https://github.com/home-assistant/core/pull/109712
+[#109723]: https://github.com/home-assistant/core/pull/109723
+[#109724]: https://github.com/home-assistant/core/pull/109724
+[#109726]: https://github.com/home-assistant/core/pull/109726
+[#109729]: https://github.com/home-assistant/core/pull/109729
+[#109731]: https://github.com/home-assistant/core/pull/109731
+[#109735]: https://github.com/home-assistant/core/pull/109735
+[#109736]: https://github.com/home-assistant/core/pull/109736
+[#109738]: https://github.com/home-assistant/core/pull/109738
+[#109758]: https://github.com/home-assistant/core/pull/109758
+[#109768]: https://github.com/home-assistant/core/pull/109768
+[#109771]: https://github.com/home-assistant/core/pull/109771
+[#109774]: https://github.com/home-assistant/core/pull/109774
+[#109776]: https://github.com/home-assistant/core/pull/109776
+[#109780]: https://github.com/home-assistant/core/pull/109780
+[#109784]: https://github.com/home-assistant/core/pull/109784
+[#109786]: https://github.com/home-assistant/core/pull/109786
+[#109791]: https://github.com/home-assistant/core/pull/109791
+[#109796]: https://github.com/home-assistant/core/pull/109796
+[#109798]: https://github.com/home-assistant/core/pull/109798
+[#109803]: https://github.com/home-assistant/core/pull/109803
+[#109811]: https://github.com/home-assistant/core/pull/109811
+[#109813]: https://github.com/home-assistant/core/pull/109813
+[#109831]: https://github.com/home-assistant/core/pull/109831
+[#109836]: https://github.com/home-assistant/core/pull/109836
+[#109849]: https://github.com/home-assistant/core/pull/109849
+[#109850]: https://github.com/home-assistant/core/pull/109850
+[#109854]: https://github.com/home-assistant/core/pull/109854
+[#109855]: https://github.com/home-assistant/core/pull/109855
+[#109856]: https://github.com/home-assistant/core/pull/109856
+[#109857]: https://github.com/home-assistant/core/pull/109857
+[#109858]: https://github.com/home-assistant/core/pull/109858
+[#109860]: https://github.com/home-assistant/core/pull/109860
+[#109867]: https://github.com/home-assistant/core/pull/109867
+[#109872]: https://github.com/home-assistant/core/pull/109872
+[#109876]: https://github.com/home-assistant/core/pull/109876
+[#109877]: https://github.com/home-assistant/core/pull/109877
+[#109878]: https://github.com/home-assistant/core/pull/109878
+[#109879]: https://github.com/home-assistant/core/pull/109879
+[#109880]: https://github.com/home-assistant/core/pull/109880
+[#109881]: https://github.com/home-assistant/core/pull/109881
+[#109888]: https://github.com/home-assistant/core/pull/109888
+[#109890]: https://github.com/home-assistant/core/pull/109890
+[#109896]: https://github.com/home-assistant/core/pull/109896
+[#109925]: https://github.com/home-assistant/core/pull/109925
+[#109928]: https://github.com/home-assistant/core/pull/109928
+[#109938]: https://github.com/home-assistant/core/pull/109938
+[#109950]: https://github.com/home-assistant/core/pull/109950
+[#109952]: https://github.com/home-assistant/core/pull/109952
+[#109980]: https://github.com/home-assistant/core/pull/109980
+[#109986]: https://github.com/home-assistant/core/pull/109986
+[#109990]: https://github.com/home-assistant/core/pull/109990
+[#110003]: https://github.com/home-assistant/core/pull/110003
+[#110014]: https://github.com/home-assistant/core/pull/110014
+[#110018]: https://github.com/home-assistant/core/pull/110018
+[#110021]: https://github.com/home-assistant/core/pull/110021
+[#110023]: https://github.com/home-assistant/core/pull/110023
+[#110048]: https://github.com/home-assistant/core/pull/110048
+[#110049]: https://github.com/home-assistant/core/pull/110049
+[#110053]: https://github.com/home-assistant/core/pull/110053
+[#110059]: https://github.com/home-assistant/core/pull/110059
+[#110060]: https://github.com/home-assistant/core/pull/110060
+[#110064]: https://github.com/home-assistant/core/pull/110064
+[#110070]: https://github.com/home-assistant/core/pull/110070
+[#110071]: https://github.com/home-assistant/core/pull/110071
+[#110076]: https://github.com/home-assistant/core/pull/110076
+[#110077]: https://github.com/home-assistant/core/pull/110077
+[#110094]: https://github.com/home-assistant/core/pull/110094
+[#110095]: https://github.com/home-assistant/core/pull/110095
+[#110096]: https://github.com/home-assistant/core/pull/110096
+[#110097]: https://github.com/home-assistant/core/pull/110097
+[#110109]: https://github.com/home-assistant/core/pull/110109
+[#110115]: https://github.com/home-assistant/core/pull/110115
+[#110117]: https://github.com/home-assistant/core/pull/110117
+[#110118]: https://github.com/home-assistant/core/pull/110118
+[#110119]: https://github.com/home-assistant/core/pull/110119
+[#110128]: https://github.com/home-assistant/core/pull/110128
+[#110129]: https://github.com/home-assistant/core/pull/110129
+[#110130]: https://github.com/home-assistant/core/pull/110130
+[#110131]: https://github.com/home-assistant/core/pull/110131
+[#110135]: https://github.com/home-assistant/core/pull/110135
+[#110136]: https://github.com/home-assistant/core/pull/110136
+[#110138]: https://github.com/home-assistant/core/pull/110138
+[#110139]: https://github.com/home-assistant/core/pull/110139
+[#110158]: https://github.com/home-assistant/core/pull/110158
+[#110179]: https://github.com/home-assistant/core/pull/110179
+[#110180]: https://github.com/home-assistant/core/pull/110180
+[#110183]: https://github.com/home-assistant/core/pull/110183
+[#110192]: https://github.com/home-assistant/core/pull/110192
+[#110193]: https://github.com/home-assistant/core/pull/110193
+[#110194]: https://github.com/home-assistant/core/pull/110194
+[#110196]: https://github.com/home-assistant/core/pull/110196
+[#110197]: https://github.com/home-assistant/core/pull/110197
+[#110202]: https://github.com/home-assistant/core/pull/110202
+[#110204]: https://github.com/home-assistant/core/pull/110204
+[#110209]: https://github.com/home-assistant/core/pull/110209
+[#110222]: https://github.com/home-assistant/core/pull/110222
+[#110224]: https://github.com/home-assistant/core/pull/110224
+[#110229]: https://github.com/home-assistant/core/pull/110229
+[#110231]: https://github.com/home-assistant/core/pull/110231
+[#110248]: https://github.com/home-assistant/core/pull/110248
+[#110249]: https://github.com/home-assistant/core/pull/110249
+[#110255]: https://github.com/home-assistant/core/pull/110255
+[#110262]: https://github.com/home-assistant/core/pull/110262
+[#110267]: https://github.com/home-assistant/core/pull/110267
+[#110277]: https://github.com/home-assistant/core/pull/110277
+[#110278]: https://github.com/home-assistant/core/pull/110278
+[#110279]: https://github.com/home-assistant/core/pull/110279
+[#110290]: https://github.com/home-assistant/core/pull/110290
+[#110291]: https://github.com/home-assistant/core/pull/110291
+[#110302]: https://github.com/home-assistant/core/pull/110302
+[#110303]: https://github.com/home-assistant/core/pull/110303
+[#110305]: https://github.com/home-assistant/core/pull/110305
+[#110306]: https://github.com/home-assistant/core/pull/110306
+[#110307]: https://github.com/home-assistant/core/pull/110307
+[#110308]: https://github.com/home-assistant/core/pull/110308
+[#110309]: https://github.com/home-assistant/core/pull/110309
+[#110310]: https://github.com/home-assistant/core/pull/110310
+[#110311]: https://github.com/home-assistant/core/pull/110311
+[#110312]: https://github.com/home-assistant/core/pull/110312
+[#110313]: https://github.com/home-assistant/core/pull/110313
+[#110314]: https://github.com/home-assistant/core/pull/110314
+[#110317]: https://github.com/home-assistant/core/pull/110317
+[#110320]: https://github.com/home-assistant/core/pull/110320
+[#110325]: https://github.com/home-assistant/core/pull/110325
+[#110326]: https://github.com/home-assistant/core/pull/110326
+[#110328]: https://github.com/home-assistant/core/pull/110328
+[#110330]: https://github.com/home-assistant/core/pull/110330
+[#110331]: https://github.com/home-assistant/core/pull/110331
+[#110332]: https://github.com/home-assistant/core/pull/110332
+[#110334]: https://github.com/home-assistant/core/pull/110334
+[#110336]: https://github.com/home-assistant/core/pull/110336
+[#110343]: https://github.com/home-assistant/core/pull/110343
+[#110344]: https://github.com/home-assistant/core/pull/110344
+[#110346]: https://github.com/home-assistant/core/pull/110346
+[#110349]: https://github.com/home-assistant/core/pull/110349
+[#110350]: https://github.com/home-assistant/core/pull/110350
+[#110355]: https://github.com/home-assistant/core/pull/110355
+[#110358]: https://github.com/home-assistant/core/pull/110358
+[#110361]: https://github.com/home-assistant/core/pull/110361
+[#110362]: https://github.com/home-assistant/core/pull/110362
+[#110363]: https://github.com/home-assistant/core/pull/110363
+[#110364]: https://github.com/home-assistant/core/pull/110364
+[#110365]: https://github.com/home-assistant/core/pull/110365
+[#110367]: https://github.com/home-assistant/core/pull/110367
+[#110368]: https://github.com/home-assistant/core/pull/110368
+[#110370]: https://github.com/home-assistant/core/pull/110370
+[#110371]: https://github.com/home-assistant/core/pull/110371
+[#110372]: https://github.com/home-assistant/core/pull/110372
+[#110373]: https://github.com/home-assistant/core/pull/110373
+[#110374]: https://github.com/home-assistant/core/pull/110374
+[#110376]: https://github.com/home-assistant/core/pull/110376
+[#110377]: https://github.com/home-assistant/core/pull/110377
+[#110378]: https://github.com/home-assistant/core/pull/110378
+[#110380]: https://github.com/home-assistant/core/pull/110380
+[#110383]: https://github.com/home-assistant/core/pull/110383
+[#110386]: https://github.com/home-assistant/core/pull/110386
+[#110388]: https://github.com/home-assistant/core/pull/110388
+[#110390]: https://github.com/home-assistant/core/pull/110390
+[#110391]: https://github.com/home-assistant/core/pull/110391
+[#110392]: https://github.com/home-assistant/core/pull/110392
+[#110393]: https://github.com/home-assistant/core/pull/110393
+[#110394]: https://github.com/home-assistant/core/pull/110394
+[#110395]: https://github.com/home-assistant/core/pull/110395
+[#110399]: https://github.com/home-assistant/core/pull/110399
+[#110400]: https://github.com/home-assistant/core/pull/110400
+[#110401]: https://github.com/home-assistant/core/pull/110401
+[#110402]: https://github.com/home-assistant/core/pull/110402
+[#110403]: https://github.com/home-assistant/core/pull/110403
+[#110404]: https://github.com/home-assistant/core/pull/110404
+[#110405]: https://github.com/home-assistant/core/pull/110405
+[#110406]: https://github.com/home-assistant/core/pull/110406
+[#110407]: https://github.com/home-assistant/core/pull/110407
+[#110408]: https://github.com/home-assistant/core/pull/110408
+[#110409]: https://github.com/home-assistant/core/pull/110409
+[#110410]: https://github.com/home-assistant/core/pull/110410
+[#110413]: https://github.com/home-assistant/core/pull/110413
+[#110415]: https://github.com/home-assistant/core/pull/110415
+[#110416]: https://github.com/home-assistant/core/pull/110416
+[#110417]: https://github.com/home-assistant/core/pull/110417
+[#110418]: https://github.com/home-assistant/core/pull/110418
+[#110419]: https://github.com/home-assistant/core/pull/110419
+[#110421]: https://github.com/home-assistant/core/pull/110421
+[#110422]: https://github.com/home-assistant/core/pull/110422
+[#110423]: https://github.com/home-assistant/core/pull/110423
+[#110424]: https://github.com/home-assistant/core/pull/110424
+[#110425]: https://github.com/home-assistant/core/pull/110425
+[#110428]: https://github.com/home-assistant/core/pull/110428
+[#110429]: https://github.com/home-assistant/core/pull/110429
+[#110430]: https://github.com/home-assistant/core/pull/110430
+[#110431]: https://github.com/home-assistant/core/pull/110431
+[#110435]: https://github.com/home-assistant/core/pull/110435
+[#110441]: https://github.com/home-assistant/core/pull/110441
+[#110442]: https://github.com/home-assistant/core/pull/110442
+[#110446]: https://github.com/home-assistant/core/pull/110446
+[#110448]: https://github.com/home-assistant/core/pull/110448
+[#110452]: https://github.com/home-assistant/core/pull/110452
+[#110461]: https://github.com/home-assistant/core/pull/110461
+[#110465]: https://github.com/home-assistant/core/pull/110465
+[#110466]: https://github.com/home-assistant/core/pull/110466
+[#110467]: https://github.com/home-assistant/core/pull/110467
+[#110470]: https://github.com/home-assistant/core/pull/110470
+[#110471]: https://github.com/home-assistant/core/pull/110471
+[#110474]: https://github.com/home-assistant/core/pull/110474
+[#110477]: https://github.com/home-assistant/core/pull/110477
+[#110479]: https://github.com/home-assistant/core/pull/110479
+[#110484]: https://github.com/home-assistant/core/pull/110484
+[#110485]: https://github.com/home-assistant/core/pull/110485
+[#110498]: https://github.com/home-assistant/core/pull/110498
+[#110499]: https://github.com/home-assistant/core/pull/110499
+[#110501]: https://github.com/home-assistant/core/pull/110501
+[#110502]: https://github.com/home-assistant/core/pull/110502
+[#110504]: https://github.com/home-assistant/core/pull/110504
+[#110509]: https://github.com/home-assistant/core/pull/110509
+[#110510]: https://github.com/home-assistant/core/pull/110510
+[#110517]: https://github.com/home-assistant/core/pull/110517
+[#110521]: https://github.com/home-assistant/core/pull/110521
+[#110522]: https://github.com/home-assistant/core/pull/110522
+[#110543]: https://github.com/home-assistant/core/pull/110543
+[#110545]: https://github.com/home-assistant/core/pull/110545
+[#110558]: https://github.com/home-assistant/core/pull/110558
+[#110559]: https://github.com/home-assistant/core/pull/110559
+[#110560]: https://github.com/home-assistant/core/pull/110560
+[#110561]: https://github.com/home-assistant/core/pull/110561
+[#110562]: https://github.com/home-assistant/core/pull/110562
+[#110564]: https://github.com/home-assistant/core/pull/110564
+[#110565]: https://github.com/home-assistant/core/pull/110565
+[#110567]: https://github.com/home-assistant/core/pull/110567
+[#110568]: https://github.com/home-assistant/core/pull/110568
+[#110572]: https://github.com/home-assistant/core/pull/110572
+[#110573]: https://github.com/home-assistant/core/pull/110573
+[#110574]: https://github.com/home-assistant/core/pull/110574
+[#110575]: https://github.com/home-assistant/core/pull/110575
+[#110577]: https://github.com/home-assistant/core/pull/110577
+[#110578]: https://github.com/home-assistant/core/pull/110578
+[#110579]: https://github.com/home-assistant/core/pull/110579
+[#110580]: https://github.com/home-assistant/core/pull/110580
+[#110581]: https://github.com/home-assistant/core/pull/110581
+[#110583]: https://github.com/home-assistant/core/pull/110583
+[#110584]: https://github.com/home-assistant/core/pull/110584
+[#110585]: https://github.com/home-assistant/core/pull/110585
+[#110586]: https://github.com/home-assistant/core/pull/110586
+[#110587]: https://github.com/home-assistant/core/pull/110587
+[#110589]: https://github.com/home-assistant/core/pull/110589
+[#110590]: https://github.com/home-assistant/core/pull/110590
+[#110591]: https://github.com/home-assistant/core/pull/110591
+[#110592]: https://github.com/home-assistant/core/pull/110592
+[#110593]: https://github.com/home-assistant/core/pull/110593
+[#110594]: https://github.com/home-assistant/core/pull/110594
+[#110596]: https://github.com/home-assistant/core/pull/110596
+[#110597]: https://github.com/home-assistant/core/pull/110597
+[#110598]: https://github.com/home-assistant/core/pull/110598
+[#110599]: https://github.com/home-assistant/core/pull/110599
+[#110600]: https://github.com/home-assistant/core/pull/110600
+[#110601]: https://github.com/home-assistant/core/pull/110601
+[#110602]: https://github.com/home-assistant/core/pull/110602
+[#110603]: https://github.com/home-assistant/core/pull/110603
+[#110604]: https://github.com/home-assistant/core/pull/110604
+[#110605]: https://github.com/home-assistant/core/pull/110605
+[#110606]: https://github.com/home-assistant/core/pull/110606
+[#110607]: https://github.com/home-assistant/core/pull/110607
+[#110608]: https://github.com/home-assistant/core/pull/110608
+[#110609]: https://github.com/home-assistant/core/pull/110609
+[#110610]: https://github.com/home-assistant/core/pull/110610
+[#110611]: https://github.com/home-assistant/core/pull/110611
+[#110613]: https://github.com/home-assistant/core/pull/110613
+[#110615]: https://github.com/home-assistant/core/pull/110615
+[#110616]: https://github.com/home-assistant/core/pull/110616
+[#110617]: https://github.com/home-assistant/core/pull/110617
+[#110622]: https://github.com/home-assistant/core/pull/110622
+[#110625]: https://github.com/home-assistant/core/pull/110625
+[#110632]: https://github.com/home-assistant/core/pull/110632
+[#110636]: https://github.com/home-assistant/core/pull/110636
+[#110637]: https://github.com/home-assistant/core/pull/110637
+[#110651]: https://github.com/home-assistant/core/pull/110651
+[#110653]: https://github.com/home-assistant/core/pull/110653
+[#110657]: https://github.com/home-assistant/core/pull/110657
+[#110662]: https://github.com/home-assistant/core/pull/110662
+[#110666]: https://github.com/home-assistant/core/pull/110666
+[#110667]: https://github.com/home-assistant/core/pull/110667
+[#110669]: https://github.com/home-assistant/core/pull/110669
+[#110674]: https://github.com/home-assistant/core/pull/110674
+[#110680]: https://github.com/home-assistant/core/pull/110680
+[#110687]: https://github.com/home-assistant/core/pull/110687
+[#110688]: https://github.com/home-assistant/core/pull/110688
+[#110690]: https://github.com/home-assistant/core/pull/110690
+[#110693]: https://github.com/home-assistant/core/pull/110693
+[#110694]: https://github.com/home-assistant/core/pull/110694
+[#110698]: https://github.com/home-assistant/core/pull/110698
+[#110699]: https://github.com/home-assistant/core/pull/110699
+[#110700]: https://github.com/home-assistant/core/pull/110700
+[#110701]: https://github.com/home-assistant/core/pull/110701
+[#110704]: https://github.com/home-assistant/core/pull/110704
+[#110711]: https://github.com/home-assistant/core/pull/110711
+[#110712]: https://github.com/home-assistant/core/pull/110712
+[#110724]: https://github.com/home-assistant/core/pull/110724
+[#110726]: https://github.com/home-assistant/core/pull/110726
+[#110727]: https://github.com/home-assistant/core/pull/110727
+[#110728]: https://github.com/home-assistant/core/pull/110728
+[#110729]: https://github.com/home-assistant/core/pull/110729
+[#110732]: https://github.com/home-assistant/core/pull/110732
+[#110741]: https://github.com/home-assistant/core/pull/110741
+[#110743]: https://github.com/home-assistant/core/pull/110743
+[#110745]: https://github.com/home-assistant/core/pull/110745
+[#110748]: https://github.com/home-assistant/core/pull/110748
+[#110750]: https://github.com/home-assistant/core/pull/110750
+[#110751]: https://github.com/home-assistant/core/pull/110751
+[#110752]: https://github.com/home-assistant/core/pull/110752
+[#110756]: https://github.com/home-assistant/core/pull/110756
+[#110757]: https://github.com/home-assistant/core/pull/110757
+[#110760]: https://github.com/home-assistant/core/pull/110760
+[#110766]: https://github.com/home-assistant/core/pull/110766
+[#110769]: https://github.com/home-assistant/core/pull/110769
+[#110770]: https://github.com/home-assistant/core/pull/110770
+[#110771]: https://github.com/home-assistant/core/pull/110771
+[#110772]: https://github.com/home-assistant/core/pull/110772
+[#110785]: https://github.com/home-assistant/core/pull/110785
+[#110786]: https://github.com/home-assistant/core/pull/110786
+[#110788]: https://github.com/home-assistant/core/pull/110788
+[#110791]: https://github.com/home-assistant/core/pull/110791
+[#110792]: https://github.com/home-assistant/core/pull/110792
+[#110795]: https://github.com/home-assistant/core/pull/110795
+[#110799]: https://github.com/home-assistant/core/pull/110799
+[#110810]: https://github.com/home-assistant/core/pull/110810
+[#110811]: https://github.com/home-assistant/core/pull/110811
+[#110812]: https://github.com/home-assistant/core/pull/110812
+[#110814]: https://github.com/home-assistant/core/pull/110814
+[#110815]: https://github.com/home-assistant/core/pull/110815
+[#110817]: https://github.com/home-assistant/core/pull/110817
+[#110821]: https://github.com/home-assistant/core/pull/110821
+[#110823]: https://github.com/home-assistant/core/pull/110823
+[#110825]: https://github.com/home-assistant/core/pull/110825
+[#110826]: https://github.com/home-assistant/core/pull/110826
+[#110828]: https://github.com/home-assistant/core/pull/110828
+[#110830]: https://github.com/home-assistant/core/pull/110830
+[#110843]: https://github.com/home-assistant/core/pull/110843
+[#110844]: https://github.com/home-assistant/core/pull/110844
+[#110846]: https://github.com/home-assistant/core/pull/110846
+[#110849]: https://github.com/home-assistant/core/pull/110849
+[#110862]: https://github.com/home-assistant/core/pull/110862
+[#110865]: https://github.com/home-assistant/core/pull/110865
+[#110867]: https://github.com/home-assistant/core/pull/110867
+[#110869]: https://github.com/home-assistant/core/pull/110869
+[#110870]: https://github.com/home-assistant/core/pull/110870
+[#110871]: https://github.com/home-assistant/core/pull/110871
+[#110872]: https://github.com/home-assistant/core/pull/110872
+[#110875]: https://github.com/home-assistant/core/pull/110875
+[#110876]: https://github.com/home-assistant/core/pull/110876
+[#110878]: https://github.com/home-assistant/core/pull/110878
+[#110884]: https://github.com/home-assistant/core/pull/110884
+[#110886]: https://github.com/home-assistant/core/pull/110886
+[#110887]: https://github.com/home-assistant/core/pull/110887
+[#110889]: https://github.com/home-assistant/core/pull/110889
+[#110890]: https://github.com/home-assistant/core/pull/110890
+[#110892]: https://github.com/home-assistant/core/pull/110892
+[#110894]: https://github.com/home-assistant/core/pull/110894
+[#110895]: https://github.com/home-assistant/core/pull/110895
+[#110896]: https://github.com/home-assistant/core/pull/110896
+[#110898]: https://github.com/home-assistant/core/pull/110898
+[#110899]: https://github.com/home-assistant/core/pull/110899
+[#110900]: https://github.com/home-assistant/core/pull/110900
+[#110901]: https://github.com/home-assistant/core/pull/110901
+[#110902]: https://github.com/home-assistant/core/pull/110902
+[#110903]: https://github.com/home-assistant/core/pull/110903
+[#110907]: https://github.com/home-assistant/core/pull/110907
+[#110908]: https://github.com/home-assistant/core/pull/110908
+[#110909]: https://github.com/home-assistant/core/pull/110909
+[#110910]: https://github.com/home-assistant/core/pull/110910
+[#110911]: https://github.com/home-assistant/core/pull/110911
+[#110912]: https://github.com/home-assistant/core/pull/110912
+[#110913]: https://github.com/home-assistant/core/pull/110913
+[#110914]: https://github.com/home-assistant/core/pull/110914
+[#110915]: https://github.com/home-assistant/core/pull/110915
+[#110916]: https://github.com/home-assistant/core/pull/110916
+[#110917]: https://github.com/home-assistant/core/pull/110917
+[#110918]: https://github.com/home-assistant/core/pull/110918
+[#110921]: https://github.com/home-assistant/core/pull/110921
+[#110922]: https://github.com/home-assistant/core/pull/110922
+[#110925]: https://github.com/home-assistant/core/pull/110925
+[#110926]: https://github.com/home-assistant/core/pull/110926
+[#110927]: https://github.com/home-assistant/core/pull/110927
+[#110928]: https://github.com/home-assistant/core/pull/110928
+[#110930]: https://github.com/home-assistant/core/pull/110930
+[#110946]: https://github.com/home-assistant/core/pull/110946
+[#110947]: https://github.com/home-assistant/core/pull/110947
+[#110951]: https://github.com/home-assistant/core/pull/110951
+[#110955]: https://github.com/home-assistant/core/pull/110955
+[#110960]: https://github.com/home-assistant/core/pull/110960
+[#110964]: https://github.com/home-assistant/core/pull/110964
+[#110965]: https://github.com/home-assistant/core/pull/110965
+[#110966]: https://github.com/home-assistant/core/pull/110966
+[#110967]: https://github.com/home-assistant/core/pull/110967
+[#110969]: https://github.com/home-assistant/core/pull/110969
+[#110976]: https://github.com/home-assistant/core/pull/110976
+[#110977]: https://github.com/home-assistant/core/pull/110977
+[#110978]: https://github.com/home-assistant/core/pull/110978
+[#110980]: https://github.com/home-assistant/core/pull/110980
+[#110982]: https://github.com/home-assistant/core/pull/110982
+[#110985]: https://github.com/home-assistant/core/pull/110985
+[#110986]: https://github.com/home-assistant/core/pull/110986
+[#110987]: https://github.com/home-assistant/core/pull/110987
+[#110988]: https://github.com/home-assistant/core/pull/110988
+[#110991]: https://github.com/home-assistant/core/pull/110991
+[#110995]: https://github.com/home-assistant/core/pull/110995
+[#111000]: https://github.com/home-assistant/core/pull/111000
+[#111004]: https://github.com/home-assistant/core/pull/111004
+[#111006]: https://github.com/home-assistant/core/pull/111006
+[#111008]: https://github.com/home-assistant/core/pull/111008
+[#111010]: https://github.com/home-assistant/core/pull/111010
+[#111016]: https://github.com/home-assistant/core/pull/111016
+[#111017]: https://github.com/home-assistant/core/pull/111017
+[#111018]: https://github.com/home-assistant/core/pull/111018
+[#111022]: https://github.com/home-assistant/core/pull/111022
+[#111026]: https://github.com/home-assistant/core/pull/111026
+[#111027]: https://github.com/home-assistant/core/pull/111027
+[#111028]: https://github.com/home-assistant/core/pull/111028
+[#111032]: https://github.com/home-assistant/core/pull/111032
+[#111033]: https://github.com/home-assistant/core/pull/111033
+[#111034]: https://github.com/home-assistant/core/pull/111034
+[#111035]: https://github.com/home-assistant/core/pull/111035
+[#111041]: https://github.com/home-assistant/core/pull/111041
+[#111042]: https://github.com/home-assistant/core/pull/111042
+[#111044]: https://github.com/home-assistant/core/pull/111044
+[#111048]: https://github.com/home-assistant/core/pull/111048
+[#111051]: https://github.com/home-assistant/core/pull/111051
+[#111052]: https://github.com/home-assistant/core/pull/111052
+[#111053]: https://github.com/home-assistant/core/pull/111053
+[#111054]: https://github.com/home-assistant/core/pull/111054
+[#111055]: https://github.com/home-assistant/core/pull/111055
+[#111056]: https://github.com/home-assistant/core/pull/111056
+[#111057]: https://github.com/home-assistant/core/pull/111057
+[#111059]: https://github.com/home-assistant/core/pull/111059
+[#111067]: https://github.com/home-assistant/core/pull/111067
+[#111071]: https://github.com/home-assistant/core/pull/111071
+[#111074]: https://github.com/home-assistant/core/pull/111074
+[#111075]: https://github.com/home-assistant/core/pull/111075
+[#111076]: https://github.com/home-assistant/core/pull/111076
+[#111077]: https://github.com/home-assistant/core/pull/111077
+[#111079]: https://github.com/home-assistant/core/pull/111079
+[#111080]: https://github.com/home-assistant/core/pull/111080
+[#111081]: https://github.com/home-assistant/core/pull/111081
+[#111086]: https://github.com/home-assistant/core/pull/111086
+[#111087]: https://github.com/home-assistant/core/pull/111087
+[#111088]: https://github.com/home-assistant/core/pull/111088
+[#111091]: https://github.com/home-assistant/core/pull/111091
+[#111092]: https://github.com/home-assistant/core/pull/111092
+[#111093]: https://github.com/home-assistant/core/pull/111093
+[#111096]: https://github.com/home-assistant/core/pull/111096
+[#111101]: https://github.com/home-assistant/core/pull/111101
+[#111102]: https://github.com/home-assistant/core/pull/111102
+[#111103]: https://github.com/home-assistant/core/pull/111103
+[#111104]: https://github.com/home-assistant/core/pull/111104
+[#111110]: https://github.com/home-assistant/core/pull/111110
+[#111116]: https://github.com/home-assistant/core/pull/111116
+[#111120]: https://github.com/home-assistant/core/pull/111120
+[#111125]: https://github.com/home-assistant/core/pull/111125
+[#111127]: https://github.com/home-assistant/core/pull/111127
+[#111128]: https://github.com/home-assistant/core/pull/111128
+[#111131]: https://github.com/home-assistant/core/pull/111131
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111136]: https://github.com/home-assistant/core/pull/111136
+[#111138]: https://github.com/home-assistant/core/pull/111138
+[#111140]: https://github.com/home-assistant/core/pull/111140
+[#111141]: https://github.com/home-assistant/core/pull/111141
+[#111143]: https://github.com/home-assistant/core/pull/111143
+[#111149]: https://github.com/home-assistant/core/pull/111149
+[#111150]: https://github.com/home-assistant/core/pull/111150
+[#111154]: https://github.com/home-assistant/core/pull/111154
+[#111155]: https://github.com/home-assistant/core/pull/111155
+[#111157]: https://github.com/home-assistant/core/pull/111157
+[#111159]: https://github.com/home-assistant/core/pull/111159
+[#111162]: https://github.com/home-assistant/core/pull/111162
+[#111165]: https://github.com/home-assistant/core/pull/111165
+[#111166]: https://github.com/home-assistant/core/pull/111166
+[#111167]: https://github.com/home-assistant/core/pull/111167
+[#111168]: https://github.com/home-assistant/core/pull/111168
+[#111169]: https://github.com/home-assistant/core/pull/111169
+[#111170]: https://github.com/home-assistant/core/pull/111170
+[#111172]: https://github.com/home-assistant/core/pull/111172
+[#111173]: https://github.com/home-assistant/core/pull/111173
+[#111174]: https://github.com/home-assistant/core/pull/111174
+[#111175]: https://github.com/home-assistant/core/pull/111175
+[#111176]: https://github.com/home-assistant/core/pull/111176
+[#111179]: https://github.com/home-assistant/core/pull/111179
+[#111180]: https://github.com/home-assistant/core/pull/111180
+[#111181]: https://github.com/home-assistant/core/pull/111181
+[#111182]: https://github.com/home-assistant/core/pull/111182
+[#111184]: https://github.com/home-assistant/core/pull/111184
+[#111185]: https://github.com/home-assistant/core/pull/111185
+[#111188]: https://github.com/home-assistant/core/pull/111188
+[#111191]: https://github.com/home-assistant/core/pull/111191
+[#111193]: https://github.com/home-assistant/core/pull/111193
+[#111194]: https://github.com/home-assistant/core/pull/111194
+[#111195]: https://github.com/home-assistant/core/pull/111195
+[#111199]: https://github.com/home-assistant/core/pull/111199
+[#111201]: https://github.com/home-assistant/core/pull/111201
+[#111203]: https://github.com/home-assistant/core/pull/111203
+[#111204]: https://github.com/home-assistant/core/pull/111204
+[#111206]: https://github.com/home-assistant/core/pull/111206
+[#111208]: https://github.com/home-assistant/core/pull/111208
+[#111214]: https://github.com/home-assistant/core/pull/111214
+[#111218]: https://github.com/home-assistant/core/pull/111218
+[#111220]: https://github.com/home-assistant/core/pull/111220
+[#111227]: https://github.com/home-assistant/core/pull/111227
+[#111229]: https://github.com/home-assistant/core/pull/111229
+[#111231]: https://github.com/home-assistant/core/pull/111231
+[#111232]: https://github.com/home-assistant/core/pull/111232
+[#111236]: https://github.com/home-assistant/core/pull/111236
+[#111244]: https://github.com/home-assistant/core/pull/111244
+[#111245]: https://github.com/home-assistant/core/pull/111245
+[#111247]: https://github.com/home-assistant/core/pull/111247
+[#111249]: https://github.com/home-assistant/core/pull/111249
+[#111250]: https://github.com/home-assistant/core/pull/111250
+[#111252]: https://github.com/home-assistant/core/pull/111252
+[#111257]: https://github.com/home-assistant/core/pull/111257
+[#111259]: https://github.com/home-assistant/core/pull/111259
+[#111262]: https://github.com/home-assistant/core/pull/111262
+[#111263]: https://github.com/home-assistant/core/pull/111263
+[#111265]: https://github.com/home-assistant/core/pull/111265
+[#111267]: https://github.com/home-assistant/core/pull/111267
+[#111268]: https://github.com/home-assistant/core/pull/111268
+[#111269]: https://github.com/home-assistant/core/pull/111269
+[#111270]: https://github.com/home-assistant/core/pull/111270
+[#111271]: https://github.com/home-assistant/core/pull/111271
+[#111272]: https://github.com/home-assistant/core/pull/111272
+[#111273]: https://github.com/home-assistant/core/pull/111273
+[#111276]: https://github.com/home-assistant/core/pull/111276
+[#111277]: https://github.com/home-assistant/core/pull/111277
+[#111283]: https://github.com/home-assistant/core/pull/111283
+[#111284]: https://github.com/home-assistant/core/pull/111284
+[#111285]: https://github.com/home-assistant/core/pull/111285
+[#111291]: https://github.com/home-assistant/core/pull/111291
+[#111296]: https://github.com/home-assistant/core/pull/111296
+[#111302]: https://github.com/home-assistant/core/pull/111302
+[#111304]: https://github.com/home-assistant/core/pull/111304
+[#111305]: https://github.com/home-assistant/core/pull/111305
+[#111308]: https://github.com/home-assistant/core/pull/111308
+[#111310]: https://github.com/home-assistant/core/pull/111310
+[#111311]: https://github.com/home-assistant/core/pull/111311
+[#111315]: https://github.com/home-assistant/core/pull/111315
+[#111316]: https://github.com/home-assistant/core/pull/111316
+[#111317]: https://github.com/home-assistant/core/pull/111317
+[#111318]: https://github.com/home-assistant/core/pull/111318
+[#111319]: https://github.com/home-assistant/core/pull/111319
+[#111320]: https://github.com/home-assistant/core/pull/111320
+[#111321]: https://github.com/home-assistant/core/pull/111321
+[#111322]: https://github.com/home-assistant/core/pull/111322
+[#111323]: https://github.com/home-assistant/core/pull/111323
+[#111324]: https://github.com/home-assistant/core/pull/111324
+[#111326]: https://github.com/home-assistant/core/pull/111326
+[#111328]: https://github.com/home-assistant/core/pull/111328
+[#111332]: https://github.com/home-assistant/core/pull/111332
+[#111334]: https://github.com/home-assistant/core/pull/111334
+[#111335]: https://github.com/home-assistant/core/pull/111335
+[#111336]: https://github.com/home-assistant/core/pull/111336
+[#111337]: https://github.com/home-assistant/core/pull/111337
+[#111338]: https://github.com/home-assistant/core/pull/111338
+[#111339]: https://github.com/home-assistant/core/pull/111339
+[#111340]: https://github.com/home-assistant/core/pull/111340
+[#111342]: https://github.com/home-assistant/core/pull/111342
+[#111343]: https://github.com/home-assistant/core/pull/111343
+[#111346]: https://github.com/home-assistant/core/pull/111346
+[#111347]: https://github.com/home-assistant/core/pull/111347
+[#111348]: https://github.com/home-assistant/core/pull/111348
+[#111350]: https://github.com/home-assistant/core/pull/111350
+[#111351]: https://github.com/home-assistant/core/pull/111351
+[#111352]: https://github.com/home-assistant/core/pull/111352
+[#111354]: https://github.com/home-assistant/core/pull/111354
+[#111355]: https://github.com/home-assistant/core/pull/111355
+[#111356]: https://github.com/home-assistant/core/pull/111356
+[#111357]: https://github.com/home-assistant/core/pull/111357
+[#111358]: https://github.com/home-assistant/core/pull/111358
+[#111359]: https://github.com/home-assistant/core/pull/111359
+[#111360]: https://github.com/home-assistant/core/pull/111360
+[#111361]: https://github.com/home-assistant/core/pull/111361
+[#111362]: https://github.com/home-assistant/core/pull/111362
+[#111363]: https://github.com/home-assistant/core/pull/111363
+[#111364]: https://github.com/home-assistant/core/pull/111364
+[#111366]: https://github.com/home-assistant/core/pull/111366
+[#111367]: https://github.com/home-assistant/core/pull/111367
+[#111368]: https://github.com/home-assistant/core/pull/111368
+[#111369]: https://github.com/home-assistant/core/pull/111369
+[#111370]: https://github.com/home-assistant/core/pull/111370
+[#111371]: https://github.com/home-assistant/core/pull/111371
+[#111373]: https://github.com/home-assistant/core/pull/111373
+[#111376]: https://github.com/home-assistant/core/pull/111376
+[#111377]: https://github.com/home-assistant/core/pull/111377
+[#111379]: https://github.com/home-assistant/core/pull/111379
+[#111381]: https://github.com/home-assistant/core/pull/111381
+[#111385]: https://github.com/home-assistant/core/pull/111385
+[#111388]: https://github.com/home-assistant/core/pull/111388
+[#111389]: https://github.com/home-assistant/core/pull/111389
+[#111392]: https://github.com/home-assistant/core/pull/111392
+[#111399]: https://github.com/home-assistant/core/pull/111399
+[#111400]: https://github.com/home-assistant/core/pull/111400
+[#111401]: https://github.com/home-assistant/core/pull/111401
+[#111407]: https://github.com/home-assistant/core/pull/111407
+[#111411]: https://github.com/home-assistant/core/pull/111411
+[#111412]: https://github.com/home-assistant/core/pull/111412
+[#111413]: https://github.com/home-assistant/core/pull/111413
+[#111414]: https://github.com/home-assistant/core/pull/111414
+[#111415]: https://github.com/home-assistant/core/pull/111415
+[#111416]: https://github.com/home-assistant/core/pull/111416
+[#111417]: https://github.com/home-assistant/core/pull/111417
+[#111420]: https://github.com/home-assistant/core/pull/111420
+[#111422]: https://github.com/home-assistant/core/pull/111422
+[#111425]: https://github.com/home-assistant/core/pull/111425
+[#111427]: https://github.com/home-assistant/core/pull/111427
+[#111428]: https://github.com/home-assistant/core/pull/111428
+[#111433]: https://github.com/home-assistant/core/pull/111433
+[#111435]: https://github.com/home-assistant/core/pull/111435
+[#111437]: https://github.com/home-assistant/core/pull/111437
+[#111439]: https://github.com/home-assistant/core/pull/111439
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111447]: https://github.com/home-assistant/core/pull/111447
+[#111448]: https://github.com/home-assistant/core/pull/111448
+[#111449]: https://github.com/home-assistant/core/pull/111449
+[#111450]: https://github.com/home-assistant/core/pull/111450
+[#111455]: https://github.com/home-assistant/core/pull/111455
+[#111456]: https://github.com/home-assistant/core/pull/111456
+[#111458]: https://github.com/home-assistant/core/pull/111458
+[#111460]: https://github.com/home-assistant/core/pull/111460
+[#111464]: https://github.com/home-assistant/core/pull/111464
+[#111471]: https://github.com/home-assistant/core/pull/111471
+[#111477]: https://github.com/home-assistant/core/pull/111477
+[#111479]: https://github.com/home-assistant/core/pull/111479
+[#111483]: https://github.com/home-assistant/core/pull/111483
+[#111488]: https://github.com/home-assistant/core/pull/111488
+[#111491]: https://github.com/home-assistant/core/pull/111491
+[#111492]: https://github.com/home-assistant/core/pull/111492
+[#111494]: https://github.com/home-assistant/core/pull/111494
+[#111496]: https://github.com/home-assistant/core/pull/111496
+[#111497]: https://github.com/home-assistant/core/pull/111497
+[#111498]: https://github.com/home-assistant/core/pull/111498
+[#111499]: https://github.com/home-assistant/core/pull/111499
+[#111500]: https://github.com/home-assistant/core/pull/111500
+[#111501]: https://github.com/home-assistant/core/pull/111501
+[#111504]: https://github.com/home-assistant/core/pull/111504
+[#111507]: https://github.com/home-assistant/core/pull/111507
+[#111508]: https://github.com/home-assistant/core/pull/111508
+[#111511]: https://github.com/home-assistant/core/pull/111511
+[#111513]: https://github.com/home-assistant/core/pull/111513
+[#111519]: https://github.com/home-assistant/core/pull/111519
+[#111520]: https://github.com/home-assistant/core/pull/111520
+[#111521]: https://github.com/home-assistant/core/pull/111521
+[#111522]: https://github.com/home-assistant/core/pull/111522
+[#111523]: https://github.com/home-assistant/core/pull/111523
+[#111527]: https://github.com/home-assistant/core/pull/111527
+[#111528]: https://github.com/home-assistant/core/pull/111528
+[#111529]: https://github.com/home-assistant/core/pull/111529
+[#111530]: https://github.com/home-assistant/core/pull/111530
+[#111533]: https://github.com/home-assistant/core/pull/111533
+[#111534]: https://github.com/home-assistant/core/pull/111534
+[#111535]: https://github.com/home-assistant/core/pull/111535
+[#111536]: https://github.com/home-assistant/core/pull/111536
+[#111537]: https://github.com/home-assistant/core/pull/111537
+[#111538]: https://github.com/home-assistant/core/pull/111538
+[#111539]: https://github.com/home-assistant/core/pull/111539
+[#111541]: https://github.com/home-assistant/core/pull/111541
+[#111542]: https://github.com/home-assistant/core/pull/111542
+[#111543]: https://github.com/home-assistant/core/pull/111543
+[#111546]: https://github.com/home-assistant/core/pull/111546
+[#111547]: https://github.com/home-assistant/core/pull/111547
+[#111549]: https://github.com/home-assistant/core/pull/111549
+[#111552]: https://github.com/home-assistant/core/pull/111552
+[#111553]: https://github.com/home-assistant/core/pull/111553
+[#111554]: https://github.com/home-assistant/core/pull/111554
+[#111555]: https://github.com/home-assistant/core/pull/111555
+[#111556]: https://github.com/home-assistant/core/pull/111556
+[#111557]: https://github.com/home-assistant/core/pull/111557
+[#111558]: https://github.com/home-assistant/core/pull/111558
+[#111559]: https://github.com/home-assistant/core/pull/111559
+[#111560]: https://github.com/home-assistant/core/pull/111560
+[#111565]: https://github.com/home-assistant/core/pull/111565
+[#111567]: https://github.com/home-assistant/core/pull/111567
+[#111568]: https://github.com/home-assistant/core/pull/111568
+[#111569]: https://github.com/home-assistant/core/pull/111569
+[#111570]: https://github.com/home-assistant/core/pull/111570
+[#111571]: https://github.com/home-assistant/core/pull/111571
+[#111573]: https://github.com/home-assistant/core/pull/111573
+[#111574]: https://github.com/home-assistant/core/pull/111574
+[#111575]: https://github.com/home-assistant/core/pull/111575
+[#111578]: https://github.com/home-assistant/core/pull/111578
+[#111580]: https://github.com/home-assistant/core/pull/111580
+[#111581]: https://github.com/home-assistant/core/pull/111581
+[#111585]: https://github.com/home-assistant/core/pull/111585
+[#111586]: https://github.com/home-assistant/core/pull/111586
+[#111587]: https://github.com/home-assistant/core/pull/111587
+[#111588]: https://github.com/home-assistant/core/pull/111588
+[#111589]: https://github.com/home-assistant/core/pull/111589
+[#111590]: https://github.com/home-assistant/core/pull/111590
+[#111591]: https://github.com/home-assistant/core/pull/111591
+[#111592]: https://github.com/home-assistant/core/pull/111592
+[#111593]: https://github.com/home-assistant/core/pull/111593
+[#111594]: https://github.com/home-assistant/core/pull/111594
+[#111595]: https://github.com/home-assistant/core/pull/111595
+[#111596]: https://github.com/home-assistant/core/pull/111596
+[#111600]: https://github.com/home-assistant/core/pull/111600
+[#111601]: https://github.com/home-assistant/core/pull/111601
+[#111602]: https://github.com/home-assistant/core/pull/111602
+[#111603]: https://github.com/home-assistant/core/pull/111603
+[#111605]: https://github.com/home-assistant/core/pull/111605
+[#111608]: https://github.com/home-assistant/core/pull/111608
+[#111609]: https://github.com/home-assistant/core/pull/111609
+[#111610]: https://github.com/home-assistant/core/pull/111610
+[#111611]: https://github.com/home-assistant/core/pull/111611
+[#111612]: https://github.com/home-assistant/core/pull/111612
+[#111613]: https://github.com/home-assistant/core/pull/111613
+[#111615]: https://github.com/home-assistant/core/pull/111615
+[#111619]: https://github.com/home-assistant/core/pull/111619
+[#111620]: https://github.com/home-assistant/core/pull/111620
+[#111622]: https://github.com/home-assistant/core/pull/111622
+[#111623]: https://github.com/home-assistant/core/pull/111623
+[#111624]: https://github.com/home-assistant/core/pull/111624
+[#111625]: https://github.com/home-assistant/core/pull/111625
+[#111627]: https://github.com/home-assistant/core/pull/111627
+[#111630]: https://github.com/home-assistant/core/pull/111630
+[#111631]: https://github.com/home-assistant/core/pull/111631
+[#111635]: https://github.com/home-assistant/core/pull/111635
+[#111636]: https://github.com/home-assistant/core/pull/111636
+[#111637]: https://github.com/home-assistant/core/pull/111637
+[#111644]: https://github.com/home-assistant/core/pull/111644
+[#111647]: https://github.com/home-assistant/core/pull/111647
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#111649]: https://github.com/home-assistant/core/pull/111649
+[#111653]: https://github.com/home-assistant/core/pull/111653
+[#111654]: https://github.com/home-assistant/core/pull/111654
+[#111655]: https://github.com/home-assistant/core/pull/111655
+[#111656]: https://github.com/home-assistant/core/pull/111656
+[#111657]: https://github.com/home-assistant/core/pull/111657
+[#111658]: https://github.com/home-assistant/core/pull/111658
+[#111659]: https://github.com/home-assistant/core/pull/111659
+[#111660]: https://github.com/home-assistant/core/pull/111660
+[#111661]: https://github.com/home-assistant/core/pull/111661
+[#111662]: https://github.com/home-assistant/core/pull/111662
+[#111663]: https://github.com/home-assistant/core/pull/111663
+[#111667]: https://github.com/home-assistant/core/pull/111667
+[#111669]: https://github.com/home-assistant/core/pull/111669
+[#111670]: https://github.com/home-assistant/core/pull/111670
+[#111671]: https://github.com/home-assistant/core/pull/111671
+[#111673]: https://github.com/home-assistant/core/pull/111673
+[#111674]: https://github.com/home-assistant/core/pull/111674
+[#111675]: https://github.com/home-assistant/core/pull/111675
+[#111677]: https://github.com/home-assistant/core/pull/111677
+[#111678]: https://github.com/home-assistant/core/pull/111678
+[#111681]: https://github.com/home-assistant/core/pull/111681
+[#111686]: https://github.com/home-assistant/core/pull/111686
+[#111690]: https://github.com/home-assistant/core/pull/111690
+[#111691]: https://github.com/home-assistant/core/pull/111691
+[#111692]: https://github.com/home-assistant/core/pull/111692
+[#111693]: https://github.com/home-assistant/core/pull/111693
+[#111694]: https://github.com/home-assistant/core/pull/111694
+[#111695]: https://github.com/home-assistant/core/pull/111695
+[#111696]: https://github.com/home-assistant/core/pull/111696
+[#111697]: https://github.com/home-assistant/core/pull/111697
+[#111698]: https://github.com/home-assistant/core/pull/111698
+[#111699]: https://github.com/home-assistant/core/pull/111699
+[#111701]: https://github.com/home-assistant/core/pull/111701
+[#111702]: https://github.com/home-assistant/core/pull/111702
+[#111703]: https://github.com/home-assistant/core/pull/111703
+[#111704]: https://github.com/home-assistant/core/pull/111704
+[#111705]: https://github.com/home-assistant/core/pull/111705
+[#111707]: https://github.com/home-assistant/core/pull/111707
+[#111712]: https://github.com/home-assistant/core/pull/111712
+[#111714]: https://github.com/home-assistant/core/pull/111714
+[#111715]: https://github.com/home-assistant/core/pull/111715
+[#111716]: https://github.com/home-assistant/core/pull/111716
+[#111717]: https://github.com/home-assistant/core/pull/111717
+[#111718]: https://github.com/home-assistant/core/pull/111718
+[#111719]: https://github.com/home-assistant/core/pull/111719
+[#111720]: https://github.com/home-assistant/core/pull/111720
+[#111723]: https://github.com/home-assistant/core/pull/111723
+[#111724]: https://github.com/home-assistant/core/pull/111724
+[#111726]: https://github.com/home-assistant/core/pull/111726
+[#111728]: https://github.com/home-assistant/core/pull/111728
+[#111736]: https://github.com/home-assistant/core/pull/111736
+[#111741]: https://github.com/home-assistant/core/pull/111741
+[#111743]: https://github.com/home-assistant/core/pull/111743
+[#111749]: https://github.com/home-assistant/core/pull/111749
+[#111751]: https://github.com/home-assistant/core/pull/111751
+[#111752]: https://github.com/home-assistant/core/pull/111752
+[#111763]: https://github.com/home-assistant/core/pull/111763
+[#111765]: https://github.com/home-assistant/core/pull/111765
+[#111766]: https://github.com/home-assistant/core/pull/111766
+[#111768]: https://github.com/home-assistant/core/pull/111768
+[#111770]: https://github.com/home-assistant/core/pull/111770
+[#111772]: https://github.com/home-assistant/core/pull/111772
+[#111774]: https://github.com/home-assistant/core/pull/111774
+[#111776]: https://github.com/home-assistant/core/pull/111776
+[#111778]: https://github.com/home-assistant/core/pull/111778
+[#111781]: https://github.com/home-assistant/core/pull/111781
+[#111782]: https://github.com/home-assistant/core/pull/111782
+[#111785]: https://github.com/home-assistant/core/pull/111785
+[#111786]: https://github.com/home-assistant/core/pull/111786
+[#111787]: https://github.com/home-assistant/core/pull/111787
+[#111788]: https://github.com/home-assistant/core/pull/111788
+[#111789]: https://github.com/home-assistant/core/pull/111789
+[#111790]: https://github.com/home-assistant/core/pull/111790
+[#111791]: https://github.com/home-assistant/core/pull/111791
+[#111792]: https://github.com/home-assistant/core/pull/111792
+[#111800]: https://github.com/home-assistant/core/pull/111800
+[#111802]: https://github.com/home-assistant/core/pull/111802
+[#111840]: https://github.com/home-assistant/core/pull/111840
+[#111859]: https://github.com/home-assistant/core/pull/111859
+[#111867]: https://github.com/home-assistant/core/pull/111867
+[#111868]: https://github.com/home-assistant/core/pull/111868
+[#111870]: https://github.com/home-assistant/core/pull/111870
+[#111875]: https://github.com/home-assistant/core/pull/111875
+[#111876]: https://github.com/home-assistant/core/pull/111876
+[#111879]: https://github.com/home-assistant/core/pull/111879
+[#111885]: https://github.com/home-assistant/core/pull/111885
+[#111890]: https://github.com/home-assistant/core/pull/111890
+[#111892]: https://github.com/home-assistant/core/pull/111892
+[#111898]: https://github.com/home-assistant/core/pull/111898
+[#111903]: https://github.com/home-assistant/core/pull/111903
+[#111930]: https://github.com/home-assistant/core/pull/111930
+[#111961]: https://github.com/home-assistant/core/pull/111961
+[#111969]: https://github.com/home-assistant/core/pull/111969
+[#112002]: https://github.com/home-assistant/core/pull/112002
+[#112006]: https://github.com/home-assistant/core/pull/112006
+[#112034]: https://github.com/home-assistant/core/pull/112034
+[#112035]: https://github.com/home-assistant/core/pull/112035
+[#112037]: https://github.com/home-assistant/core/pull/112037
+[#112040]: https://github.com/home-assistant/core/pull/112040
+[#112052]: https://github.com/home-assistant/core/pull/112052
+[#112056]: https://github.com/home-assistant/core/pull/112056
+[#112060]: https://github.com/home-assistant/core/pull/112060
+[#112062]: https://github.com/home-assistant/core/pull/112062
+[#112064]: https://github.com/home-assistant/core/pull/112064
+[#112066]: https://github.com/home-assistant/core/pull/112066
+[#112068]: https://github.com/home-assistant/core/pull/112068
+[#112079]: https://github.com/home-assistant/core/pull/112079
+[#112082]: https://github.com/home-assistant/core/pull/112082
+[#112084]: https://github.com/home-assistant/core/pull/112084
+[#112085]: https://github.com/home-assistant/core/pull/112085
+[#112116]: https://github.com/home-assistant/core/pull/112116
+[#112117]: https://github.com/home-assistant/core/pull/112117
+[#112124]: https://github.com/home-assistant/core/pull/112124
+[#112125]: https://github.com/home-assistant/core/pull/112125
+[#112140]: https://github.com/home-assistant/core/pull/112140
+[#112146]: https://github.com/home-assistant/core/pull/112146
+[#112152]: https://github.com/home-assistant/core/pull/112152
+[#112238]: https://github.com/home-assistant/core/pull/112238
+[#112263]: https://github.com/home-assistant/core/pull/112263
+[#112264]: https://github.com/home-assistant/core/pull/112264
+[#112266]: https://github.com/home-assistant/core/pull/112266
+[#112434]: https://github.com/home-assistant/core/pull/112434
+[#112435]: https://github.com/home-assistant/core/pull/112435
+[#112437]: https://github.com/home-assistant/core/pull/112437
+[#112442]: https://github.com/home-assistant/core/pull/112442
+[#112450]: https://github.com/home-assistant/core/pull/112450
+[#112481]: https://github.com/home-assistant/core/pull/112481
+[#112492]: https://github.com/home-assistant/core/pull/112492
+[#112495]: https://github.com/home-assistant/core/pull/112495
+[#112500]: https://github.com/home-assistant/core/pull/112500
+[#88655]: https://github.com/home-assistant/core/pull/88655
+[#89155]: https://github.com/home-assistant/core/pull/89155
+[#95093]: https://github.com/home-assistant/core/pull/95093
+[#96044]: https://github.com/home-assistant/core/pull/96044
+[#96773]: https://github.com/home-assistant/core/pull/96773
+[#96906]: https://github.com/home-assistant/core/pull/96906
+[#97023]: https://github.com/home-assistant/core/pull/97023
+[#97206]: https://github.com/home-assistant/core/pull/97206
+[#97401]: https://github.com/home-assistant/core/pull/97401
+[#97402]: https://github.com/home-assistant/core/pull/97402
+[#99573]: https://github.com/home-assistant/core/pull/99573
+[#99899]: https://github.com/home-assistant/core/pull/99899
+[@AidasK]: https://github.com/AidasK
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Augar]: https://github.com/Augar
+[@Betacart]: https://github.com/Betacart
+[@Bre77]: https://github.com/Bre77
+[@CFenner]: https://github.com/CFenner
+[@DeerMaximum]: https://github.com/DeerMaximum
+[@Drafteed]: https://github.com/Drafteed
+[@Ernst79]: https://github.com/Ernst79
+[@FedDam]: https://github.com/FedDam
+[@Floris272]: https://github.com/Floris272
+[@IsakNyberg]: https://github.com/IsakNyberg
+[@Jc2k]: https://github.com/Jc2k
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@Lash-L]: https://github.com/Lash-L
+[@LennP]: https://github.com/LennP
+[@MarkGodwin]: https://github.com/MarkGodwin
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@Minims]: https://github.com/Minims
+[@Moustachauve]: https://github.com/Moustachauve
+[@Nirostar]: https://github.com/Nirostar
+[@Noltari]: https://github.com/Noltari
+[@OnFreund]: https://github.com/OnFreund
+[@Orhideous]: https://github.com/Orhideous
+[@PiotrMachowski]: https://github.com/PiotrMachowski
+[@Shulyaka]: https://github.com/Shulyaka
+[@StephenBrown2]: https://github.com/StephenBrown2
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@TheNoim]: https://github.com/TheNoim
+[@Thomas55555]: https://github.com/Thomas55555
+[@Tronix117]: https://github.com/Tronix117
+[@abmantis]: https://github.com/abmantis
+[@akx]: https://github.com/akx
+[@allenporter]: https://github.com/allenporter
+[@arturpragacz]: https://github.com/arturpragacz
+[@astrandb]: https://github.com/astrandb
+[@autinerd]: https://github.com/autinerd
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bbernhard]: https://github.com/bbernhard
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bouwew]: https://github.com/bouwew
+[@bramkragten]: https://github.com/bramkragten
+[@brenank]: https://github.com/brenank
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@cgarwood]: https://github.com/cgarwood
+[@chamberlain2007]: https://github.com/chamberlain2007
+[@chammp]: https://github.com/chammp
+[@chelming]: https://github.com/chelming
+[@chemelli74]: https://github.com/chemelli74
+[@codyc1515]: https://github.com/codyc1515
+[@cottsay]: https://github.com/cottsay
+[@crhan]: https://github.com/crhan
+[@crug80]: https://github.com/crug80
+[@ctalkington]: https://github.com/ctalkington
+[@dcmeglio]: https://github.com/dcmeglio
+[@deosrc]: https://github.com/deosrc
+[@dieselrabbit]: https://github.com/dieselrabbit
+[@dknowles2]: https://github.com/dknowles2
+[@dmulcahey]: https://github.com/dmulcahey
+[@dotvav]: https://github.com/dotvav
+[@dougiteixeira]: https://github.com/dougiteixeira
+[@drsgoodall]: https://github.com/drsgoodall
+[@dupondje]: https://github.com/dupondje
+[@eclair4151]: https://github.com/eclair4151
+[@edenhaus]: https://github.com/edenhaus
+[@eifinger]: https://github.com/eifinger
+[@elmurato]: https://github.com/elmurato
+[@elupus]: https://github.com/elupus
+[@emontnemery]: https://github.com/emontnemery
+[@engrbm87]: https://github.com/engrbm87
+[@erwindouna]: https://github.com/erwindouna
+[@exxamalte]: https://github.com/exxamalte
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@hahn-th]: https://github.com/hahn-th
+[@iMicknl]: https://github.com/iMicknl
+[@iliessens]: https://github.com/iliessens
+[@janiversen]: https://github.com/janiversen
+[@janrothkegel]: https://github.com/janrothkegel
+[@jbouwh]: https://github.com/jbouwh
+[@jeeftor]: https://github.com/jeeftor
+[@jesserockz]: https://github.com/jesserockz
+[@jimmyd-be]: https://github.com/jimmyd-be
+[@jjlawren]: https://github.com/jjlawren
+[@jkossis]: https://github.com/jkossis
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@jrieger]: https://github.com/jrieger
+[@kbickar]: https://github.com/kbickar
+[@killer0071234]: https://github.com/killer0071234
+[@kingy444]: https://github.com/kingy444
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@krmarien]: https://github.com/krmarien
+[@lellky]: https://github.com/lellky
+[@livioavalle]: https://github.com/livioavalle
+[@ludeeus]: https://github.com/ludeeus
+[@marcelveldt]: https://github.com/marcelveldt
+[@marcolettieri]: https://github.com/marcolettieri
+[@matrixd2]: https://github.com/matrixd2
+[@mdegat01]: https://github.com/mdegat01
+[@mdonoughe]: https://github.com/mdonoughe
+[@miaucl]: https://github.com/miaucl
+[@mib1185]: https://github.com/mib1185
+[@mikeodr]: https://github.com/mikeodr
+[@mill1000]: https://github.com/mill1000
+[@mkmer]: https://github.com/mkmer
+[@niro1987]: https://github.com/niro1987
+[@ol-iver]: https://github.com/ol-iver
+[@ollo69]: https://github.com/ollo69
+[@pajzo]: https://github.com/pajzo
+[@pawlizio]: https://github.com/pawlizio
+[@piitaya]: https://github.com/piitaya
+[@pilotopirx]: https://github.com/pilotopirx
+[@pree]: https://github.com/pree
+[@puddly]: https://github.com/puddly
+[@raman325]: https://github.com/raman325
+[@rb28z2]: https://github.com/rb28z2
+[@rfleming71]: https://github.com/rfleming71
+[@rikroe]: https://github.com/rikroe
+[@rkruisselbrink]: https://github.com/rkruisselbrink
+[@rlippmann]: https://github.com/rlippmann
+[@rytilahti]: https://github.com/rytilahti
+[@sairon]: https://github.com/sairon
+[@sdb9696]: https://github.com/sdb9696
+[@snoack]: https://github.com/snoack
+[@some-guy-23]: https://github.com/some-guy-23
+[@spycle]: https://github.com/spycle
+[@stackia]: https://github.com/stackia
+[@starkillerOG]: https://github.com/starkillerOG
+[@steffenrapp]: https://github.com/steffenrapp
+[@swartzd]: https://github.com/swartzd
+[@swistakm]: https://github.com/swistakm
+[@synesthesiam]: https://github.com/synesthesiam
+[@thecode]: https://github.com/thecode
+[@timmo001]: https://github.com/timmo001
+[@tkdrob]: https://github.com/tkdrob
+[@tl-sl]: https://github.com/tl-sl
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@tronikos]: https://github.com/tronikos
+[@wittypluck]: https://github.com/wittypluck
+[@yanuino]: https://github.com/yanuino
+[@yozik04]: https://github.com/yozik04
+[@zweckj]: https://github.com/zweckj
diff --git a/source/changelogs/core-2024.4.markdown b/source/changelogs/core-2024.4.markdown
new file mode 100644
index 000000000000..a7d0caa5d982
--- /dev/null
+++ b/source/changelogs/core-2024.4.markdown
@@ -0,0 +1,3433 @@
+---
+title: Full changelog for Home Assistant Core 2024.4
+description: Detailed changelog for the Home Assistant Core 2024.4 release
+replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$
+---
+
+These are all the changes included in the Home Assistant Core 2024.4 release.
+
+For a summary in a more readable format:
+[Release notes blog for this release](/blog/2024/04/03/release-20244/).
+
+## All changes
+
+- Add permobil entity ([@IsakNyberg] - [#111761])
+- Bump version to 2024.4.0.dev0 ([@bramkragten] - [#111755])
+- Improve zha coordinator typing ([@cdce8p] - [#111767])
+- Add normalized name registry items base class ([@jpbede] - [#111666])
+- Remove 'values' from services validation ([@balloob] - [#111440])
+- Use proper constant in Airzone Cloud climate tests ([@Noltari] - [#111747])
+- Axis improve coverage binary tests ([@Kane610] - [#111758])
+- Add icon translations to Hue ([@joostlek] - [#111725])
+- Import enphase_envoy in the executor to avoid blocking the event loop ([@bdraco] - [#111805])
+- Add icon translations to IPP ([@joostlek] - [#111846])
+- Import discovergy in the executor to avoid blocking the event loop ([@jpbede] - [#111824])
+- Import homekit in the executor to avoid blocking the event loop ([@bdraco] - [#111809])
+- Import upnp in the executor to avoid blocking the event loop ([@bdraco] - [#111808])
+- Import logbook in the executor to avoid blocking the event loop ([@bdraco] - [#111807])
+- Import flux_led in the executor to avoid blocking the event loop ([@bdraco] - [#111806])
+- Import rest in the executor to avoid blocking the event loop ([@bdraco] - [#111804])
+- Remove areas template filter ([@emontnemery] - [#111827])
+- Add generic classes BaseFlowHandler and BaseFlowManager ([@emontnemery] - [#111814])
+- Remove unused translation key from Ecovacs mower ([@edenhaus] - [#111754])
+- Add icon translations to Laundrify ([@joostlek] - [#111856])
+- Add icon translations to Lastfm ([@joostlek] - [#111855])
+- Add icon translations to Justnimbus ([@joostlek] - [#111849])
+- Add icon translations to Kaleidescape ([@joostlek] - [#111850])
+- Add icon translations to Intellifire ([@joostlek] - [#111845])
+- Add icon translations to KNX ([@joostlek] - [#111852])
+- Migrate integrations a-d to generic flowhandler ([@emontnemery] - [#111861])
+- Migrate integrations e-h to generic flowhandler ([@emontnemery] - [#111862])
+- Migrate integrations u-z to generic flowhandler ([@emontnemery] - [#111866])
+- Migrate integrations i-m to generic flowhandler ([@emontnemery] - [#111863])
+- Migrate integrations n-r to generic flowhandler ([@emontnemery] - [#111864])
+- Migrate integrations s-t to generic flowhandler ([@emontnemery] - [#111865])
+- Switch influxdb to use a SimpleQueue ([@bdraco] - [#111798])
+- Remove unused variable in stats _sorted_statistics_to_dict ([@bdraco] - [#111912])
+- Add person tracking for UniFi Protect ([@AngellusMortis] - [#111289])
+- Add Vallox filter replacement date ([@yozik04] - [#111391])
+- Bump actions/cache from 4.0.0 to 4.0.1 (@dependabot - [#111916])
+- Bump github/codeql-action from 3.24.5 to 3.24.6 (@dependabot - [#111917])
+- Add icon translations to Kodi ([@joostlek] - [#111853])
+- Add icon translations to Enocean ([@joostlek] - [#111514])
+- Add icon translations to EZVIZ ([@joostlek] - [#111532])
+- Add icon translations to Flipr ([@joostlek] - [#111540])
+- Add icon translations to Flux LED ([@joostlek] - [#111545])
+- Add icon translations to Hydrawise ([@joostlek] - [#111810])
+- Add reconfigure step to config flow ([@gjohansson-ST] - [#108794])
+- Add icon translations to Medcom BLE ([@joostlek] - [#111904])
+- Add icon translations to Keymitt BLE ([@joostlek] - [#111851])
+- Add icon translations to IFTTT ([@joostlek] - [#111842])
+- Add icon translations to Idasen desk ([@joostlek] - [#111813])
+- Add icon translations to Lidarr ([@joostlek] - [#111896])
+- Add icon translations to LCN ([@joostlek] - [#111895])
+- Remove config flow specifics from FlowResult ([@emontnemery] - [#111932])
+- Add icon translations to LifX ([@joostlek] - [#111897])
+- Add icon translations to min max ([@joostlek] - [#111908])
+- Add icon translations to Minecraft Server ([@joostlek] - [#111928])
+- Add icon translations to Mill ([@joostlek] - [#111907])
+- Update mypy to a custom version ([@cdce8p] - [#111258])
+- Add icon translations to Litterrobot ([@joostlek] - [#111899])
+- Add icon translations to Local IP ([@joostlek] - [#111900])
+- Add icon translations to Lyric ([@joostlek] - [#111902])
+- Add icon translations to Motioneye ([@joostlek] - [#111936])
+- Add icon translations to Monoprice ([@joostlek] - [#111934])
+- Fix utility meter reset without tarrifs ([@gibwar] - [#102884])
+- Fix LingeringTask after test completion in enphase_envoy ([@catsmanac] - [#111940])
+- Fix loader test warning ([@cdce8p] - [#111965])
+- Add icon translations to MQTT ([@joostlek] - [#111945])
+- Add icon translations to Neato ([@joostlek] - [#111947])
+- Add icon translations to Nanoleaf ([@joostlek] - [#111946])
+- Add icon translations to Motion blinds ([@joostlek] - [#111935])
+- Add icon translations to Modem callerID ([@joostlek] - [#111929])
+- Use default icon for Melcloud ([@joostlek] - [#111905])
+- Fix generic HassJob typing ([@cdce8p] - [#111973])
+- Fix util create_eager_task typing ([@cdce8p] - [#111976])
+- Add icon translations to OpenUV ([@joostlek] - [#111996])
+- Add icon translations to Notion ([@joostlek] - [#111984])
+- Add icon translations to Modern Forms ([@joostlek] - [#111933])
+- Add icon translations to Nextcloud ([@joostlek] - [#111982])
+- Add icon translations to NZBGet ([@joostlek] - [#111985])
+- Add icon translations to Netgear LTE ([@joostlek] - [#111974])
+- Add icon translations to Omnilogic ([@joostlek] - [#111989])
+- Add icon translations to Ondilo ico ([@joostlek] - [#111990])
+- Add icon translations to Octoprint ([@joostlek] - [#111988])
+- Add icon translations to Opensky ([@joostlek] - [#111994])
+- Add icon translations to Openhome ([@joostlek] - [#111993])
+- Add icon translations to OpenAI Conversation ([@joostlek] - [#111992])
+- Add icon translations to ovo energy ([@joostlek] - [#111997])
+- Reduce ESPHome reconnect time ([@bdraco] - [#112001])
+- Reduce samsungtv startup time ([@bdraco] - [#112007])
+- Convert command_line to use asyncio for subprocesses ([@bdraco] - [#111927])
+- Apply better names to a couple of dicts in Axis config flow ([@Kane610] - [#111964])
+- Add icon translations to Nmap tracker ([@joostlek] - [#111983])
+- Add icon translations to Opentherm gw ([@joostlek] - [#111995])
+- Add entity and icon translations to Onvif ([@joostlek] - [#111991])
+- Add icon translations to Netgear ([@joostlek] - [#111972])
+- Remove deprecated `hass.components.hassio` usage ([@jpbede] - [#111878])
+- Streamline naming in the Axis integration ([@Kane610] - [#112044])
+- Simplify load_executor check in loader ([@bdraco] - [#112029])
+- Import co2signal in the executor to avoid blocking the event loop ([@bdraco] - [#112058])
+- Import ambient_station in the executor to avoid blocking the event loop ([@bdraco] - [#112053])
+- Refactor file_upload to avoid janus dep ([@bdraco] - [#112032])
+- Import snmp in the executor to avoid blocking the event loop ([@bdraco] - [#112065])
+- Pre-import more frontend deps to avoid importing when the event loop is running ([@bdraco] - [#112031])
+- Switch config to use async_get_component/async_get_platform ([@bdraco] - [#112071])
+- Import switchbot in the executor to avoid blocking the event loop ([@bdraco] - [#112077])
+- Import smtp in the executor to avoid blocking the loop ([@bdraco] - [#112089])
+- Import integrations using sense-energy in the executor to avoid loop blocking ([@bdraco] - [#112087])
+- Import baf in the executor to avoid blocking the event loop ([@bdraco] - [#112086])
+- Import caldav in the executor to avoid blocking the event loop ([@bdraco] - [#112081])
+- Import yeelight in the executor to avoid blocking the event loop ([@bdraco] - [#112080])
+- Import template in the executor to avoid blocking the event loop ([@bdraco] - [#112070])
+- Import stream in the executor to avoid blocking the event loop ([@bdraco] - [#112078])
+- Avoid trying to import platforms that do not exist ([@bdraco] - [#112028])
+- Preload platform integrations to better group executor usage ([@bdraco] - [#112010])
+- Move Ping binary sensor attributes to sensor entities ([@jpbede] - [#112004])
+- Add YoLInk YS7905-UC Support ([@matrixd2] - [#111709])
+- Fix flakey airzone_cloud tests by avoiding creation of the websocket ([@Noltari] - [#112102])
+- Add icon translations to Nextbus ([@joostlek] - [#111981])
+- Add icon translations to Nexia ([@joostlek] - [#111980])
+- Add tests for number of devices created in myuplink ([@astrandb] - [#111816])
+- Load wyoming in the executor to avoid blocking the event loop ([@bdraco] - [#112107])
+- Add event platform to rfxtrx ([@elupus] - [#111526])
+- Add comment to integration platform helper about blocking I/O ([@bdraco] - [#112103])
+- Address late review for Ping ([@jpbede] - [#112123])
+- Import steamist in the executor to avoid blocking the loop ([@bdraco] - [#112111])
+- Move all System Monitor updates into single Data Update Coordinator ([@gjohansson-ST] - [#112055])
+- Add the ability to resume cleaning on start button ([@Lash-L] - [#112122])
+- Clean up setup and teardown of Axis integration ([@Kane610] - [#112120])
+- Exclude tankerkoenig attributes from recording ([@jpbede] - [#112109])
+- Avoid calling async_get_component twice for each component being setup ([@bdraco] - [#112096])
+- Import screenlogic in the executor to avoid blocking the loop ([@bdraco] - [#112097])
+- Avoid compiling entity service schema when passed defaults ([@bdraco] - [#112099])
+- Add package detection to Reolink ([@starkillerOG] - [#112126])
+- Try to preload the config platform when loading a component ([@bdraco] - [#112104])
+- Fix flakey tplink test ([@bdraco] - [#112135])
+- Add icon translations to Melnor ([@joostlek] - [#111906])
+- Ensure setup loads top level component before platforms ([@bdraco] - [#112057])
+- Add Reolink PTZ patrol start/stop ([@starkillerOG] - [#112129])
+- Fix async_prepare_setup_platform test ([@bdraco] - [#112143])
+- Fix places not changed to hub in Axis tests ([@Kane610] - [#112128])
+- Split up hassio coordinator and data into new file to allow preload ([@bdraco] - [#112147])
+- Preload config flow if it exists when loading a component ([@bdraco] - [#112145])
+- Migrate condition/state/trigger helper to use async_get_platform ([@bdraco] - [#112144])
+- Use MockConfigEntry in hue tests ([@bdraco] - [#112149])
+- Fix async_get_component loading in the executor when the module is already loaded ([@bdraco] - [#112153])
+- Add types throughout the prometheus tests ([@agoode] - [#112156])
+- Run more of hassio setup in in tasks ([@bdraco] - [#112151])
+- Streamline UniFi entity descriptions ([@Kane610] - [#112136])
+- Avoid multiple executor jobs with concurrent calls to async_get_component ([@bdraco] - [#112155])
+- Ignore unsupported devices (room sensors, floor heating) in ViCare integration ([@CFenner] - [#112106])
+- Group loading of platforms in the import executor ([@bdraco] - [#112141])
+- Improve mqtt value template error logging ([@jbouwh] - [#110492])
+- Import recorder and common recorder platforms before asyncio starts ([@bdraco] - [#112131])
+- Group platform loads in homekit_controller to minimize executor use ([@bdraco] - [#112148])
+- Avoid using coordinator in config flow of APCUPSD ([@yuxincs] - [#112121])
+- Update System Bridge to support version 4.x.x and above ([@timmo001] - [#107957])
+- Add local API support to elmax ([@albertogeniola] - [#94392])
+- Bump actions/download-artifact from 4.1.3 to 4.1.4 (@dependabot - [#112159])
+- Remove unused test helper mock_area_registry ([@emontnemery] - [#112172])
+- Migrate config to use async_get_component ([@bdraco] - [#112160])
+- Migrate device_automation to use async_get_platform ([@bdraco] - [#112162])
+- Migrate rest to use eager tasks for setup ([@bdraco] - [#112166])
+- Migrate application_credentials to use async_get_platform ([@bdraco] - [#112161])
+- Import in the executor by default for core integrations ([@bdraco] - [#112127])
+- Update systembridgeconnector to 4.0.2 ([@timmo001] - [#112174])
+- Issues template function ([@RoboMagus] - [#95206])
+- Fix pylint/mypy on elmax integration ([@Noltari] - [#112211])
+- Add icon translations to Snapcast ([@joostlek] - [#112229])
+- Add icon translations to Rainbird ([@joostlek] - [#112200])
+- Add icon translations to RFXCOM RFXtrx ([@joostlek] - [#112209])
+- Add icon translations to Simplisafe ([@joostlek] - [#112224])
+- Add icon translations to Ridwell ([@joostlek] - [#112210])
+- Add icon translations to Recollect Waste ([@joostlek] - [#112204])
+- Add icon translations to Private BLE Device ([@joostlek] - [#112185])
+- Add icon translations to PurpleAir ([@joostlek] - [#112192])
+- Add icon translations to Rainmachine ([@joostlek] - [#112202])
+- Add icon translations to Renault ([@joostlek] - [#112205])
+- Add icon translations to Solarlog ([@joostlek] - [#112232])
+- Add icon translations to Songpal ([@joostlek] - [#112234])
+- Add icon translations to Philips TV ([@joostlek] - [#112179])
+- Add icon translations to Smarttub ([@joostlek] - [#112227])
+- Add icon translations to sabNZBd ([@joostlek] - [#112219])
+- Add icon translations to Slack ([@joostlek] - [#112226])
+- Add icon translations to Season ([@joostlek] - [#112221])
+- Add icon translations to Screenlogic ([@joostlek] - [#112220])
+- Change log level for System Bridge service handlers ([@timmo001] - [#112175])
+- Add icon translations to Roon ([@joostlek] - [#112218])
+- Add icon translations to Swiss public transport ([@joostlek] - [#112254])
+- Address srp_energy late review comment ([@briglx] - [#105756])
+- Add Hyperion sensor to report active priority on each instance ([@belangp] - [#102333])
+- Add icon translations to Sensibo ([@joostlek] - [#112222])
+- Fix authentication issues for asekopool ([@hopkins-tk] - [#99495])
+- Fix spaceapi attribute for closed icon ([@Xiretza] - [#108596])
+- Add sensor platform to Teslemetry ([@Bre77] - [#109088])
+- Add config flow to homeworks ([@emontnemery] - [#112042])
+- Enable strict typing of homeworks ([@emontnemery] - [#112267])
+- Add device and enable entity name for Lutron homeworks ([@emontnemery] - [#112268])
+- Add icon translations to Steamist ([@joostlek] - [#112246])
+- Add icon translations to Starlink ([@joostlek] - [#112244])
+- Add icon translations to Squeezebox ([@joostlek] - [#112240])
+- Add icon translations to Streamlabswater ([@joostlek] - [#112247])
+- Add permobil binary sensor ([@IsakNyberg] - [#112130])
+- Add icon translations to Sure Petcare ([@joostlek] - [#112253])
+- Add icon translations to Spotify ([@joostlek] - [#112239])
+- Remove callback decorator from coroutine ([@Kane610] - [#112276])
+- Update pytest to 8.1.0 ([@cdce8p] - [#112173])
+- Reduce some linear searches to cleanup the device registry ([@bdraco] - [#112277])
+- Ensure hassio diagnostics get imported with the integration ([@bdraco] - [#112286])
+- Add support for preloading platforms in the loader ([@bdraco] - [#112282])
+- Add icon translations to Elkm1 ([@joostlek] - [#111512])
+- Refactor integration platforms to import in the executor ([@bdraco] - [#112168])
+- Remove unnecessary access to UniFi hub object in tests ([@Kane610] - [#112275])
+- Add icon translations to SMS ([@joostlek] - [#112228])
+- Add icon translations to Rainforest Raven ([@joostlek] - [#112201])
+- Add icon translations to Plum lightpad ([@joostlek] - [#112183])
+- Add icon translations to Profiler ([@joostlek] - [#112186])
+- Add icon translations to Prosegur ([@joostlek] - [#112187])
+- Add icon translations to Prusalink ([@joostlek] - [#112188])
+- Add icon translations to PS4 ([@joostlek] - [#112190])
+- Add icon translations to QBittorrent ([@joostlek] - [#112193])
+- Add icon translations to QNap QSW ([@joostlek] - [#112194])
+- Add icon translations to Rachio ([@joostlek] - [#112195])
+- Add icon translations to Radarr ([@joostlek] - [#112196])
+- Add icon translations to Radiotherm ([@joostlek] - [#112197])
+- Add icon translations to RDW ([@joostlek] - [#112203])
+- Add icon translations to Renson ([@joostlek] - [#112207])
+- Add icon translations to Ring ([@joostlek] - [#112212])
+- Add icon translations to Rituals perfume genie ([@joostlek] - [#112213])
+- Add icon translations to Roomba ([@joostlek] - [#112217])
+- Add icon translations to Skybell ([@joostlek] - [#112225])
+- Add icon translations to Snooz ([@joostlek] - [#112230])
+- Add icon translations to Solaredge ([@joostlek] - [#112231])
+- Add icon translations to Soundtouch ([@joostlek] - [#112236])
+- Add icon translations to Subaru ([@joostlek] - [#112252])
+- Deprecate old config options for MQTT json light ([@jbouwh] - [#111676])
+- Add icon translations to P1 monitor ([@joostlek] - [#111998])
+- Add icon translations to Speedtestdotnet ([@joostlek] - [#112237])
+- Use default icon in Romy ([@joostlek] - [#112215])
+- Add icon translations to Shopping list ([@joostlek] - [#112223])
+- Add icon translations to Pi-hole ([@joostlek] - [#112180])
+- Add icon translations to PECO ([@joostlek] - [#112169])
+- Add icon translations to Permobil ([@joostlek] - [#112170])
+- Add icon translations to Plex ([@joostlek] - [#112182])
+- Cleanup rainbird aiohttp client cleanup on EVENT_HOMEASSISTANT_CLOSE ([@allenporter] - [#112292])
+- Add icon translations to Switcher kis ([@joostlek] - [#112296])
+- Add icon translations to Systemmonitor ([@joostlek] - [#112300])
+- Add icon translations to Tautulli ([@joostlek] - [#112305])
+- Add icon translations to Trafikverket Train ([@joostlek] - [#112322])
+- Add icon translations to Trafikverket Ferry ([@joostlek] - [#112321])
+- Add icon translations to Trafikverket Camera ([@joostlek] - [#112320])
+- Add icon translations to Trafikverket Weather station ([@joostlek] - [#112323])
+- Add icon translations to Workday ([@joostlek] - [#112359])
+- Add icon translations to Yale ([@joostlek] - [#112361])
+- Add icon translations to YouTube ([@joostlek] - [#112365])
+- Add icon translations to YoLink ([@joostlek] - [#112364])
+- Add icon translations to Yardian ([@joostlek] - [#112362])
+- Add icon translations to Xiaomi Aqara ([@joostlek] - [#112360])
+- Add icon translations to Weatherkit ([@joostlek] - [#112354])
+- Add icon translations to Synology DSM ([@joostlek] - [#112299])
+- Add icon translations to Trend ([@joostlek] - [#112325])
+- Add icon translations to TP-Link ([@joostlek] - [#112317])
+- Add icon translations to Tesla Wall Connector ([@joostlek] - [#112309])
+- Add icon translations to Tolo ([@joostlek] - [#112313])
+- Add icon translations to Tile ([@joostlek] - [#112310])
+- Add icon translations to Todoist ([@joostlek] - [#112312])
+- Add icon translations to Template ([@joostlek] - [#112308])
+- Add icon translations to Syncthing ([@joostlek] - [#112297])
+- Add icon translations to Tedee ([@joostlek] - [#112307])
+- Update aioairzone-cloud to v0.4.6 ([@Noltari] - [#112198])
+- Add support for System Bridge service responses ([@timmo001] - [#100055])
+- Remove async_entity_ids and get_entity_ids from entity registry ([@bdraco] - [#112311])
+- Add Beaufort to wind_speed ([@fwestenberg] - [#105795])
+- Add icon translations to WebOS TV ([@joostlek] - [#112355])
+- Add icon translations to Watttime ([@joostlek] - [#112351])
+- Add icon translations to Uptimerobot ([@joostlek] - [#112336])
+- Initialize triggers eagerly ([@bdraco] - [#112294])
+- Migrate remaining calls in config modules to async_get_component ([@bdraco] - [#112293])
+- Migrate system flows to use the discovery helper ([@bdraco] - [#112291])
+- Simplify loader preload logic for config_flows ([@bdraco] - [#112290])
+- Remove entity description mixin in Accuweather ([@joostlek] - [#112375])
+- Remove entity description mixin in Bravia TV ([@joostlek] - [#112395])
+- Remove entity description mixin in Brother ([@joostlek] - [#112396])
+- Add icon translations to Vizio ([@joostlek] - [#112348])
+- Remove entity description mixin in Balboa ([@joostlek] - [#112389])
+- Remove entity description mixin in BMW ([@joostlek] - [#112391])
+- Remove entity description mixin in Bond ([@joostlek] - [#112393])
+- Remove entity description mixin in Bosch SHC ([@joostlek] - [#112394])
+- Remove entity description mixin in Dovado ([@joostlek] - [#112402])
+- Remove entity description mixin in Ecobee ([@joostlek] - [#112408])
+- Add icon translations to Vodafone Station ([@joostlek] - [#112349])
+- Remove entity description mixin in AirQ ([@joostlek] - [#112377])
+- Remove entity description mixin in Aladdin Connect ([@joostlek] - [#112379])
+- Remove entity description mixin in Azure DevOps ([@joostlek] - [#112385])
+- Add comments why we use loop.create_task in core ([@MartinHjelmare] - [#112372])
+- Remove entity description mixin in Dormakaba dKey ([@joostlek] - [#112401])
+- Add button to homeworks ([@emontnemery] - [#112269])
+- Remove entity description mixin in Airzone ([@joostlek] - [#112378])
+- Remove list comprehension when adding entities in Nextcloud ([@jpbede] - [#112429])
+- Remove list comprehension when adding entities in opengarage ([@jpbede] - [#112430])
+- Remove entity description mixin in Electric Kiwi ([@joostlek] - [#112411])
+- Migrate Azure DevOps to has entity name ([@joostlek] - [#112420])
+- Remove entity description mixin in Devolo Home Network ([@joostlek] - [#112399])
+- Remove list comprehension when adding entities in Smartthings ([@jpbede] - [#112432])
+- Remove list comprehension when adding entities in Wallbox ([@jpbede] - [#112433])
+- Remove the deprecated YAML support for Aftership ([@jpbede] - [#112390])
+- Add icon translations to Azure DevOps ([@joostlek] - [#112436])
+- Small cleanup in Dexcom ([@joostlek] - [#112425])
+- Break out UniFi config handling to own class ([@Kane610] - [#111325])
+- Rename reconfigure step in apple_tv ([@gjohansson-ST] - [#112438])
+- Remove myself as a codeowner for neato ([@dshokouhi] - [#112410])
+- Remove entity description mixin in AirNow ([@joostlek] - [#112376])
+- Add icon translations to Vilfo ([@joostlek] - [#112347])
+- Add icon translations to Verisure ([@joostlek] - [#112342])
+- Add icon translations to Vallox ([@joostlek] - [#112339])
+- Remove entity description mixin in Abode ([@joostlek] - [#112374])
+- Add icon translations to Velbus ([@joostlek] - [#112340])
+- Add icon translations to Ukraine Alarm ([@joostlek] - [#112330])
+- Add icon translations to Twitch ([@joostlek] - [#112329])
+- Remove entity description mixin in Android IP Webcam ([@joostlek] - [#112380])
+- Remove entity description mixin in Aseko ([@joostlek] - [#112382])
+- Remove entity description mixin in Awair ([@joostlek] - [#112384])
+- Remove entity description mixin in Comfoconnect ([@joostlek] - [#112397])
+- Remove entity description mixin in Daikin ([@joostlek] - [#112398])
+- Remove entity description mixin in Doorbird ([@joostlek] - [#112400])
+- Remove entity description mixin in Ecoforest ([@joostlek] - [#112409])
+- Add icon translations to Tomorrowio ([@joostlek] - [#112315])
+- Add TypeVar default for FlowResult ([@emontnemery] - [#112345])
+- Bump dorny/paths-filter from 3.0.1 to 3.0.2 (@dependabot - [#112158])
+- Bump SQLAlchemy to 2.0.28 ([@bdraco] - [#112314])
+- Pre import image_upload to avoid loading it after asyncio has started ([@bdraco] - [#112444])
+- Pre import webhook before asyncio starts ([@bdraco] - [#112441])
+- Limit legacy state translations to custom components ([@bdraco] - [#112295])
+- Remove list comprehension when adding entities in Vallox ([@jpbede] - [#112446])
+- Remove entity description mixin in BAF ([@joostlek] - [#112386])
+- Fix config modules being imported in the event loop ([@bdraco] - [#112462])
+- Adjust MAX_LOAD_CONCURRENTLY constant to allow 6 storage loaders ([@bdraco] - [#112468])
+- Add system_health to the hassio pre-imports to avoid a late executor job ([@bdraco] - [#112466])
+- Start fetching the source ip sooner in http to reduce setup time ([@bdraco] - [#112461])
+- Load network storage in a task to reduce startup time ([@bdraco] - [#112460])
+- Fix incorrect scope on checking files to load in translations ([@bdraco] - [#112457])
+- Migrate remaining get_platform in config to async_get_platform ([@bdraco] - [#112469])
+- Migrate remaining get_platform in check_config to async_get_platform ([@bdraco] - [#112470])
+- Add icon translations to Zeversolar ([@joostlek] - [#112367])
+- Remove myself as maintainer of the Rejseplanen integration ([@DarkFox] - [#112426])
+- Add icon translations to Tado ([@joostlek] - [#112301])
+- Add icon translations to iCloud ([@joostlek] - [#111812])
+- Add icon translations to Weatherflow ([@joostlek] - [#112353])
+- Add icon translations to Vesync ([@joostlek] - [#112344])
+- Add icon translations to Velux ([@joostlek] - [#112341])
+- Add icon translations to Tradfri ([@joostlek] - [#112319])
+- Add icon translations to UPnP ([@joostlek] - [#112335])
+- Add icon translations to Totalconnect ([@joostlek] - [#112316])
+- Add icon translations to TechnoVE ([@joostlek] - [#112306])
+- Add icon translations to Tami4 ([@joostlek] - [#112304])
+- Use default icon for Lupusec ([@joostlek] - [#111901])
+- Add icon translations to iBeacon ([@joostlek] - [#111811])
+- Add icon translations to V2C ([@joostlek] - [#112338])
+- Add test to ensure bootstrap continues if an integraton raises CancelledError ([@bdraco] - [#112472])
+- Avoid waiting for integration platforms in the parent integration ([@bdraco] - [#112467])
+- Add Reolink play quick reply message ([@starkillerOG] - [#112134])
+- Deprecate attributes of Nuki entities ([@steffenrapp] - [#111419])
+- Remove deprecated `hass.components` usage in config entry flow ([@jpbede] - [#111880])
+- Bump tesla-fleet-api to 0.4.9 ([@Bre77] - [#112288])
+- Remove deprecated `hass.components` usage in mobile_app ([@jpbede] - [#111888])
+- Wait to start emulated_hue until the started event ([@bdraco] - [#112477])
+- Fix detection of DLI sockets in wemo ([@bdraco] - [#112485])
+- Bump Wandalen/wretry.action from 1.4.4 to 1.4.5 (@dependabot - [#111700])
+- Remove entity description mixin in Enphase Envoy ([@joostlek] - [#112486])
+- Post System Bridge 4.x.x integration improvements ([@timmo001] - [#112189])
+- Add icon translations to Reolink ([@joostlek] - [#112208])
+- Improve integration_entities template function ([@emontnemery] - [#111943])
+- Remove constructor in WLED Options flow ([@joostlek] - [#112456])
+- Add icon translations to Tailwind ([@joostlek] - [#112303])
+- Add icon translations to Elgato ([@joostlek] - [#111423])
+- Add icon translations to Twentemilieu ([@joostlek] - [#112327])
+- Fix typo in Reolink translation keys ([@joostlek] - [#112489])
+- Remove entity description mixin in EnOcean ([@joostlek] - [#112483])
+- Add icon translations to Zone ([@joostlek] - [#112370])
+- Add icon translations to Zodiac ([@joostlek] - [#112369])
+- Add icon translations to Wilight ([@joostlek] - [#112357])
+- Add icon translations to ViCare ([@joostlek] - [#112346])
+- Add icon translations to UPB ([@joostlek] - [#112333])
+- Add icon translations to Tuya ([@joostlek] - [#112326])
+- Add icon translations to Transmission ([@joostlek] - [#112324])
+- Add icon translations to TP-Link Omada ([@joostlek] - [#112318])
+- Add icon translations to Poolsense ([@joostlek] - [#112184])
+- Add icon translations to Starline ([@joostlek] - [#112241])
+- Add icon translations to iZone ([@joostlek] - [#111848])
+- Add icon translations to isy994 ([@joostlek] - [#111847])
+- Add icon translations to Insteon ([@joostlek] - [#111844])
+- Add Shelly restart required binary sensor ([@chemelli74] - [#112493])
+- Remove entity description mixin in August ([@joostlek] - [#112383])
+- Add icon translations to Zerproc ([@joostlek] - [#112366])
+- Add icon translations to Whois ([@joostlek] - [#112356])
+- Add icon translations to Tailscale ([@joostlek] - [#112302])
+- Disable Shelly diagnostic binary sensor ([@chemelli74] - [#112497])
+- Remove entity description mixin in EasyEnergy ([@joostlek] - [#112407])
+- Remove entity description mixin in EnergyZero ([@joostlek] - [#112412])
+- Remove entity description mixin in Dremel 3D Printer ([@joostlek] - [#112405])
+- Add icon translations to Sonarr ([@joostlek] - [#112233])
+- Add icon translations to Wallbox ([@joostlek] - [#112350])
+- Enable some PERF rules ([@joostlek] - [#112498])
+- Simplify color mode logic in Tuya light ([@emontnemery] - [#110327])
+- Use an eager task for Sonos async_update_device_properties ([@bdraco] - [#112488])
+- Fix sonos overloading the executor when there are many devices ([@bdraco] - [#112482])
+- Add snapshot tests to webmin ([@autinerd] - [#112518])
+- Remove hourly weather entity from Environment Canada ([@gjohansson-ST] - [#112447])
+- Reduce executor jobs needed to setup filesize ([@bdraco] - [#112490])
+- Increase bootstrap preload test timeout ([@bdraco] - [#112520])
+- Fix homekit creating executor jobs to resolve default listen ips ([@bdraco] - [#112522])
+- Avoid importing counter and proximity integrations in logbook ([@bdraco] - [#112528])
+- Add icon translations to Waze Travel Time ([@joostlek] - [#112352])
+- Log tasks that are being waited on when startup is blocked ([@bdraco] - [#112542])
+- Move analytics setup to later stage to avoid delaying frontend startup ([@bdraco] - [#112535])
+- Pre import the rest of the recorder platforms before asyncio starts ([@bdraco] - [#112289])
+- Avoid having to work out the job type for each entity service at startup ([@bdraco] - [#112557])
+- Pass job type to event listeners when creating entities ([@bdraco] - [#112551])
+- Make HassJob job_type lookup lazy ([@bdraco] - [#112563])
+- Bump aioesphomeapi to 23.1.0 ([@jesserockz] - [#112560])
+- Speed up the frame helper ([@bdraco] - [#112562])
+- Bump Wandalen/wretry.action from 1.4.5 to 1.4.7 (@dependabot - [#112575])
+- Add icon translations to Twinkly ([@joostlek] - [#112328])
+- Make FlowResult a generic type ([@emontnemery] - [#111952])
+- Change KEY_HASS to be an aiohttp AppKey ([@cdce8p] - [#111954])
+- Avoid extracting the stack twice in system_log ([@bdraco] - [#112572])
+- Use KEY_HASS [h-z] ([@cdce8p] - [#112610])
+- Use KEY_HASS [a-g] ([@cdce8p] - [#112609])
+- Fix Bang and olufsen naming ([@joostlek] - [#111344])
+- Remove local imports of hass-nabucasa ([@emontnemery] - [#112634])
+- Log waiting tasks in bootstrap that are delaying startup ([@bdraco] - [#112637])
+- Schedule polling as periodic tasks ([@bdraco] - [#112640])
+- Fix homekit_controller delaying startup and shutdown ([@bdraco] - [#112671])
+- Fix dhcp delaying shutdown ([@bdraco] - [#112670])
+- Make zeroconf lookups background tasks ([@bdraco] - [#112669])
+- Close hue api if setup fails ([@bdraco] - [#112164])
+- Avoid writing registries to disk during startup ([@bdraco] - [#112662])
+- Bump python-telegram-bot package to 21.0.1 ([@malkstar] - [#110297])
+- Speed up importing mqtt platforms ([@bdraco] - [#112682])
+- Use aiohttp.AppKey for http ban keys ([@cdce8p] - [#112657])
+- Add TypeVar defaults for DataUpdateCoordinator ([@cdce8p] - [#111949])
+- Add reauthentication for husqvarna_automower ([@Thomas55555] - [#109930])
+- Use aiohttp.AppKey for http cors keys ([@cdce8p] - [#112658])
+- Bump devcontainer to 1-3.12 ([@edenhaus] - [#108709])
+- Update systembridgeconnector to version 4.0.3 ([@timmo001] - [#112608])
+- Make Event data generic ([@cdce8p] - [#111955])
+- Add empty line after module docstring [d-f] ([@cdce8p] - [#112698])
+- Add empty line after module docstring [s] ([@cdce8p] - [#112704])
+- Add empty line after module docstring [tests t-z] ([@cdce8p] - [#112712])
+- Add empty line after module docstring [tests q-s] ([@cdce8p] - [#112711])
+- Add empty line after module docstring [tests f-k] ([@cdce8p] - [#112709])
+- Add empty line after module docstring [tests a-e] ([@cdce8p] - [#112708])
+- Add empty line after module docstring [a-d] ([@cdce8p] - [#112697])
+- Add empty line after module docstring [g-i] ([@cdce8p] - [#112699])
+- Add empty line after module docstring [tests l-p] ([@cdce8p] - [#112710])
+- Add empty line after module docstring [j-m] ([@cdce8p] - [#112700])
+- Add empty line after module docstring [n-q] ([@cdce8p] - [#112702])
+- Add empty line after module docstring [r] ([@cdce8p] - [#112703])
+- Add empty line after module docstring [t-v] ([@cdce8p] - [#112705])
+- Add empty line after module docstring [w-z] ([@cdce8p] - [#112706])
+- Add empty line after module docstring [helpers + other] ([@cdce8p] - [#112707])
+- Remove Python 3.11 from CI ([@frenck] - [#112626])
+- Remove built-in support for import_executor in manifest ([@balloob] - [#112725])
+- Use more f-strings [ruff] ([@cdce8p] - [#112695])
+- Add empty line after module docstring (2) [components] ([@cdce8p] - [#112736])
+- Add empty line after module docstring (2) [tests.components] ([@cdce8p] - [#112737])
+- Add empty line after module docstring (2) [other] ([@cdce8p] - [#112738])
+- Replace EventType with Event [a-g] ([@cdce8p] - [#112739])
+- Replace EventType with Event [h-i] ([@cdce8p] - [#112740])
+- Replace EventType with Event [l-s] ([@cdce8p] - [#112741])
+- Replace EventType with Event [t-z] ([@cdce8p] - [#112742])
+- Replace EventType with Event [helpers] ([@cdce8p] - [#112743])
+- Add diagnostics to webmin ([@autinerd] - [#112543])
+- Update byte string formatting ([@cdce8p] - [#112752])
+- Add empty line after module docstring (3) ([@cdce8p] - [#112750])
+- Replace EventType with Event [missing] ([@cdce8p] - [#112753])
+- Update EventBus listen type signatures ([@cdce8p] - [#112760])
+- Remove entity description mixin in Fully Kiosk ([@joostlek] - [#112768])
+- Remove entity description mixin in Flume ([@joostlek] - [#112765])
+- Remove entity description mixin in HomeKit Device ([@joostlek] - [#112775])
+- Remove entity description mixin in iBeacon ([@joostlek] - [#112779])
+- Avoid trying to load translations for integrations that have none ([@bdraco] - [#112683])
+- Replace periodic tasks with background tasks ([@bdraco] - [#112726])
+- Fix race reloading homekit_controller ([@bdraco] - [#112790])
+- Add Event typing to websocket_api for entity subscriptions ([@bdraco] - [#112786])
+- Improve entity translation typing ([@bdraco] - [#112788])
+- Run service call tasks eagerly ([@bdraco] - [#112791])
+- Use Mapping as default for Event data ([@cdce8p] - [#112769])
+- Use eager_start for homeassistant triggers ([@bdraco] - [#112801])
+- Use eager_start for tasks to register integration platforms ([@bdraco] - [#112800])
+- Break out UniFi platform registration to its own class ([@Kane610] - [#112514])
+- Unifi more polish on entity description ([@Kane610] - [#112281])
+- Cache the job type for entity service calls ([@bdraco] - [#112793])
+- Make SSDP tasks background HassJob to avoid delaying startup ([@bdraco] - [#112668])
+- Give the UniFi integration better control over what data to load ([@Kane610] - [#112804])
+- Move restoring inactive clients method into UniFi entity loader ([@Kane610] - [#112805])
+- Remove entity description mixin in Jellyfin ([@joostlek] - [#112782])
+- Remove entity description mixin in Goodwe ([@joostlek] - [#112773])
+- Move wireless clients into entity_loader ([@Kane610] - [#112813])
+- Cleanup mqtt discovery code ([@jbouwh] - [#112749])
+- Update modbus test to include a dummy sensor ([@janiversen] - [#112820])
+- Revert "Cleanup mqtt discovery code" ([@jbouwh] - [#112818])
+- Remove deprecated CLOSE_COMM_ON_ERROR from modbus ([@janiversen] - [#112821])
+- Remove entity description mixin in Huawei LTE ([@joostlek] - [#112777])
+- Remove outdated prettier and yamllint `azure-*.yml` ignores ([@scop] - [#112819])
+- Remove deprecated retry_on_empty from modbus ([@janiversen] - [#112822])
+- Remove entity description mixin in Glances ([@joostlek] - [#112772])
+- Remove entity description mixin in EZVIZ ([@joostlek] - [#112764])
+- Remove entity description mixin in Environment Canada ([@joostlek] - [#112763])
+- Remove entity description mixin in Google wifi ([@joostlek] - [#112774])
+- Remove entity description mixin in idasen desk ([@joostlek] - [#112780])
+- Remove entity description mixin in Honeywell ([@joostlek] - [#112776])
+- Remove entity description mixin in Geocaching ([@joostlek] - [#112770])
+- Remove entity description mixin in AVM Fritz!Tools ([@joostlek] - [#112767])
+- Use eager_start for discovery listeners ([@bdraco] - [#112803])
+- Rename get_deconz_session to get_deconz_api ([@Kane610] - [#112826])
+- Split out Axis config data ([@Kane610] - [#112825])
+- Add icon translations to Yeelight ([@joostlek] - [#112363])
+- Bump mastodon.py version to 1.8.1 ([@thejeffreystone] - [#112728])
+- Improve performance of image streams ([@bdraco] - [#112810])
+- Allow Just-in-Time platform setup for mqtt ([@jbouwh] - [#112720])
+- Enphase Envoy refactor and extend diagnostics ([@catsmanac] - [#109080])
+- Avoid saving auth right after we load it during startup ([@bdraco] - [#112008])
+- Schedule coroutines with eager_task from async_track_state_change_event ([@bdraco] - [#112807])
+- Remove entity description mixin in IPP ([@joostlek] - [#112781])
+- Cleanup mqtt PLATFORMS constant and CI-test platform filters ([@jbouwh] - [#112847])
+- Only read cpu once during systemmonitor setup ([@bdraco] - [#112863])
+- Schedule coroutine functions eagerly when async_listen uses run_immediately ([@bdraco] - [#112846])
+- Update pytest to 8.1.1 ([@cdce8p] - [#112859])
+- Refactor handling of device updates in ESPHome ([@bdraco] - [#112864])
+- Split out deCONZ hub ([@Kane610] - [#112854])
+- Bump yalexs to 2.0.0 ([@abjorck] - [#111706])
+- Add Locks to Xiaomi-BLE ([@Ernst79] - [#111156])
+- Remove entity description mixin in Freebox ([@joostlek] - [#112766])
+- Remove entity description mixin in Private BLE Device ([@joostlek] - [#112922])
+- Remove entity description mixin in Netgear ([@joostlek] - [#112911])
+- Remove entity description mixin in SFR Box ([@joostlek] - [#112937])
+- Remove entity description mixin in Renault ([@joostlek] - [#112925])
+- Remove entity description mixin in Roku ([@joostlek] - [#112931])
+- Remove entity description mixin in Overkiz ([@joostlek] - [#112914])
+- Remove entity description mixin in Trafikverket Weatherstation ([@joostlek] - [#112957])
+- Remove entity description mixin in Trafikverket Train ([@joostlek] - [#112956])
+- Remove entity description mixin in Trafikverket Ferry ([@joostlek] - [#112955])
+- Remove entity description mixin in Trafikverket Camera ([@joostlek] - [#112954])
+- Remove entity description mixin in Sensibo ([@joostlek] - [#112936])
+- Improve 17track tests ([@shaiu] - [#112734])
+- Fix mqtt platform setup race ([@jbouwh] - [#112888])
+- Run debouncer tasks eagerly to avoid scheduling on the event loop ([@bdraco] - [#112789])
+- Import custom components in the executor by default ([@bdraco] - [#112177])
+- Remove entity description mixin in Vodafone Station ([@joostlek] - [#112967])
+- Remove entity description mixin in Zeversolar ([@joostlek] - [#112977])
+- Remove entity description mixin in Youtube ([@joostlek] - [#112975])
+- Remove entity description mixin in WAQI ([@joostlek] - [#112970])
+- Remove entity description mixin in Tradfri ([@joostlek] - [#112953])
+- Use async_at_started in Speedtest.Net ([@gjohansson-ST] - [#112110])
+- Remove entity description mixin in Permobil ([@joostlek] - [#112918])
+- Remove entity description mixin in PEGELONLINE ([@joostlek] - [#112917])
+- Remove entity description mixin in Melcloud ([@joostlek] - [#112905])
+- Remove entity description mixin in Justnimbus ([@joostlek] - [#112893])
+- Remove entity description mixin in LaCrosse View ([@joostlek] - [#112900])
+- Move wsdot fixture to integration test ([@joostlek] - [#112996])
+- Move uk_transport fixture to integration test ([@joostlek] - [#112995])
+- Move OpenALPR cloud fixture to integration test ([@joostlek] - [#112994])
+- Remove not needed hass.async_block_till_done in test ([@jbouwh] - [#113002])
+- Remove entity description mixin in Switcher Kis ([@joostlek] - [#112945])
+- Remove entity description mixin in Nettigo Air Monitor ([@joostlek] - [#112909])
+- Remove entity description mixin in Tractive ([@joostlek] - [#112952])
+- Remove entity description mixin in Synology DSM ([@joostlek] - [#112946])
+- Add icon translations to Picnic ([@joostlek] - [#112181])
+- Add icon translations to Husqvarna automower ([@joostlek] - [#111727])
+- Remove entity description mixin in Shelly ([@joostlek] - [#112938])
+- Migrate APCUPSD to has entity name ([@yuxincs] - [#112997])
+- Fix race condition when ZHA group members change ([@dmulcahey] - [#113030])
+- Ignore logging events in zha websocket tests ([@bdraco] - [#113031])
+- Fix Bang & Olufsen enum naming ([@joostlek] - [#113022])
+- Bump aioesphomeapi to 23.1.1 ([@bdraco] - [#113016])
+- Enable more SIM ruff rules ([@joostlek] - [#113015])
+- Migrate duckdns to use async_run_hass_job ([@bdraco] - [#113012])
+- Avoid scheduling person updates on the event loop ([@bdraco] - [#113010])
+- Move Microsoft face fixture to integration test ([@joostlek] - [#112993])
+- Move metoffice fixture to integration test ([@joostlek] - [#112992])
+- Move london_air fixture to integration test ([@joostlek] - [#112991])
+- Move Feedreader fixture to integration test ([@joostlek] - [#112989])
+- Schedule tasks eagerly when called from hass.add_job ([@bdraco] - [#113014])
+- Move openhardwaremonitor fixture to integration tests ([@joostlek] - [#112982])
+- Remove entity description mixin in V2C ([@joostlek] - [#112960])
+- Remove a redundant check in APCUPSD's config flow ([@yuxincs] - [#113032])
+- Rename mqtt platform setup method ([@jbouwh] - [#113042])
+- Fix google assistant cloud sync test ([@bdraco] - [#113044])
+- Fix CoreState in cloud google assistant tests ([@bdraco] - [#113045])
+- Allow Shelly CoAP to honour default network adapter ([@chemelli74] - [#110997])
+- Remove entity description mixin in Vilfo ([@joostlek] - [#112966])
+- Remove entity description mixin in Tado ([@joostlek] - [#112947])
+- Add tests for Aussie Broadband diagnostics ([@Bre77] - [#113049])
+- Bump aioslimproto to 3.0.0 ([@marcelveldt] - [#113046])
+- Remove entity description mixin in Opower ([@joostlek] - [#112913])
+- Bump Wandalen/wretry.action from 1.4.7 to 1.4.8 (@dependabot - [#113038])
+- Remove entity description mixin in WeatherFlow ([@joostlek] - [#112971])
+- Remove entity description mixin in Starlink ([@joostlek] - [#112943])
+- Remove entity description mixin in Schlage ([@joostlek] - [#112934])
+- Remove entity description mixin in Kaleidescape ([@joostlek] - [#112896])
+- Remove entity description mixin in Launch Library ([@joostlek] - [#112902])
+- Remove entity description mixin in Kaiterra ([@joostlek] - [#112895])
+- Move yandex transport fixture to integration test ([@joostlek] - [#112988])
+- Remove entity description mixin in Meater ([@joostlek] - [#112904])
+- Remove entity description mixin in Minecraft Server ([@joostlek] - [#112908])
+- Remove YAML configuration from WAQI ([@joostlek] - [#113027])
+- Bump webmin-xmlrpc to 0.0.2 ([@autinerd] - [#113004])
+- Remove entity description mixin in QNAP QSW ([@joostlek] - [#112924])
+- Remove entity description mixin in Wallbox ([@joostlek] - [#112969])
+- Remove entity description mixin in SABnzbd ([@joostlek] - [#112933])
+- Remove entity description mixin in Honeywell Lyric ([@joostlek] - [#112903])
+- Remove entity description mixin in Z-Wave.js ([@joostlek] - [#112979])
+- Remove entity description mixin in Zamg ([@joostlek] - [#112976])
+- Remove entity description mixin in Yalexs BLE ([@joostlek] - [#112974])
+- Remove entity description mixin in Xiaomi Miio ([@joostlek] - [#112973])
+- Remove entity description mixin in Whirlpool ([@joostlek] - [#112972])
+- Remove entity description mixin in VeSync ([@joostlek] - [#112965])
+- Remove entity description mixin in Venstar ([@joostlek] - [#112964])
+- Remove entity description mixin in Vallox ([@joostlek] - [#112963])
+- Remove entity description mixin in Tuya ([@joostlek] - [#112959])
+- Remove entity description mixin in Transmission ([@joostlek] - [#112958])
+- Remove entity description mixin in Tolo ([@joostlek] - [#112951])
+- Remove entity description mixin in Tautulli ([@joostlek] - [#112949])
+- Remove entity description mixin in Steamist ([@joostlek] - [#112944])
+- Remove entity description mixin in Solaredge ([@joostlek] - [#112942])
+- Remove entity description mixin in Smappee ([@joostlek] - [#112941])
+- Remove entity description mixin in SleepIQ ([@joostlek] - [#112940])
+- Remove entity description mixin in Skybell ([@joostlek] - [#112939])
+- Remove entity description mixin in Roomba ([@joostlek] - [#112932])
+- Remove entity description mixin in Ring ([@joostlek] - [#112928])
+- Remove entity description mixin in Roborock ([@joostlek] - [#112930])
+- Remove entity description mixin in Meteo-France ([@joostlek] - [#112907])
+- Remove entity description mixin in Rituals Perfume Genie ([@joostlek] - [#112929])
+- Remove entity description mixin in Renson ([@joostlek] - [#112926])
+- Remove entity description mixin in Pure Energie ([@joostlek] - [#112923])
+- Remove entity description in Point ([@joostlek] - [#112921])
+- Remove entity description mixin in Picnic ([@joostlek] - [#112920])
+- Remove entity description mixin in Pi-hole ([@joostlek] - [#112919])
+- Remove entity description mixin in PECO ([@joostlek] - [#112915])
+- Remove entity description mixin in Onvif ([@joostlek] - [#112912])
+- Remove entity description mixin in Netatmo ([@joostlek] - [#112910])
+- Remove entity description mixin in Melnor ([@joostlek] - [#112906])
+- Remove entity description mixin in Landisgyr Heat Meter ([@joostlek] - [#112901])
+- Remove entity description mixin in Kraken ([@joostlek] - [#112899])
+- Remove entity description mixin in Kostal Plenticore ([@joostlek] - [#112898])
+- Remove entity description mixin in Juicenet ([@joostlek] - [#112892])
+- Use UV instead of PIP in the CI ([@edenhaus] - [#113051])
+- Fix adding Hue bridge manually by IP ([@marcelveldt] - [#113055])
+- Bump xiaomi-ble to 0.27.0 ([@Ernst79] - [#113013])
+- Add ConfigFlow for seventeentrack integration ([@shaiu] - [#111196])
+- Move HomematicIP Cloud fixture to integration test ([@joostlek] - [#112987])
+- Prepare ring update service for deprecation ([@sdb9696] - [#108781])
+- Enable even more SIM ruff rules ([@joostlek] - [#113017])
+- Fix for Hue not applying effect in scene ([@marcelveldt] - [#113057])
+- Fix here_travel_time creating many refresh requests at startup ([@bdraco] - [#113041])
+- Remove entity description mixin in Github ([@joostlek] - [#112771])
+- Ensure wemo discovery is run in a background task ([@bdraco] - [#112665])
+- Remove fixtures from global fixtures folder ([@joostlek] - [#113060])
+- Improve lists in integrations [A] ([@joostlek] - [#113006])
+- Change airthings pressure sensor device_class to atmospheric pressure ([@OndraM] - [#113005])
+- Bump `regenmaschine` to 2024.03.0 ([@bachya] - [#113074])
+- Improve lists in integrations [C-D] ([@joostlek] - [#113072])
+- Improve lists in integrations [B] ([@joostlek] - [#113069])
+- Add icon translations to Version ([@joostlek] - [#112343])
+- Only load services.yaml for integrations that have it ([@balloob] - [#112732])
+- Start tasks eagerly in for async_at_start(ed) ([@bdraco] - [#112802])
+- Migrate dispatcher to create tasks eagerly ([@bdraco] - [#112845])
+- Migrate _async_when_setup to use eager_start ([@bdraco] - [#112872])
+- Ensure that the ring integration always raises HomeAssistantError for user actions ([@sdb9696] - [#109893])
+- Fix race in script stop that could cause async_stop to hang forever ([@bdraco] - [#113089])
+- Fix location data in Teslemetry ([@Bre77] - [#112866])
+- Migrate async_run_job to use eager_start for tasks ([@bdraco] - [#113011])
+- Reduce latency to populate initial HKC bluetooth device state ([@bdraco] - [#113103])
+- Make sonos ssdp discovery callback a callback function ([@bdraco] - [#113107])
+- Make sonos household_coordinator setup a callback function ([@bdraco] - [#113108])
+- Make sonos binary sensor entity creation callback functions ([@bdraco] - [#113109])
+- Add support for run_immediately to async_listen_once ([@bdraco] - [#113020])
+- Run coroutines as eager tasks in async_run_hass_job ([@bdraco] - [#111683])
+- Make cast async_cast_discovered a callback function ([@bdraco] - [#113111])
+- Migrate homekit to use async_at_started ([@bdraco] - [#113102])
+- Make restore state started a callback function ([@bdraco] - [#113110])
+- Use run_immediately for starting discovery at the started event ([@bdraco] - [#113112])
+- Update timezone in supervisor in an eager task ([@bdraco] - [#113113])
+- Migrate scene platform to use async_add_executor_job ([@bdraco] - [#113114])
+- Attach template triggers at start eagerly ([@bdraco] - [#113120])
+- Add run_immediately to the zone core config update async_listen ([@bdraco] - [#113119])
+- Remove unnecessary use of async_run_job in script helper ([@bdraco] - [#113118])
+- Remove unnecessary use of async_add_job in openalpr_cloud ([@bdraco] - [#113116])
+- Await discovery_function in the DiscoveryFlowHandler instead of wrapping it in a task ([@bdraco] - [#113115])
+- Simplify automation startup logic ([@bdraco] - [#113122])
+- Migrate remaining call in check_config helper to use async_get_component ([@bdraco] - [#113123])
+- Import homeassistant trigger platforms in the executor ([@bdraco] - [#113124])
+- Switch the reload helper to use async_get_component ([@bdraco] - [#113126])
+- Add A6 family code for DS2438 1-Wire sensor ([@definitio] - [#112844])
+- Add missing device info to Husqvarna Automower ([@Thomas55555] - [#113090])
+- Add scheduled mode to renault charge mode ([@slyoldfox] - [#105967])
+- Add reconfigure flow to homeworks ([@emontnemery] - [#112419])
+- Validate state_class with last_reset_value_template for mqtt sensors ([@jbouwh] - [#113099])
+- Update vallox_websocket_api to 5.1.1 ([@yozik04] - [#113139])
+- Bump Wandalen/wretry.action from 1.4.8 to 1.4.9 (@dependabot - [#113132])
+- Convert sets to list before passing to the JSON serializer in the registries ([@bdraco] - [#113133])
+- Add the ability to create Debouncer tasks as background tasks ([@bdraco] - [#113128])
+- Add device_id to sentence trigger and external conversation APIs ([@synesthesiam] - [#113094])
+- Remove deprecated `hass.components` usage in device_sun_light_trigger ([@jpbede] - [#111881])
+- Add motion detection enable/disable to ring camera platform ([@sdb9696] - [#108789])
+- Remove entity description mixin in Screenlogic ([@joostlek] - [#112935])
+- Remove deprecated `hass.components` usage in service tests ([@jpbede] - [#111883])
+- Clean up Abode imports ([@joostlek] - [#113138])
+- Improve lists in integrations [E-F] ([@joostlek] - [#113075])
+- Make august activity update a background task ([@bdraco] - [#112652])
+- Make Bluetooth active coordinator debouncers run tasks in the background ([@bdraco] - [#113129])
+- Ensure HKC debounced availability poll does not block startup ([@bdraco] - [#113130])
+- Avoid multiple executor jobs to add wemo devices ([@bdraco] - [#112484])
+- Add icon translations to Lametric ([@joostlek] - [#111854])
+- Add options update listener for Speedtest.Net ([@gjohansson-ST] - [#112108])
+- Add binary_sensor to homeworks ([@emontnemery] - [#112418])
+- Fix Axis unique ID ([@Kane610] - [#112132])
+- Use enum device class in Dexcom ([@joostlek] - [#112423])
+- Add icons to Teslemetry ([@Bre77] - [#112546])
+- Sonos reduce test time ([@PeteRager] - [#111688])
+- Avoid some event loop overhead for ESPHome listeners ([@bdraco] - [#113173])
+- Add "language" to strings.json ([@autinerd] - [#112869])
+- Move Notion coordinator to its own module ([@bachya] - [#112756])
+- Add icon translations to Bond ([@joostlek] - [#111349])
+- Fix System Bridge media source data URL ([@timmo001] - [#112612])
+- Small improvement to test run time ([@bdraco] - [#113175])
+- Remove ZHA IasZone sensor migration ([@TheJulianJES] - [#111893])
+- Add a task name to the config entry retry tasks ([@bdraco] - [#113188])
+- Fix radon precision for Airthings BLE ([@LaStrada] - [#113185])
+- ESPHome: Catch and re-raise client library errors as HomeAssistantErrors ([@jesserockz] - [#113026])
+- Properly mark Plex update sensor when current ([@jjlawren] - [#113197])
+- ESPHome: Add Date Entity support ([@jesserockz] - [#112475])
+- Bump radios to 0.3.1 ([@bdraco] - [#112850])
+- Bump github/codeql-action from 3.24.6 to 3.24.7 (@dependabot - [#113207])
+- Bump Wandalen/wretry.action from 1.4.9 to 1.4.10 (@dependabot - [#113206])
+- Update pytest artifact actions to v4 ([@cdce8p] - [#110906])
+- Improve lists for MQTT integration ([@jbouwh] - [#113184])
+- Migrate one time listeners to use async_run_hass_job ([@bdraco] - [#113179])
+- Bump actions/checkout from 4.1.1 to 4.1.2 (@dependabot - [#113208])
+- Migrate torque to use async_add_hass_job ([@bdraco] - [#113218])
+- Only extract traceback once in system_log ([@bdraco] - [#113201])
+- Simplify entity _attr cached_property getter implementation ([@bdraco] - [#113195])
+- Migrate harmony to use async_run_hass_job ([@bdraco] - [#113178])
+- Ensure apple_tv connect loop is cancelled on shutdown ([@bdraco] - [#113191])
+- Simplify clearing _attr cached_property in entities ([@bdraco] - [#113136])
+- Add diagnostics platform to IPMA ([@dgomes] - [#105697])
+- Update dsmr reader codeowner ([@joostlek] - [#108152])
+- Constrain pycountry to >=23.12.11 ([@bdraco] - [#112849])
+- Remove HassJob wrapping from the DataUpdateCoordinator ([@bdraco] - [#113192])
+- Add processes services to System Bridge ([@timmo001] - [#103564])
+- Improve lists in integrations [I-K] ([@joostlek] - [#113221])
+- Deprecate `homeassistant.components.is_on` function ([@jpbede] - [#111891])
+- Improve lists in integrations [G-H] ([@joostlek] - [#113168])
+- CI: Move pytest-github-actions-annotate-failures to test deps, upgrade ([@akx] - [#104604])
+- Improve lists in integrations [P-Q] ([@joostlek] - [#113236])
+- Run coordinator shutdown eagerly ([@bdraco] - [#113174])
+- Use `single_config_entry` in Accuweather manifest ([@bieniu] - [#111548])
+- Improve lists in integrations [T-U] ([@joostlek] - [#113243])
+- Parameterize some tests in generic_thermostat ([@esciara] - [#105643])
+- Add icon translations to Roku ([@joostlek] - [#112214])
+- Remove remaining async_add_job calls in core ([@bdraco] - [#113217])
+- Improve lists in integrations [V-W] ([@joostlek] - [#113252])
+- Use async_update_reload_and_abort helper in tailwind ([@jpbede] - [#110885])
+- Rework Melissa tests ([@joostlek] - [#113241])
+- Improve lists in integrations [X-Z] ([@joostlek] - [#113253])
+- Improve lists in integrations [L-M] ([@joostlek] - [#113227])
+- Improve lists in integrations [N-O] ([@joostlek] - [#113231])
+- Improve lists in integrations [R-S] ([@joostlek] - [#113233])
+- Split out deCONZ config model ([@Kane610] - [#112851])
+- Add service icons to Bluesound ([@joostlek] - [#113281])
+- Add service icons to Browser ([@joostlek] - [#113283])
+- Add service icons to Command line ([@joostlek] - [#113285])
+- Ensure apple_tv setup retries later on timeout ([@bdraco] - [#113367])
+- Bump aiodns to 3.1.1 ([@bdraco] - [#113371])
+- Bump bluetooth-auto-recovery to 1.4.0 ([@bdraco] - [#113368])
+- Bump aiodiscover to 2.0.0 ([@bdraco] - [#113337])
+- Fix uv cache dir env [ci] ([@cdce8p] - [#113312])
+- Avoid pre-importing config_flows if the integration does not support migration ([@bdraco] - [#113369])
+- Bump ha-ffmpeg to 3.2.0 ([@bdraco] - [#113297])
+- Add default_config to the bootstrap pre-imports ([@bdraco] - [#113263])
+- Migrate solax away from using async_add_job ([@bdraco] - [#113257])
+- Remove async_add_job calls from configurator ([@bdraco] - [#113256])
+- Migrate script integration to create eager tasks ([@bdraco] - [#113189])
+- Add a helper to import modules from the event loop ([@bdraco] - [#113169])
+- Remove async_add_job calls from qwikswitch ([@bdraco] - [#113258])
+- Add service icons to REST command ([@joostlek] - [#113347])
+- Fix group loading too late resulting in incorrect state ([@bdraco] - [#113262])
+- Remove usage of async_add_job in tests ([@bdraco] - [#113259])
+- Add service icons to Unifi ([@joostlek] - [#113360])
+- Bump opower to 0.4.0 ([@tronikos] - [#113390])
+- Bump gassist-text to 0.0.11 ([@tronikos] - [#113386])
+- Bump docker/login-action from 3.0.0 to 3.1.0 (@dependabot - [#113384])
+- Add service icons to Debug py ([@joostlek] - [#113287])
+- Add virtual integration Sacramento Municipal Utility District (SMUD) ([@tronikos] - [#113389])
+- Add service icons to Filter ([@joostlek] - [#113295])
+- Improve loops and lists ([@joostlek] - [#113269])
+- Enable ISC ruff rule ([@joostlek] - [#113270])
+- Remove old migration from lovelace ([@emontnemery] - [#113388])
+- Update ring integration imports ([@sdb9696] - [#113397])
+- Migrate auth to use async_import_module to avoid blocking I/O in the event loop ([@bdraco] - [#113387])
+- Fix telegram_bot doing blocking I/O in the event loop to import platforms ([@bdraco] - [#113383])
+- Migrate sun to use single_config_entry ([@bdraco] - [#113370])
+- Add service icons to Zoneminder ([@joostlek] - [#113366])
+- Fix smartthings doing blocking I/O in the event loop to import platforms ([@bdraco] - [#113382])
+- Add service icons to Wake on LAN ([@joostlek] - [#113362])
+- Add service icons to System Log ([@joostlek] - [#113355])
+- Add service icons to Statistics ([@joostlek] - [#113353])
+- Add service icons to Universal ([@joostlek] - [#113361])
+- Add service icons to Alert ([@joostlek] - [#113274])
+- Add service icons to System Bridge ([@joostlek] - [#113354])
+- Add service icons to Timer ([@joostlek] - [#113358])
+- Add service icons to SMTP ([@joostlek] - [#113351])
+- Add service icons to Schedule ([@joostlek] - [#113350])
+- Add service icons to Recorder ([@joostlek] - [#113344])
+- Add service icons to Snips ([@joostlek] - [#113352])
+- Add service icons to Ombi ([@joostlek] - [#113339])
+- Move modbus check_config to setup, to have access to hass ([@janiversen] - [#112828])
+- Bump hass-nabucasa from 0.78.0 to 0.79.0 ([@ludeeus] - [#113405])
+- Add floor support to areas WebSocket API ([@frenck] - [#113402])
+- Add service icons to Yamaha ([@joostlek] - [#113365])
+- Add service icons to Wemo ([@joostlek] - [#113363])
+- Add service icons to Telegram bot ([@joostlek] - [#113357])
+- Add service icons to Toon ([@joostlek] - [#113359])
+- Add service icons to Telegram ([@joostlek] - [#113356])
+- Add service icons to Route53 ([@joostlek] - [#113349])
+- Add service icons to RFLink ([@joostlek] - [#113348])
+- Add service icons to Remember the milk ([@joostlek] - [#113345])
+- Add service icons to Xiaomi Miio ([@joostlek] - [#113364])
+- Add service icons to QVR Pro ([@joostlek] - [#113343])
+- Add service icons to Python Scripts ([@joostlek] - [#113342])
+- Add service icons to Pilight ([@joostlek] - [#113341])
+- Add service icons to nx584 ([@joostlek] - [#113338])
+- Add service icons to Nissan Leaf ([@joostlek] - [#113336])
+- Add service icons to Netatmo ([@joostlek] - [#113335])
+- Add service icons to Media Extractor ([@joostlek] - [#113329])
+- Add service icons to Microsoft Face ([@joostlek] - [#113330])
+- Add service icons to Minio ([@joostlek] - [#113331])
+- Add service icons to Ness alarm ([@joostlek] - [#113333])
+- Add service icons to Matrix ([@joostlek] - [#113328])
+- Add service icons to Lovelace ([@joostlek] - [#113327])
+- Add service icons to Logi circle ([@joostlek] - [#113326])
+- Add service icons to Local file ([@joostlek] - [#113323])
+- Add service icons to Keyboard ([@joostlek] - [#113322])
+- Add service icons to Kef ([@joostlek] - [#113321])
+- Add service icons to Keba ([@joostlek] - [#113320])
+- Add service icons to Iperf3 ([@joostlek] - [#113319])
+- Add service icons to Intent Script ([@joostlek] - [#113318])
+- Add service icons to Input Text ([@joostlek] - [#113317])
+- Add service icons to Input Select ([@joostlek] - [#113316])
+- Add service icons to Input button ([@joostlek] - [#113313])
+- Add service icons to Input Number ([@joostlek] - [#113315])
+- Add service icons to IHC ([@joostlek] - [#113311])
+- Add service icons to HTML5 ([@joostlek] - [#113309])
+- Add service icons to Homematic ([@joostlek] - [#113308])
+- Add service icons to Home Assistant ([@joostlek] - [#113307])
+- Add service icons to Habitica ([@joostlek] - [#113303])
+- Add service icons to Geniushub ([@joostlek] - [#113301])
+- Add service icons to Generic Thermostat ([@joostlek] - [#113300])
+- Add service icons to Frontend ([@joostlek] - [#113299])
+- Add service icons to Freebox ([@joostlek] - [#113298])
+- Add service icons to Ffmpeg ([@joostlek] - [#113294])
+- Add service icons to Evohome ([@joostlek] - [#113293])
+- Add service icons to Foursquare ([@joostlek] - [#113296])
+- Add service icons to Envisalink ([@joostlek] - [#113292])
+- Add service icons to HDMI CEC ([@joostlek] - [#113304])
+- Add service icons to Ebusd ([@joostlek] - [#113291])
+- Add service icons to Downloader ([@joostlek] - [#113289])
+- Add service icons to Dominos ([@joostlek] - [#113288])
+- Add service icons to Logbook ([@joostlek] - [#113324])
+- Add service icons to Logger ([@joostlek] - [#113325])
+- Add service icons to Input Datetime ([@joostlek] - [#113314])
+- Add service icons to Conversation ([@joostlek] - [#113286])
+- Add service icons to DuckDNS ([@joostlek] - [#113290])
+- Add service icons to Agent DVR ([@joostlek] - [#113273])
+- Bump tololib to 1.1.0 ([@MatthiasLohr] - [#113268])
+- Add service icons to Advantage air ([@joostlek] - [#113272])
+- Add service icons to Channels ([@joostlek] - [#113284])
+- Add service icons to Modbus ([@joostlek] - [#113332])
+- Add service icons to Backup ([@joostlek] - [#113277])
+- Add service icons to Bayesian ([@joostlek] - [#113278])
+- Add service icons to Bluetooth Tracker ([@joostlek] - [#113282])
+- Add service icons to History Stats ([@joostlek] - [#113306])
+- Add service icons to Group ([@joostlek] - [#113302])
+- Add service icons to REST ([@joostlek] - [#113346])
+- Add service icons to Amcrest ([@joostlek] - [#113276])
+- Add service icons to Blackbird ([@joostlek] - [#113280])
+- Add service icons to Persistent Notification ([@joostlek] - [#113340])
+- Deprecate the map integration ([@emontnemery] - [#113215])
+- Enable PERF ruff rules ([@joostlek] - [#113408])
+- Fix icon mistakes ([@joostlek] - [#113420])
+- Add service icons to Utility meter ([@joostlek] - [#113419])
+- Add service icons to Demo ([@joostlek] - [#113414])
+- Bump weatherflow_cloud backing lib v0.2.13 ([@jeeftor] - [#113181])
+- Add service icons to Scene ([@joostlek] - [#113418])
+- Add service icons to ADS ([@joostlek] - [#113412])
+- Add UniFi Protect service to remove privacy zones ([@AngellusMortis] - [#111292])
+- Add icon translations to Unifi protect ([@joostlek] - [#112332])
+- Add floors to service target ([@frenck] - [#110850])
+- add switch platform for tolo ([@MatthiasLohr] - [#113440])
+- Allow entity platforms without entity_component in icon validation ([@joostlek] - [#113422])
+- Add service icons to Fan ([@joostlek] - [#113415])
+- Fix alarm control panel icons ([@joostlek] - [#113413])
+- Add service icons to Abode ([@joostlek] - [#113411])
+- Add icon translations to ZHA ([@joostlek] - [#112368])
+- Fix calling sync api in counter/ffmpeg/device_tracker tests ([@bdraco] - [#113441])
+- Deprecate async_run_job and async_add_job ([@bdraco] - [#113260])
+- Add service icons to Climate ([@joostlek] - [#113409])
+- Add aroma therapy select entity for tolo integration ([@MatthiasLohr] - [#113442])
+- Revert "Remove unused test helper mock_area_registry" ([@jbouwh] - [#113453])
+- Fix hassfest icons check for notify and image_processing ([@jbouwh] - [#113446])
+- Add aliases support to floor registry WebSocket API ([@frenck] - [#113401])
+- Support lutron transition time and flash for lights ([@wilburCforce] - [#109185])
+- Change modbus integration to use async library calls ([@janiversen] - [#113450])
+- Add service icons to Notify ([@joostlek] - [#113417])
+- Add service icons to Image processing ([@joostlek] - [#113416])
+- Bump aiooncue to 0.3.7 ([@PeteRager] - [#113451])
+- Add icon translations to myuplink ([@astrandb] - [#111466])
+- Construct storage data in the executor to avoid blocking the event loop ([@bdraco] - [#113465])
+- Reduce overhead to save the larger registries ([@bdraco] - [#113462])
+- Avoid creating another ssl context in cert_expiry ([@bdraco] - [#113467])
+- Bump aiodhcpwatcher to 1.0.0 ([@bdraco] - [#113469])
+- Reduce script overhead by avoiding creation of many tasks ([@bdraco] - [#113183])
+- Fix scene integration doing blocking I/O in the event loop to import platforms ([@bdraco] - [#113391])
+- Fix delayed registry check to only using the short delay at running ([@bdraco] - [#113471])
+- Start script runs eagerly ([@bdraco] - [#113190])
+- Remove unused tts fixture ([@emontnemery] - [#113480])
+- Move loading of ha-av to the executor ([@bdraco] - [#113485])
+- Remove supports_encryption check from mobile_app ([@bdraco] - [#113490])
+- Improve State docstring ([@emontnemery] - [#113501])
+- Avoid multiple context switches to setup a sonos speaker ([@bdraco] - [#113378])
+- Address late review on adding an error sensor to Husqvarna Automower ([@Thomas55555] - [#113242])
+- Add missing mystrom sensor ([@slyoldfox] - [#113225])
+- Remove old update unique id function from deCONZ binary sensor ([@Kane610] - [#112536])
+- Create more relevant names for myuplink DeviceInfo ([@astrandb] - [#111502])
+- Add icon translations to Moon ([@dougiteixeira] - [#111386])
+- Use `single_config_entry` in KNX manifest ([@farmio] - [#112526])
+- Remove OpenCV integration ([@thecode] - [#113455])
+- Ensure TurboJPEG is imported in the executor ([@bdraco] - [#113504])
+- Use on state icons by default in Balboa spa integration ([@snoack] - [#111911])
+- Add Ring Intercom support ([@cosimomeli] - [#109819])
+- Add theme color support to labels ([@frenck] - [#113404])
+- Add category registry ([@frenck] - [#110897])
+- create issues for modbus config errors ([@janiversen] - [#113431])
+- Speed up ffmpeg setup ([@bdraco] - [#113496])
+- Filter out irrelevant entities on SMO20 devices in myuplink ([@astrandb] - [#113493])
+- Remove Sonos migrations ([@joostlek] - [#113506])
+- Add diagnostics platform to Fastdotcom ([@erwindouna] - [#111525])
+- Remove modbus create_issue from init ([@janiversen] - [#113510])
+- Add Ring Intercom open door button ([@cosimomeli] - [#113514])
+- Add icon translations to Sonos ([@joostlek] - [#112235])
+- Add missing icon for Unifi protect service ([@joostlek] - [#113508])
+- Protect SupervisorIssues.update method ([@mdegat01] - [#113425])
+- Bump opower to 0.4.1 ([@drewclauson] - [#113509])
+- Remove repetitive words in comments and docstrings ([@soonsouth] - [#113529])
+- Add Fyta integration ([@dontinelli] - [#110816])
+- Use Volume Flow Rate device class in BTHome ([@joostlek] - [#113530])
+- Freeze timezone in bmw_connected_drive tests ([@Thomas55555] - [#113533])
+- Fix MyUplink tests ([@joostlek] - [#113534])
+- Support configuring Axis to use HTTPS ([@Kane610] - [#113271])
+- Use Volume Flow Rate device class in DROP connect ([@joostlek] - [#113528])
+- Use Volume Flow Rate device class in Opentherm gw ([@joostlek] - [#113531])
+- Do not allow modbus config without entities ([@janiversen] - [#113516])
+- Use single_config_entry in jellyfin manifest ([@ctalkington] - [#113202])
+- Import and create pyudev for usb in the executor ([@bdraco] - [#113478])
+- Remove old update of sensor unique id in deCONZ ([@Kane610] - [#113527])
+- Remove old update of number unique id in deCONZ ([@Kane610] - [#113524])
+- Remove old update of group unique id in deCONZ ([@Kane610] - [#112533])
+- Add missing continue in legacy recorder history function ([@emontnemery] - [#113535])
+- fix mqtt siren test asserts ([@autinerd] - [#113550])
+- fix homekit test asserts ([@autinerd] - [#113549])
+- Speed up loading sun ([@bdraco] - [#113544])
+- Revert "Avoid pre-importing config_flows if the integration does not … ([@gjohansson-ST] - [#113553])
+- Add missing async_block_till_done to jellyfin test_invalid_auth test ([@bdraco] - [#113556])
+- Avoid calling entry.async_migrate in sonarr tests ([@bdraco] - [#113557])
+- Remove danielperna84 as codeowner ([@danielperna84] - [#109662])
+- Add translations for devolo Home Network exceptions ([@Shutgun] - [#105755])
+- Restore group config_flow pre-import ([@bdraco] - [#113558])
+- Send keep-alive frames in image proxy stream ([@OnFreund] - [#113542])
+- Add profiler set_asyncio_debug service ([@bdraco] - [#113447])
+- Remove group integration platforms that use the default states ([@bdraco] - [#113562])
+- Fix lingering hassio issues test ([@jbouwh] - [#113569])
+- Cleanup some circular imports in group ([@bdraco] - [#113554])
+- Add ruff B005, B015, B032 and fix occurrences ([@autinerd] - [#113543])
+- Improve typing of State.as_compressed_state ([@emontnemery] - [#113540])
+- Move group config flow pre-import to its init ([@bdraco] - [#113564])
+- Reduce bottlenecks in bootstrap by ordering the setup of integrations ([@bdraco] - [#113570])
+- Fix unifiprotect tests for ruff B018 ([@autinerd] - [#113584])
+- Fix freedompro tests for ruff B018 ([@autinerd] - [#113583])
+- Add additional sensors to Teslemetry ([@Bre77] - [#112555])
+- Add battery discharge sensor to ViCare integration ([@CFenner] - [#113502])
+- Shelly config flow test wait for tasks to finish ([@thecode] - [#113588])
+- Use async_create_task in recorder init tests ([@bdraco] - [#113586])
+- Add JVC Projector Sensors ([@msavazzi] - [#108949])
+- Enable ruff RUF005 and fix occurrences ([@autinerd] - [#113589])
+- Remove unnecessary method in UniFi entity loader ([@Kane610] - [#113597])
+- Axis use entity description in switch platform ([@Kane610] - [#113595])
+- Clean up unneeded ruff noqa directives ([@autinerd] - [#113616])
+- Remove deprecated `hass.components` from mysensors ([@jpbede] - [#113611])
+- Freeze time on profile test ([@jbouwh] - [#113618])
+- Add a guard to handle unhashable platforms in config ([@bdraco] - [#113607])
+- Avoid creating tasks in homeassistant_alerts when the debouncer will not fire ([@bdraco] - [#113580])
+- Gather loading platforms in async_process_component_config ([@bdraco] - [#113573])
+- Fix vulcan calendar offset ([@Antoni-Czaplicki] - [#113604])
+- Add ruff rules PIE790, PIE794, PIE807, PIE810 ([@autinerd] - [#113617])
+- Remove deprecated `hass.components` from legacy device tracker platform ([@jpbede] - [#113612])
+- Fix race in removing modified devices from the entity registry ([@bdraco] - [#113623])
+- snmp: Better sensor support to resolve previous issues ([@lextm] - [#113624])
+- Generate HomeAssistantError message from English translations ([@jbouwh] - [#113305])
+- Add ruff rule PIE804 ([@autinerd] - [#113620])
+- Remove ignore for ruff PLC0208 ([@autinerd] - [#113537])
+- Use `mock_platform` for button entity component tests instead of `hass.components` ([@jpbede] - [#113627])
+- Add new fields from UniFi Protect v3 ([@AngellusMortis] - [#113631])
+- Run apple_tv shutdown eagerly at the stop event ([@bdraco] - [#113637])
+- Run shelly coordinator shutdown immediately at the stop event ([@bdraco] - [#113633])
+- Shutdown config entry manager immediately at the stop event ([@bdraco] - [#113632])
+- Shutdown homekit eagerly at the stop event ([@bdraco] - [#113639])
+- Consolidate ruff PL and Q rules ([@autinerd] - [#113555])
+- Run functions from ssdp listeners immediately ([@bdraco] - [#113634])
+- Fix zeroconf shutting down too early ([@bdraco] - [#113638])
+- Run entity component shutdown immediately ([@bdraco] - [#113635])
+- Create config entry async_on_unload tasks eagerly ([@bdraco] - [#113626])
+- Bump snapcast to 2.3.6 ([@luar123] - [#113606])
+- Cleanup sonos shutdown process ([@bdraco] - [#113654])
+- Deprecate UniFi Protect HDR switch and package sensor ([@AngellusMortis] - [#113636])
+- Add ruff rule PIE800 ([@autinerd] - [#113619])
+- Eagerly shutdown unifiprotect at the stop event ([@bdraco] - [#113655])
+- Run yalexs_ble shutdown with run_immediately ([@bdraco] - [#113653])
+- Eagerly shutdown homekit_controller at the stop event ([@bdraco] - [#113650])
+- Run bond shutdown listener with run_immediately ([@bdraco] - [#113657])
+- Save bluetooth passive data eagerly at the stop event ([@bdraco] - [#113648])
+- Add run_immediately to bluetooth listeners ([@bdraco] - [#113659])
+- Add tests of homeworks binary sensor ([@emontnemery] - [#113577])
+- Add tests of homeworks light ([@emontnemery] - [#113579])
+- Add ruff rule PIE808 ([@autinerd] - [#113621])
+- Add tests of homeworks button ([@emontnemery] - [#113578])
+- Add tests of homeworks __init__ ([@emontnemery] - [#113581])
+- Replace pylint pointless-statement with ruff B018 ([@autinerd] - [#113582])
+- Improve debug logging in Tankerkoenig ([@mib1185] - [#113674])
+- Remove deprecated `hass.components` from image_processing platform ([@jpbede] - [#113613])
+- Add Ruff LOG rules ([@autinerd] - [#113677])
+- Freeze time on zwave_js update test ([@jbouwh] - [#113625])
+- Re-ignore Ruff rule PLC1901 ([@autinerd] - [#113675])
+- Add WAN port connection control to TP-Link Omada gateways ([@MarkGodwin] - [#111431])
+- Use `mock_platform` for event entity component tests instead of `hass.components` ([@jpbede] - [#113667])
+- Migrate stream listeners to use run_immediately and eager tasks ([@bdraco] - [#113660])
+- Remove deprecated `hass.components` from network helper function ([@jpbede] - [#113615])
+- Remove deprecated `hass.components` from withings webhook tests ([@jpbede] - [#113687])
+- Add run_immediately to usb start/stop listeners ([@bdraco] - [#113658])
+- Move ESPHome disconnects to the close event ([@bdraco] - [#113652])
+- Run entity registry write_unavailable_states immediately at start ([@bdraco] - [#113647])
+- Run registry cleanup listeners immediately ([@bdraco] - [#113646])
+- Migrate registry for labels and categories to run_immediately ([@bdraco] - [#113645])
+- Start and stop template cache watcher to run_immediately ([@bdraco] - [#113644])
+- Cache late imported async_get_exception_message for HomeAssistantError ([@jbouwh] - [#113683])
+- Enable Ruff RSE ([@autinerd] - [#113695])
+- Improve scaffold test_config_flow ([@jwillemsen] - [#113229])
+- Adjust config flow pre-import comment in group ([@bdraco] - [#113702])
+- Migrate isy994 listeners to use run_immediately ([@bdraco] - [#113661])
+- Bump xiaomi-ble to 0.27.1 ([@Ernst79] - [#113686])
+- Bump dawidd6/action-download-artifact from 3.1.2 to 3.1.3 (@dependabot - [#113720])
+- Move legacy device_tracker setup to a tracked task ([@bdraco] - [#113715])
+- Run august stop listener with run_immediately ([@bdraco] - [#113729])
+- Move legacy notify setup to use tracked tasks ([@bdraco] - [#113716])
+- Move legacy stt setup to use tracked tasks ([@bdraco] - [#113718])
+- Move legacy tts setup to use tracked tasks ([@bdraco] - [#113717])
+- Add first batch of Ruff PT rules ([@autinerd] - [#113665])
+- Get HomeAssistantError message from translation cache only ([@jbouwh] - [#113688])
+- Get ServiceValidationError message from translation cache only ([@jbouwh] - [#113704])
+- Run dhcp listeners with run_immediately ([@bdraco] - [#113726])
+- Bump apprise to 1.7.4 ([@caronc] - [#113629])
+- Add Downloader config flow, including tests ([@erwindouna] - [#98722])
+- Allow configuring Starlink sleep schedule ([@boswelja] - [#103057])
+- Add additional buttons to OctoPrint ([@Xitee1] - [#103139])
+- Add camera in use and pending reboot binary sensors to System Bridge ([@timmo001] - [#104095])
+- Log cannot connect exception in Tedee config flow ([@zweckj] - [#113740])
+- Patch Discovery timeout in govee light local ([@joostlek] - [#113692])
+- Add support for Tuya dimmer module ([@mjh1] - [#113741])
+- Add config flow to Rova ([@GidoHakvoort] - [#113596])
+- Axis use entity description light platform ([@Kane610] - [#113602])
+- Remove deprecated `hass.components` from netatmo webhook tests ([@jpbede] - [#113691])
+- Add WebSocket support for handling labels on device registry ([@frenck] - [#113758])
+- Add WebSocket support for assigning labels to entities ([@frenck] - [#113757])
+- Streamline naming in deCONZ integration ([@Kane610] - [#111977])
+- Add WebSocket support for handling labels on areas registry ([@frenck] - [#113755])
+- Add labels to service target ([@frenck] - [#113753])
+- Run websocket shutdown listener with run_immediately ([@bdraco] - [#113727])
+- Refactor integration startup time to show wall clock time ([@bdraco] - [#113707])
+- Bump PyMetno to 0.12.0 ([@bdraco] - [#113777])
+- Start live history/logbook with eager tasks ([@bdraco] - [#113779])
+- Bump dawidd6/action-download-artifact from 3.1.3 to 3.1.4 (@dependabot - [#113788])
+- Bump github/codeql-action from 3.24.7 to 3.24.8 (@dependabot - [#113789])
+- Require an icon for a service ([@joostlek] - [#112373])
+- Create tasks eagerly with core create_task ([@bdraco] - [#113781])
+- Align Comelit climate code to humidifier ([@chemelli74] - [#113747])
+- Migrate restore_state shutdown to use run_immediately ([@bdraco] - [#113786])
+- Use async api in template weather to create tasks ([@bdraco] - [#113784])
+- Use async api in yamaha_musiccast to create tasks ([@bdraco] - [#113785])
+- Use async api in generic_thermostat to create tasks ([@bdraco] - [#113783])
+- Call async task creation api in apple_tv ([@bdraco] - [#113782])
+- Start energy load platform task eagerly ([@bdraco] - [#113778])
+- Bump sunweg to 2.1.1 ([@rokam] - [#113767])
+- Enable Ruff rule PT007 ([@autinerd] - [#113764])
+- Update Home Assistant base image to 2024.03.0 ([@frenck] - [#113797])
+- Add WS command cloud/remove_data ([@emontnemery] - [#109821])
+- Add Room Audio Control to Control4 Integration ([@nalin29] - [#87821])
+- Simplify UV install in CI ([@edenhaus] - [#113803])
+- Allow retries on communication exceptions for Aurora ABB Powerone solar inverter ([@davet2001] - [#104492])
+- Bump bthome-ble to 3.8.1 ([@Ernst79] - [#113800])
+- Migrate Harmony to has entity name ([@joostlek] - [#104737])
+- Find referenced floors in automations & scripts ([@frenck] - [#113802])
+- Add binary sensor platform for Husqvarna Automower ([@Thomas55555] - [#113248])
+- Add device_tracker platform for husqvarna_automower ([@Thomas55555] - [#111403])
+- Find referenced labels in automations & scripts ([@frenck] - [#113812])
+- Revert get_model from myuplink lib ([@astrandb] - [#113811])
+- Do not patch `asyncio.timeout` in govee light local test ([@jpbede] - [#113819])
+- Fix flakey profiler object growth tests ([@bdraco] - [#113825])
+- Fix duplicate events in live logbook ([@bdraco] - [#113828])
+- Remove deprecated `hass.components` from http test ([@jpbede] - [#113823])
+- Remove deprecated `hass.components` from cloud client test ([@jpbede] - [#113820])
+- Remove deprecated `hass.components` from person test ([@jpbede] - [#113822])
+- Only wait for import flows in setup of there is a config flow ([@bdraco] - [#113780])
+- Fix template sensor test relying on event bus debug logging ([@bdraco] - [#113842])
+- Migrate samsungtv stop to use run_immediately ([@bdraco] - [#113834])
+- Migrate camera listeners to use run_immediately ([@bdraco] - [#113840])
+- Only create one executor job to shutdown wemo ([@bdraco] - [#113836])
+- Migrate legacy device_tracker shutdown to use run_immediately ([@bdraco] - [#113835])
+- Use `mock_platform` for light entity component tests instead of `hass.components` ([@jpbede] - [#113845])
+- Remove deprecated `hass.components` from vilfo config flow tests ([@jpbede] - [#113821])
+- Update actions/cache to 4.0.2 ([@cdce8p] - [#113817])
+- Upgrade whirlpool integration to add shared appliances and allow brand selection ([@NodeJSmith] - [#111687])
+- Reduce overhead to write dlna_dmr state ([@bdraco] - [#113776])
+- Avoid expensive db queries at startup to check if data is migrated ([@bdraco] - [#113773])
+- Bump aioesphomeapi to 23.2.0 ([@jesserockz] - [#113854])
+- Add icon translations to Github ([@joostlek] - [#111614])
+- Fix flapping device tracker test ([@bdraco] - [#113859])
+- Fix flapping stream hls test ([@bdraco] - [#113858])
+- Remove deprecated `hass.components` from group light tests and use fixture ([@jpbede] - [#113862])
+- Avoid creating unneeded Context and Event objects when firing events ([@emontnemery] - [#113798])
+- Deprecate cloud tts gender ([@MartinHjelmare] - [#112256])
+- Remove Amcrest camera unique id migration ([@joostlek] - [#113870])
+- Bump bluecurrent-api to 1.2.2 ([@Floris272] - [#110483])
+- Bump numato-gpio to v0.13.0 ([@clssn] - [#113182])
+- Add floor template functions ([@frenck] - [#110847])
+- Make temperature a required parameter for tado climate service ([@alinbalutoiu] - [#113872])
+- Update Amcrest services.yaml ([@tuday2] - [#111161])
+- Change quotes in cloud translations ([@piitaya] - [#113871])
+- Add matter device serial number ([@MartinHjelmare] - [#113878])
+- Provide better debug capabilities for the Traccar Server integration ([@ludeeus] - [#113868])
+- Remove obsolete issue strings in WAQI ([@joostlek] - [#113884])
+- YoLink fix cover incorrect state ([@matrixd2] - [#104975])
+- Bump aioshelly to 8.2.0 ([@chemelli74] - [#113886])
+- Bump islamic_prayer_times to 0.0.12 ([@uchagani] - [#113744])
+- Fix duplicate events in live history ([@bdraco] - [#113896])
+- Add State.last_reported ([@emontnemery] - [#113511])
+- Small cleanup to unifiprotect subscriptions ([@bdraco] - [#113901])
+- Fix flakey test_reading_yaml_config test ([@bdraco] - [#113902])
+- Fix system_info importing hassio in the event loop ([@bdraco] - [#113903])
+- Cache parsing the url for the device registry ([@bdraco] - [#113910])
+- Use faster time compare in history and live logbook ([@bdraco] - [#113897])
+- Reduce overhead to clear cache in button state ([@bdraco] - [#113895])
+- Refactor rate limit helper to track time in seconds ([@bdraco] - [#113898])
+- Use intersection for determine_script_action ([@bdraco] - [#113915])
+- Reduce overhead to construct and validate entity service schema ([@bdraco] - [#113920])
+- ESPHome: Add Time Entity support ([@jesserockz] - [#113852])
+- Fetch MaxLengthExceeded exception mesage from the translation cache ([@jbouwh] - [#113904])
+- Fetch ServiceNotFound message from translation cache ([@jbouwh] - [#113893])
+- Load system info with base functionality ([@bdraco] - [#113923])
+- Add run_immediately to the trace stop listener ([@bdraco] - [#113922])
+- Only calculate native value once per update in systemmonitor ([@bdraco] - [#113921])
+- Add a fast path for async_get_platform ([@bdraco] - [#113917])
+- Enable Ruff PT023, disable PT011, PT012, PT018 ([@autinerd] - [#113900])
+- Upgrade Modbus quality scale to platinum ([@janiversen] - [#113482])
+- Add diagnostics to Husqvarna Automower ([@Thomas55555] - [#111857])
+- modbus: Remove PARALLEL_UPDATES from base_platform ([@janiversen] - [#113928])
+- Split light fixture from implementation to only import when fixture is actually used ([@jpbede] - [#113892])
+- Add transmission-integration path and protocol ([@idelsink] - [#104334])
+- Remove AUX heating from demo climate ([@emontnemery] - [#113929])
+- Add Reolink hdd/sd card storage sensor ([@starkillerOG] - [#110961])
+- Bump Wandalen/wretry.action from 1.4.10 to 2.0.0 (@dependabot - [#113888])
+- Remove deprecated `hass.components` from flux switch tests and use fixture ([@jpbede] - [#113875])
+- Add Bluetooth support to La Marzocco integration ([@zweckj] - [#108287])
+- Add availability to Scrape config flow ([@gjohansson-ST] - [#105516])
+- Add select platform to Husqvarna Automower ([@Thomas55555] - [#113816])
+- Remove unrelated patching from scrape test ([@bdraco] - [#113951])
+- Add support for Shelly RPC devices custom TCP port ([@chemelli74] - [#110860])
+- Add Shelly RGB/RGBW profiles support ([@thecode] - [#113808])
+- Fix grammar in async_get_platform comment ([@bdraco] - [#113948])
+- Avoid writing HomeKit state to disk unless its missing ([@bdraco] - [#111970])
+- Improve user error messages for generic camera ([@davet2001] - [#112814])
+- Add guard to HomeAssistantError `__str__` method to prevent a recursive loop ([@jbouwh] - [#113913])
+- Bump pyenphase to 1.20.0 ([@catsmanac] - [#113963])
+- Fix argument name in async_update_ha_state warning message ([@MrXANA91] - [#113969])
+- Pre import mobile app platforms to avoid having to wait on them ([@bdraco] - [#113966])
+- Deprecate the panel_iframe integration ([@emontnemery] - [#113410])
+- Group wemo platform forwards to reduce overhead ([@bdraco] - [#113972])
+- Return default repairs flow for cloud TTS issues ([@ludeeus] - [#113981])
+- Correct HomeAssistantError __str__ implementation and test ([@jbouwh] - [#113991])
+- Update JVC Projector polling time to be more responsive for automations ([@msavazzi] - [#113765])
+- Add binary sensor platform to microBees ([@FedDam] - [#111190])
+- Add icon translations to Wiz ([@joostlek] - [#112358])
+- Add reformatting commits to .git-blame-ignore-revs ([@akx] - [#110481])
+- Add cover platform to microBees ([@FedDam] - [#111135])
+- Axis use entity descripton binary sensor platform ([@Kane610] - [#113705])
+- Remember entered IP when error happend while setting up HomeWizard ([@DCSBL] - [#113815])
+- Remove hourly weather entity from Aemet ([@gjohansson-ST] - [#110764])
+- Remove hourly weather entity from NWS ([@gjohansson-ST] - [#112503])
+- Add new HomeWizard Energy Socket to tests ([@DCSBL] - [#113406])
+- Use uv instead of pip on production images ([@edenhaus] - [#112496])
+- Remove deprecated `hass.components` from frontend tests ([@jpbede] - [#114011])
+- Remove deprecated `hass.components` from scene tests ([@jpbede] - [#114014])
+- Remove deprecated `hass.components` from zeroconf tests ([@jpbede] - [#114013])
+- Remove deprecated `hass.components` from conversation tests and use light setup fixture ([@jpbede] - [#114012])
+- Rename device to api in Axis integration ([@Kane610] - [#113965])
+- Tweak marking private methods in UniFi, no need to mark inner functio… ([@Kane610] - [#113964])
+- Speed up recorder startup by making schema query read only ([@bdraco] - [#113987])
+- Define and use entity description in Axis entity base class ([@Kane610] - [#114007])
+- Add home battery storage entities for enphase_envoy ([@catsmanac] - [#114015])
+- Add missing is_closed property to powerview tilt only entities ([@kingy444] - [#113792])
+- Improve deCONZ test_non_color_light_reports_color ([@Kane610] - [#114021])
+- Add ecobee indefinite away preset, remove unusable/broken presets ([@alexsydell] - [#108636])
+- Update pytest warnings filter ([@cdce8p] - [#114036])
+- Update byte string formatting (2) ([@cdce8p] - [#114039])
+- Update empty line formatting after module docstring ([@cdce8p] - [#114040])
+- Move powerview timeout logic to the upstream api ([@kingy444] - [#113984])
+- Improve axis tests ([@Kane610] - [#114035])
+- Combine recorder and frontend bootstrap step ([@bdraco] - [#113985])
+- Add Powerview Type 11 ([@kingy444] - [#114047])
+- Move setup of legacy device_tracker see service to legacy setup task ([@bdraco] - [#114043])
+- Fix missing linked device on Overkiz integration ([@Tronix117] - [#114006])
+- Load light profiles in a task to avoid delaying platform setup ([@bdraco] - [#114038])
+- Smhi add reconfigure step to config flow ([@gjohansson-ST] - [#114044])
+- Fix flakey stream hls test ([@bdraco] - [#114046])
+- Fix after deps not being considered for integrations before stage 1 ([@bdraco] - [#114045])
+- Fix building images for nightlies ([@edenhaus] - [#114054])
+- Show correct ipv6 address in System Monitor ([@gjohansson-ST] - [#114024])
+- Reduce sqlalchemy reflection overhead at recorder setup time ([@bdraco] - [#113989])
+- Migrate UpdateCoordinator to its own file in aurora_abb_powerone ([@davet2001] - [#114053])
+- Create registry matrix to run publishing for images in parallel ([@edenhaus] - [#114060])
+- Enable turn_on / turn_off features for HitachiAirToAirHeatPump in Overkiz ([@iMicknl] - [#112990])
+- Bump pyrisco to 0.6.0 ([@OnFreund] - [#114063])
+- Fix bug in roon media player to use correct 'seek position' while playing a track. ([@pavoni] - [#113999])
+- Bump holidays to 0.45 ([@gjohansson-ST] - [#114069])
+- Add Rachio smart hose timer support ([@brg468] - [#107901])
+- Add Lutron Serena tilt only wood blinds ([@wujiaqi] - [#113791])
+- Add Risco system binary sensors ([@OnFreund] - [#114062])
+- Use a constant to reference `homeassistant` domain ([@jbouwh] - [#113889])
+- Fix setup timings when config entry platform loads are not awaited ([@bdraco] - [#113959])
+- Refactor recorder states tests ([@bdraco] - [#114073])
+- Catch Mill timeout error ([@joostlek] - [#114068])
+- Fix Shelly WallDisplay device power ([@thecode] - [#114071])
+- Centralize loading Axis entities ([@Kane610] - [#114018])
+- Avoid creating inner function in EntityComponent setup ([@bdraco] - [#114050])
+- Add more sensors to aurora_abb_powerone ([@davet2001] - [#114074])
+- Add reconfigure step to holiday ([@gjohansson-ST] - [#114057])
+- Migrate nut to use aionut ([@bdraco] - [#114078])
+- Allow retry during Config Flow in Advantage Air ([@Bre77] - [#114083])
+- Small performance improvement to template expand ([@bdraco] - [#114086])
+- Optimize loading of translations ([@bdraco] - [#114089])
+- Bump gcal-sync to 6.0.4 ([@allenporter] - [#114085])
+- Bump tplink_omada to 1.3.12 for ER7212PC support ([@MarkGodwin] - [#114077])
+- Add vehicle config to coordinator to fix bug in Teslemetry ([@Bre77] - [#113850])
+- Improve blue current integration code ([@Floris272] - [#114004])
+- Add more sensors to aurora_abb_powerone (part 2) ([@davet2001] - [#114097])
+- Add reconfigure flow to Axis integration ([@Kane610] - [#114067])
+- Fix flapping device_tracker test_bad_platform test ([@bdraco] - [#114102])
+- Tado: fix 113982 ([@niro1987] - [#114109])
+- Fix launch library translation keys ([@LarsStegman] - [#114093])
+- Replace if in range check ([@cdce8p] - [#114107])
+- Bump xiaomi-ble to 0.28.0 ([@Ernst79] - [#114120])
+- Ensure discovery can setup legacy device tracker platforms ([@bdraco] - [#114101])
+- Fetch ServiceNotFound message from translation cache and fix super ([@jbouwh] - [#114084])
+- Use TypeVarTuple for add_job and run_job methods ([@cdce8p] - [#114122])
+- Fix google assistant diagnostics test ([@jbouwh] - [#114111])
+- Cancel config entry setup retry at shutdown ([@bdraco] - [#114124])
+- Bump aionut to 4.1.0 ([@bdraco] - [#114125])
+- Implement diagnostics platform for APCUPSD ([@yuxincs] - [#112284])
+- Bump aionut to 4.2.1 ([@bdraco] - [#114132])
+- Bump yolink-api to 0.4.1 fix water depth sensor error when device is not initialize ([@matrixd2] - [#113994])
+- Bump aionut to 4.3.2 ([@bdraco] - [#114142])
+- Covert system_log services to be callbacks ([@bdraco] - [#114143])
+- Add repair for UniFi Protect if RTSP is disabled on camera ([@AngellusMortis] - [#114088])
+- Bump github/codeql-action from 3.24.8 to 3.24.9 (@dependabot - [#114151])
+- Bump Wandalen/wretry.action from 2.0.0 to 2.1.0 (@dependabot - [#114150])
+- Bump vilfo-api-client to 0.5.0 ([@ManneW] - [#114082])
+- Update pre-commit to 3.7.0 ([@cdce8p] - [#114154])
+- Use uv and sort jobs in builder.yml ([@edenhaus] - [#114153])
+- Update pytest-asyncio to 0.23.6 ([@cdce8p] - [#114155])
+- Generate ConfigValidationError message from English translations ([@jbouwh] - [#113844])
+- Add climate fan modes for Airzone Cloud Aidoo devices ([@Noltari] - [#103574])
+- Update coverage to 7.4.4 ([@cdce8p] - [#114158])
+- Update pytest-timeout to 2.3.1 ([@cdce8p] - [#114161])
+- Update respx to 0.21.0 ([@cdce8p] - [#114163])
+- Update pipdeptree to 2.16.1 ([@cdce8p] - [#114159])
+- Bump plugwise to v0.37.1 ([@bouwew] - [#113245])
+- Update pyOpenSSL to 24.1.0 ([@cdce8p] - [#114165])
+- Update yamllint to 1.35.1 ([@cdce8p] - [#114166])
+- Update pytest-cov to 5.0.0 ([@cdce8p] - [#114160])
+- Allow debugging tests by default in vscode ([@jbouwh] - [#114065])
+- Update typing-extensions to 4.11.0rc1 ([@cdce8p] - [#114116])
+- Avoid homekit random id generation for existing entries ([@bdraco] - [#114144])
+- Remove hourly weather entity from met_eireann ([@gjohansson-ST] - [#112449])
+- Update types packages ([@cdce8p] - [#114164])
+- Fix spelling [runtime] ([@cdce8p] - [#114169])
+- Fix spelling [docstrings + comments] ([@cdce8p] - [#114168])
+- Update pytest-unordered to 0.6.0 ([@cdce8p] - [#114162])
+- Update codespell to 2.2.6 ([@cdce8p] - [#114167])
+- Use enums to define choices in tolo ([@MatthiasLohr] - [#113992])
+- Refactor homekit device linking to use the device index ([@bdraco] - [#114145])
+- Add Withings webhook manager ([@joostlek] - [#106311])
+- Add base entity to romy integration ([@xeniter] - [#113750])
+- Updated temp offset logging in tado component ([@343max] - [#106308])
+- Bump pywaze to 1.0.0 ([@eifinger] - [#108613])
+- Bump aioautomower to 2024.3.4 ([@Thomas55555] - [#114127])
+- Adapt to Axis library file structure changes ([@Kane610] - [#114181])
+- Fix Axis not generate unique IDs ([@Kane610] - [#114115])
+- Refactor options flow in dnsip ([@gjohansson-ST] - [#114058])
+- Add Ecovacs last job event entity ([@edenhaus] - [#113826])
+- Add reauth support to NUT ([@bdraco] - [#114131])
+- Add restrictions for listening to event_reported events ([@emontnemery] - [#114183])
+- Telegram bot proxy params deprecation ([@malkstar] - [#112778])
+- Add generic test component platform setup function ([@jpbede] - [#114016])
+- Fix Shelly reauth flow ([@thecode] - [#114180])
+- Improve test coverage mqtt discovery test ([@jbouwh] - [#114188])
+- Remove deprecated `hass.components` from system_health tests ([@jpbede] - [#114207])
+- Bump anyio to 4.3.0 ([@bdraco] - [#114198])
+- Bump ruff to 0.3.4 ([@joostlek] - [#112690])
+- Use new `setup_test_component_platform` helper instead of test fixture for light platform ([@jpbede] - [#114200])
+- Bump SQLAlchemy to 2.0.29 ([@bdraco] - [#114208])
+- Preload storage for integrations we know we are going to setup ([@bdraco] - [#114192])
+- Revert "Update typing-extensions to 4.11.0rc1 (#114116)" ([@cdce8p] - [#114216])
+- Rework Axis entity loader to have a better internal storage structure ([@Kane610] - [#114114])
+- Remove async_get_device_class_lookup from entity_registry ([@bdraco] - [#114212])
+- Add YoLink Water Meter Support ([@matrixd2] - [#114148])
+- Bump pyenphase to 1.20.1 ([@catsmanac] - [#114218])
+- Add Motionblinds BLE integration ([@LennP] - [#109497])
+- Fix motion blinds formatting ([@joostlek] - [#114222])
+- Allow pre-releases for "Adjust nightly version" only ([@edenhaus] - [#114219])
+- Add more timestamp sensors to swiss_public_transport ([@miaucl] - [#107916])
+- Add label template functions ([@frenck] - [#111024])
+- Implement Identify button and Cloud connection toggle for HomeWizard Watermeter ([@DCSBL] - [#113814])
+- Don't allow listening to state_reported in event triggers ([@emontnemery] - [#114191])
+- Add test to ensure non callback event filter is rejected ([@emontnemery] - [#114182])
+- Allow string formatting for dispatcher SignalType ([@cdce8p] - [#114174])
+- Add ruff commit to git-blame-ignore-revs ([@cdce8p] - [#114229])
+- Drop Python 3.11 support ([@frenck] - [#114220])
+- Bump motionblindsble to 0.0.9 ([@LennP] - [#114232])
+- Remove test cases for task eager_start <3.12 ([@cdce8p] - [#114243])
+- Default floor level to None (and allow unsetting it) ([@frenck] - [#114249])
+- Refactor Riemann sum integral sensor to prepare for time based trigger ([@ronweikamp] - [#113932])
+- Allow numeric state trigger/condition against zone entities ([@frenck] - [#114221])
+- Use `setup_test_component_platform` helper for update entity component tests instead of `hass.components` ([@jpbede] - [#114203])
+- Add label selector ([@frenck] - [#111029])
+- Small performance improvements to energy sensors ([@bdraco] - [#114149])
+- Bump bring-api to 0.5.7 ([@tr4nt0r] - [#114252])
+- Fix ruff-format on energy sensor ([@bdraco] - [#114261])
+- Restore scapy pin to >=2.5.0 ([@bdraco] - [#114253])
+- Remove unused code in ESPHome entry_data ([@bdraco] - [#114263])
+- Do not late import config_entry in `setup_test_component_platform` test helper ([@jpbede] - [#114260])
+- Use `setup_test_component_platform` func for number entity component tests instead of `hass.components` ([@jpbede] - [#114017])
+- Add Ollama conversation agent ([@synesthesiam] - [#113962])
+- Fix Opower accounts that report cost less regularly than usage ([@tronikos] - [#114034])
+- Combine tts cache init executor jobs ([@bdraco] - [#114271])
+- Add Motionblinds brand ([@LennP] - [#114235])
+- Bump actions/setup-python from 5.0.0 to 5.1.0 (@dependabot - [#114276])
+- Bump ondilo_ico to 0.4.0 ([@JeromeHXP] - [#114022])
+- Move SignalTypes to util ([@cdce8p] - [#114236])
+- Run recorder shutdown tasks eagerly ([@bdraco] - [#113018])
+- Refactor/fix search component, including labels & floors support ([@frenck] - [#114206])
+- Bump aiounifi to v73 ([@Kane610] - [#114278])
+- Avoid delaying automation/script startup for sample blueprints ([@bdraco] - [#114277])
+- Refactor yeelight scanner to avoid creating tasks to wait for scanner start ([@bdraco] - [#113919])
+- Add select to Motionblinds BLE integration ([@LennP] - [#114228])
+- Add buttons to Motionblinds BLE integration ([@LennP] - [#114227])
+- Address late review of 17track config flow ([@shaiu] - [#114283])
+- Remove hourly weather entity from metoffice ([@gjohansson-ST] - [#112452])
+- Allow Humidifier.current_humidity to be a float ([@cdce8p] - [#111297])
+- Do not override state property in `MockEntity` ([@jpbede] - [#114231])
+- Allow float for int argument type [pylint plugin] ([@cdce8p] - [#114105])
+- Use `setup_test_component_platform` func for cover entity component tests instead of `hass.components` ([@jpbede] - [#114010])
+- Update mypy-dev to 1.10.0a3 ([@cdce8p] - [#114289])
+- Record state.last_reported ([@emontnemery] - [#114201])
+- Add tests to Rova ([@joostlek] - [#114285])
+- Use SignalType to improve typing [esphome] ([@cdce8p] - [#114296])
+- Use SignalType to improve typing [bthome] ([@cdce8p] - [#114295])
+- Update bump_version.py to append also the time to nightlies and add possibility to set manual a nightly version ([@edenhaus] - [#114300])
+- Add coordinator to Rova ([@joostlek] - [#114288])
+- Use `setup_test_component_platform` helper for binary_sensor entity component tests instead of `hass.components` ([@jpbede] - [#114293])
+- Use SignalType to improve typing [core] ([@cdce8p] - [#114298])
+- Use `setup_test_component_platform` helper for alarm_control_panel entity component tests instead of `hass.components` ([@jpbede] - [#114301])
+- Fix missing powerview shade data when initial refresh fails ([@bdraco] - [#113033])
+- Fix version_bump --set-nightly-version ([@edenhaus] - [#114304])
+- Bump pyprusalink to 2.1.1 and support Prusa MK3 ([@the-ress] - [#114210])
+- Raise issue if not Rova area anymore ([@joostlek] - [#114309])
+- Fix exception when logging out from cloud ([@emontnemery] - [#114306])
+- Add support for PoE control of TP-Link Omada Gateways ([@MarkGodwin] - [#114138])
+- Start deprecation of auxiliary heater in ClimateEntity ([@gjohansson-ST] - [#112532])
+- Refactor switcher kis ([@YogevBokobza] - [#114281])
+- Migrate Rova to has entity name ([@joostlek] - [#114303])
+- Version Bump for WeatherFlow Cloud Backing Lib ([@jeeftor] - [#114302])
+- Finish ROVA init tests ([@joostlek] - [#114315])
+- Bump intents to 2024.3.27 ([@synesthesiam] - [#114312])
+- Change min and max humidity for MQTT climate and humidifier ([@jbouwh] - [#114292])
+- Remove deprecated forecast attribute from WeatherEntity ([@gjohansson-ST] - [#110761])
+- Defensively validate ZHA quirks v2 supplied entity metadata ([@dmulcahey] - [#112643])
+- Handle TypeError in Spotify ([@joostlek] - [#114317])
+- Fix icons for Motionblinds BLE integration ([@LennP] - [#114321])
+- Fix feedback in ROVA ([@joostlek] - [#114308])
+- Use SignalType to improve typing [homekit] ([@cdce8p] - [#114297])
+- Support the Home Assistant Connect ZBT-1 ([@puddly] - [#114213])
+- Update frontend to 20240327.0 ([@bramkragten] - [#114322])
+- Use fallback voice for selected language in cloud ([@MartinHjelmare] - [#114246])
+- Bump zha-quirks to 0.0.113 ([@TheJulianJES] - [#114311])
+- Bump pyduotecno to 2024.3.2 ([@Cereal2nd] - [#114320])
+- Fix Matter airconditioner discovery of climate platform ([@marcelveldt] - [#114326])
+- Avoid changing local time on Nobø Ecohub ([@oyvindwe] - [#114332])
+- Don't access States.last_reported_ts before it's added ([@emontnemery] - [#114333])
+- Download translations only once in the build pipeline ([@edenhaus] - [#114335])
+- Remove checked in translations ([@edenhaus] - [#114336])
+- Revert velocity change in powerview ([@bdraco] - [#114337])
+- Add more Ollama models ([@synesthesiam] - [#114339])
+- Bump fjaraskupan to 2.3.0 ([@elupus] - [#114344])
+- Fix empty delays in script helper ([@bdraco] - [#114346])
+- Bump pyunifiprotect to 5.1.2 ([@AngellusMortis] - [#114348])
+- Fix script for checking on existing translations ([@edenhaus] - [#114354])
+- Improve utility meter restore state tests ([@emontnemery] - [#114356])
+- Improve device class of utility meter ([@emontnemery] - [#114368])
+- Update pytile to 2023.12.0 ([@cdce8p] - [#114370])
+- Fix streamlabswater feedback ([@joostlek] - [#114371])
+- Fix Suez water feedback ([@joostlek] - [#114372])
+- Fix Swiss public transport feedback ([@joostlek] - [#114373])
+- Fix Lupusec feedback ([@joostlek] - [#114374])
+- Adapt Tractive integration the latest API changes ([@bieniu] - [#114380])
+- Fix hassfest service icons check for custom integrations ([@frenck] - [#114389])
+- Filter preferred TTS format options if not supported ([@synesthesiam] - [#114392])
+- Fix area search for entities of devices ([@frenck] - [#114394])
+- Update frontend to 20240328.0 ([@piitaya] - [#114396])
+- Bump aioraven to 0.5.3 ([@cottsay] - [#114397])
+- Follow real AtlanticPassAPCZoneControlZone physical mode on Overkiz (HEAT, COOL or HEAT_COOL) ([@Tronix117] - [#111830])
+- Add overkiz heating status, absence mode, and boost mode binary sensors for Atlantic Water Heater ([@ALERTua] - [#114184])
+- Add overkiz water targets temperature numbers for Atlantic water heater ([@ALERTua] - [#114185])
+- Add overkiz bottom tank water temperature and core control water temperature for Atlantic Water Heater ([@ALERTua] - [#114186])
+- Avoid concurrent radio operations with powerview hubs ([@bdraco] - [#114399])
+- Cleanup some plex tasks that delayed startup ([@bdraco] - [#114418])
+- Bump python-ring-doorbell to 0.8.8 ([@sdb9696] - [#114431])
+- Bump pyoverkiz to 1.13.9 ([@iMicknl] - [#114442])
+- Log warnings in Renault initialisation ([@epenet] - [#114445])
+- Bump async-upnp-client to 0.38.3 ([@StevenLooman] - [#114447])
+- Update frontend to 20240329.0 ([@piitaya] - [#114452])
+- Avoid tracking import executor jobs ([@bdraco] - [#114453])
+- Update frontend to 20240329.1 ([@piitaya] - [#114459])
+- Cleanup Shelly RGBW light entities ([@thecode] - [#114410])
+- Mark executor jobs as background unless created from a tracked task ([@bdraco] - [#114450])
+- Add initial support for floors to intents ([@synesthesiam] - [#114456])
+- Improve sonos test synchronization ([@bdraco] - [#114468])
+- Fix Overkiz Hitachi OVP air-to-air heat pump ([@dotvav] - [#114487])
+- Fix late load of anyio doing blocking I/O in the event loop ([@bdraco] - [#114491])
+- Fix workday doing blocking I/O in the event loop ([@bdraco] - [#114492])
+- Fix server update from breaking setup in Speedtest.NET ([@gjohansson-ST] - [#114524])
+- Bump axis to v60 ([@Kane610] - [#114544])
+- Fix wrong icons ([@joostlek] - [#114567])
+- Bump velbusaio to 2024.4.0 ([@Cereal2nd] - [#114569])
+- Reduce usage of executer threads in AVM Fritz!Tools ([@mib1185] - [#114570])
+- Filter out ignored entries in ssdp step of AVM Fritz!SmartHome ([@mib1185] - [#114574])
+- Bump plexapi to 4.15.11 ([@jjlawren] - [#114581])
+- Fix reolink media source data access ([@MartinHjelmare] - [#114593])
+- Bump zeroconf to 0.132.0 ([@bdraco] - [#114596])
+- Add missing platforms_exist guard to check_config ([@bdraco] - [#114600])
+- Fix memory leak when importing a platform fails ([@bdraco] - [#114602])
+- Avoid storing raw extracted traceback in system_log ([@bdraco] - [#114603])
+- Bump whirlpool-sixth-sense to 0.18.7 ([@mkmer] - [#114606])
+- Display sonos album title with URL encoding ([@PeteRager] - [#113693])
+- Bump roombapy to 1.8.1 ([@joostlek] - [#114478])
+- Improve Shelly RPC device update progress ([@bieniu] - [#114566])
+- Fix battery heater in Tessie ([@Bre77] - [#114568])
+- Add diagnostic platform to Whirlpool ([@mkmer] - [#114578])
+- Catch potential ValueError when getting or setting Starlink sleep values ([@boswelja] - [#114607])
+- Bump opower to 0.4.2 ([@max2697] - [#114608])
+- Add floor selector ([@frenck] - [#114614])
+- Fix Starlink integration startup issue ([@Fexiven] - [#114615])
+- Update frontend to 20240402.0 ([@bramkragten] - [#114627])
+- Reduce ZHA OTA logbook entries and extraneous updates ([@puddly] - [#114591])
+- Fix Overkiz Hitachi OVP air-to-air heat pump ([@dotvav] - [#114611])
+- Bump ring_doorbell integration to 0.8.9 ([@sdb9696] - [#114631])
+- Update frontend to 20240402.1 ([@bramkragten] - [#114646])
+- Fix Sonos play imported playlists ([@PeteRager] - [#113934])
+- Bump aiounifi to v74 ([@Kane610] - [#114649])
+- Add missing state to the Tractive tracker state sensor ([@bieniu] - [#114654])
+- Bump holidays to 0.46 ([@gjohansson-ST] - [#114657])
+- Avoid trying to load platform that are known to not exist in async_prepare_setup_platform ([@bdraco] - [#114659])
+- Update frontend to 20240402.2 ([@bramkragten] - [#114683])
+- Rename Motionblinds BLE integration to Motionblinds Bluetooth ([@LennP] - [#114584])
+- Bump flexit_bacnet to 2.2.1 ([@lellky] - [#114641])
+- Import zha quirks in the executor ([@dmulcahey] - [#114685])
+- Fix Downloader config flow ([@joostlek] - [#114718])
+- Avoid blocking IO in downloader config flow ([@joostlek] - [#114741])
+- Update frontend to 20240403.0 ([@bramkragten] - [#114747])
+- Allow passing area/device/entity IDs to floor_id and floor_name ([@edenhaus] - [#114748])
+- Bump intents ([@synesthesiam] - [#114755])
+- Update frontend to 20240403.1 ([@bramkragten] - [#114756])
+- Fix Synology DSM setup in case no Surveillance Station permission ([@mib1185] - [#114757])
+- Fix for Sonos URL encoding problem #102557 ([@IngoK1] - [#109518])
+- Use `setup_test_component_platform` helper for sensor entity component tests instead of `hass.components` ([@jpbede] - [#114316])
+
+
+## Release 2024.4.1 - April 5
+
+- Update aioairzone-cloud to v0.4.7 ([@Noltari] - [#114761])
+- Bump myuplink dependency to 0.6.0 ([@astrandb] - [#114767])
+- Update romy to 0.0.9 ([@cdce8p] - [#114360])
+- Update romy to 0.0.10 ([@xeniter] - [#114785])
+- Fix unhandled `KeyError` during Notion setup ([@bachya] - [#114787])
+- Fix Lutron light brightness values ([@cdheiser] - [#114794])
+- Fix type cast in snmp ([@lextm] - [#114795])
+- Handle ambiguous script actions by using action map order ([@bdraco] - [#114825])
+- Bump opower to 0.4.3 ([@tronikos] - [#114826])
+- Refactor ConfigStore to avoid needing to pass config_dir ([@bdraco] - [#114827])
+- Avoid blocking IO in downloader initialization ([@joostlek] - [#114841])
+- Fix Downloader YAML import ([@joostlek] - [#114844])
+- Update frontend to 20240404.0 ([@bramkragten] - [#114859])
+- Fix Axis camera platform support HTTPS ([@Kane610] - [#114886])
+- Bump weatherflow4py to 0.2.20 ([@jeeftor] - [#114888])
+- Fix Axis reconfigure step not providing protocols as alternatives but as string ([@Kane610] - [#114889])
+- Update frontend to 20240404.1 ([@bramkragten] - [#114890])
+- Ensure all tables have the default table args in the db_schema ([@bdraco] - [#114895])
+- Reduce august polling frequency ([@bdraco] - [#114904])
+- Show correct model string in myuplink ([@astrandb] - [#114921])
+- Create right import issues in Downloader ([@joostlek] - [#114922])
+- Fix cast dashboard in media browser ([@joostlek] - [#114924])
+- Pin systembridgemodels to 4.0.4 ([@timmo001] - [#114842])
+- Fix ROVA validation ([@joostlek] - [#114938])
+
+[#114360]: https://github.com/home-assistant/core/pull/114360
+[#114761]: https://github.com/home-assistant/core/pull/114761
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114767]: https://github.com/home-assistant/core/pull/114767
+[#114785]: https://github.com/home-assistant/core/pull/114785
+[#114787]: https://github.com/home-assistant/core/pull/114787
+[#114794]: https://github.com/home-assistant/core/pull/114794
+[#114795]: https://github.com/home-assistant/core/pull/114795
+[#114825]: https://github.com/home-assistant/core/pull/114825
+[#114826]: https://github.com/home-assistant/core/pull/114826
+[#114827]: https://github.com/home-assistant/core/pull/114827
+[#114841]: https://github.com/home-assistant/core/pull/114841
+[#114842]: https://github.com/home-assistant/core/pull/114842
+[#114844]: https://github.com/home-assistant/core/pull/114844
+[#114859]: https://github.com/home-assistant/core/pull/114859
+[#114886]: https://github.com/home-assistant/core/pull/114886
+[#114888]: https://github.com/home-assistant/core/pull/114888
+[#114889]: https://github.com/home-assistant/core/pull/114889
+[#114890]: https://github.com/home-assistant/core/pull/114890
+[#114895]: https://github.com/home-assistant/core/pull/114895
+[#114904]: https://github.com/home-assistant/core/pull/114904
+[#114921]: https://github.com/home-assistant/core/pull/114921
+[#114922]: https://github.com/home-assistant/core/pull/114922
+[#114924]: https://github.com/home-assistant/core/pull/114924
+[#114938]: https://github.com/home-assistant/core/pull/114938
+[@Kane610]: https://github.com/Kane610
+[@Noltari]: https://github.com/Noltari
+[@astrandb]: https://github.com/astrandb
+[@bachya]: https://github.com/bachya
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@cdce8p]: https://github.com/cdce8p
+[@cdheiser]: https://github.com/cdheiser
+[@frenck]: https://github.com/frenck
+[@jeeftor]: https://github.com/jeeftor
+[@joostlek]: https://github.com/joostlek
+[@lextm]: https://github.com/lextm
+[@timmo001]: https://github.com/timmo001
+[@tronikos]: https://github.com/tronikos
+[@xeniter]: https://github.com/xeniter
+
+## Release 2024.4.2 - April 8
+
+- Fix hang in SNMP device_tracker implementation ([@nmaggioni] - [#112815])
+- Fix missing if statement in homematic ([@bbr111] - [#114832])
+- Bump pylitterbot to 2023.4.11 ([@natekspencer] - [#114918])
+- Fix Snapcast Config flow ([@joostlek] - [#114952])
+- Bump axis to v61 ([@Kane610] - [#114964])
+- Filter out fuzzy translations from Lokalise ([@joostlek] - [#114968])
+- Upgrade to pynobo 1.8.1 ([@oyvindwe] - [#114982])
+- Fix dictionary changed size during iteration in prometheus ([@bdraco] - [#115005])
+- Bump `brother` to version 4.1.0 ([@bieniu] - [#115021])
+- Bump yolink-api to 0.4.2 ([@matrixd2] - [#115026])
+- Update xknxproject to 3.7.1 ([@farmio] - [#115053])
+- Fix synology_dsm availablity ([@bdraco] - [#115073])
+- Downgrade hass-nabucasa from 0.80.0 to 0.78.0 ([@ludeeus] - [#115078])
+- Bump velbus-aio to 2024.4.1 ([@Cereal2nd] - [#115109])
+- Terminate scripts with until and while conditions that execute more than 10000 times ([@bdraco] - [#115110])
+- improve handling of incorrect values in fyta integration ([@dontinelli] - [#115134])
+- Bump fyta_cli to 0.3.5 ([@dontinelli] - [#115143])
+- Fix fibaro sensor additional sensor lookup ([@rappenze] - [#115148])
+- Write timer entity state before firing events ([@bdraco] - [#115151])
+- Avoid checking for polling if an entity fails to add ([@bdraco] - [#115159])
+- Only reset requested utility meter with no tariff ([@gibwar] - [#115170])
+
+[#112815]: https://github.com/home-assistant/core/pull/112815
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114832]: https://github.com/home-assistant/core/pull/114832
+[#114918]: https://github.com/home-assistant/core/pull/114918
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#114952]: https://github.com/home-assistant/core/pull/114952
+[#114964]: https://github.com/home-assistant/core/pull/114964
+[#114968]: https://github.com/home-assistant/core/pull/114968
+[#114982]: https://github.com/home-assistant/core/pull/114982
+[#115005]: https://github.com/home-assistant/core/pull/115005
+[#115021]: https://github.com/home-assistant/core/pull/115021
+[#115026]: https://github.com/home-assistant/core/pull/115026
+[#115053]: https://github.com/home-assistant/core/pull/115053
+[#115073]: https://github.com/home-assistant/core/pull/115073
+[#115078]: https://github.com/home-assistant/core/pull/115078
+[#115109]: https://github.com/home-assistant/core/pull/115109
+[#115110]: https://github.com/home-assistant/core/pull/115110
+[#115134]: https://github.com/home-assistant/core/pull/115134
+[#115143]: https://github.com/home-assistant/core/pull/115143
+[#115148]: https://github.com/home-assistant/core/pull/115148
+[#115151]: https://github.com/home-assistant/core/pull/115151
+[#115159]: https://github.com/home-assistant/core/pull/115159
+[#115170]: https://github.com/home-assistant/core/pull/115170
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@Kane610]: https://github.com/Kane610
+[@bbr111]: https://github.com/bbr111
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@dontinelli]: https://github.com/dontinelli
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gibwar]: https://github.com/gibwar
+[@joostlek]: https://github.com/joostlek
+[@ludeeus]: https://github.com/ludeeus
+[@matrixd2]: https://github.com/matrixd2
+[@natekspencer]: https://github.com/natekspencer
+[@nmaggioni]: https://github.com/nmaggioni
+[@oyvindwe]: https://github.com/oyvindwe
+[@rappenze]: https://github.com/rappenze
+
+## Release 2024.4.3 - April 12
+
+- Bump aiohttp to 3.9.4 ([@bdraco] - [#110730])
+- Add support for adopt data disk repair ([@mdegat01] - [#114891])
+- Improve Risco exception logging ([@OnFreund] - [#115232])
+- Configurable maximum concurrency in Risco local ([@OnFreund] - [#115226])
+- Fix misssing timeout in caldav ([@bdraco] - [#115247])
+- Fix Google Tasks parsing of remove responses ([@allenporter] - [#115258])
+- Bump forecast-solar lib to v3.1.0 ([@klaasnicolaas] - [#115272])
+- Support backup of add-ons with hyphens ([@agners] - [#115274])
+- Bump pymodbus v3.6.7 ([@janiversen] - [#115279])
+- Bump yt-dlp to 2024.04.09 ([@joostlek] - [#115295])
+- Fix Aranet failure when the Bluetooth proxy is not providing a device name ([@thecode] - [#115298])
+- Bump zha-quirks to 0.0.114 ([@TheJulianJES] - [#115299])
+- Ensure automations do not execute from a trigger if they are disabled ([@bdraco] - [#115305])
+- Bump bleak-retry-connector 3.5.0 ([@bdraco] - [#115328])
+- Secure against resetting a non active modbus ([@janiversen] - [#115364])
+- Solve modbus test problem ([@janiversen] - [#115376])
+- Fix deadlock in holidays dynamic loading ([@bdraco] - [#115385])
+- Bump whirlpool-sixth-sense to 0.18.8 ([@NodeJSmith] - [#115393])
+- Fix bug in rainbird switch when turning off a switch that is already off ([@allenporter] - [#115421])
+- Bump pybotvac to 0.0.25 ([@Santobert] - [#115435])
+- Update frontend to 20240404.2 ([@bramkragten] - [#115460])
+
+[#110730]: https://github.com/home-assistant/core/pull/110730
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114891]: https://github.com/home-assistant/core/pull/114891
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#115186]: https://github.com/home-assistant/core/pull/115186
+[#115226]: https://github.com/home-assistant/core/pull/115226
+[#115232]: https://github.com/home-assistant/core/pull/115232
+[#115247]: https://github.com/home-assistant/core/pull/115247
+[#115258]: https://github.com/home-assistant/core/pull/115258
+[#115272]: https://github.com/home-assistant/core/pull/115272
+[#115274]: https://github.com/home-assistant/core/pull/115274
+[#115279]: https://github.com/home-assistant/core/pull/115279
+[#115295]: https://github.com/home-assistant/core/pull/115295
+[#115298]: https://github.com/home-assistant/core/pull/115298
+[#115299]: https://github.com/home-assistant/core/pull/115299
+[#115305]: https://github.com/home-assistant/core/pull/115305
+[#115328]: https://github.com/home-assistant/core/pull/115328
+[#115364]: https://github.com/home-assistant/core/pull/115364
+[#115376]: https://github.com/home-assistant/core/pull/115376
+[#115385]: https://github.com/home-assistant/core/pull/115385
+[#115393]: https://github.com/home-assistant/core/pull/115393
+[#115421]: https://github.com/home-assistant/core/pull/115421
+[#115435]: https://github.com/home-assistant/core/pull/115435
+[#115460]: https://github.com/home-assistant/core/pull/115460
+[@NodeJSmith]: https://github.com/NodeJSmith
+[@OnFreund]: https://github.com/OnFreund
+[@Santobert]: https://github.com/Santobert
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@agners]: https://github.com/agners
+[@allenporter]: https://github.com/allenporter
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@joostlek]: https://github.com/joostlek
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@mdegat01]: https://github.com/mdegat01
+[@thecode]: https://github.com/thecode
+
+## Release 2024.4.4 - April 23
+
+- Bump slixmpp version to 1.8.5 ([@ravermeister] - [#114448])
+- Make Withings recoverable after internet outage ([@joostlek] - [#115124])
+- Fix Hyperion light not updating state ([@avee87] - [#115389])
+- Add scheduled mode to renault charge mode ([@slyoldfox] - [#115427])
+- Bump zeroconf to 0.132.1 ([@bdraco] - [#115501])
+- Bump zeroconf to 0.132.2 ([@bdraco] - [#115505])
+- Update pillow to 10.3.0 ([@cdce8p] - [#115524])
+- Fix race in TimestampDataUpdateCoordinator ([@bdraco] - [#115542])
+- Fix Teslemetry sensor values ([@Bre77] - [#115571])
+- Modbus: Bump pymodbus v3.6.8 ([@janiversen] - [#115574])
+- Fix sensor entity description in Teslemetry ([@Bre77] - [#115614])
+- Bump httpcore to 1.0.5 ([@bdraco] - [#115672])
+- Bump sqlparse to 0.5.0 ([@bdraco] - [#115681])
+- Bump aiohttp to 3.9.5 ([@bdraco] - [#115727])
+- Bump renault-api to 0.2.2 ([@epenet] - [#115738])
+- Fix homeworks import flow ([@emontnemery] - [#115761])
+- Allow [##:##:##] type keypad address in homeworks ([@emontnemery] - [#115762])
+- Add missing media_player features to Samsung TV ([@chemelli74] - [#115788])
+- Bump aiounifi to v75 ([@Kane610] - [#115819])
+- Ensure scripts with timeouts of zero timeout immediately ([@bdraco] - [#115830])
+- Fix KeyError error when fetching sensors (Airthings) ([@LaStrada] - [#115844])
+- Bump plexapi to 4.15.12 ([@jjlawren] - [#115872])
+- Bump ical to 8.0.0 ([@allenporter] - [#115907])
+- Fix geo location attributes of Tankerkoenig sensors ([@mib1185] - [#115914])
+- Use start helper in squeezebox for server discovery ([@rajlaud] - [#115978])
+
+[#114448]: https://github.com/home-assistant/core/pull/114448
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#115124]: https://github.com/home-assistant/core/pull/115124
+[#115186]: https://github.com/home-assistant/core/pull/115186
+[#115389]: https://github.com/home-assistant/core/pull/115389
+[#115427]: https://github.com/home-assistant/core/pull/115427
+[#115463]: https://github.com/home-assistant/core/pull/115463
+[#115501]: https://github.com/home-assistant/core/pull/115501
+[#115505]: https://github.com/home-assistant/core/pull/115505
+[#115524]: https://github.com/home-assistant/core/pull/115524
+[#115542]: https://github.com/home-assistant/core/pull/115542
+[#115571]: https://github.com/home-assistant/core/pull/115571
+[#115574]: https://github.com/home-assistant/core/pull/115574
+[#115614]: https://github.com/home-assistant/core/pull/115614
+[#115672]: https://github.com/home-assistant/core/pull/115672
+[#115681]: https://github.com/home-assistant/core/pull/115681
+[#115727]: https://github.com/home-assistant/core/pull/115727
+[#115738]: https://github.com/home-assistant/core/pull/115738
+[#115761]: https://github.com/home-assistant/core/pull/115761
+[#115762]: https://github.com/home-assistant/core/pull/115762
+[#115788]: https://github.com/home-assistant/core/pull/115788
+[#115819]: https://github.com/home-assistant/core/pull/115819
+[#115830]: https://github.com/home-assistant/core/pull/115830
+[#115844]: https://github.com/home-assistant/core/pull/115844
+[#115872]: https://github.com/home-assistant/core/pull/115872
+[#115907]: https://github.com/home-assistant/core/pull/115907
+[#115914]: https://github.com/home-assistant/core/pull/115914
+[#115978]: https://github.com/home-assistant/core/pull/115978
+[@Bre77]: https://github.com/Bre77
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@allenporter]: https://github.com/allenporter
+[@avee87]: https://github.com/avee87
+[@bdraco]: https://github.com/bdraco
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@jjlawren]: https://github.com/jjlawren
+[@joostlek]: https://github.com/joostlek
+[@mib1185]: https://github.com/mib1185
+[@rajlaud]: https://github.com/rajlaud
+[@ravermeister]: https://github.com/ravermeister
+[@slyoldfox]: https://github.com/slyoldfox
+
+[#100055]: https://github.com/home-assistant/core/pull/100055
+[#102333]: https://github.com/home-assistant/core/pull/102333
+[#102884]: https://github.com/home-assistant/core/pull/102884
+[#103057]: https://github.com/home-assistant/core/pull/103057
+[#103139]: https://github.com/home-assistant/core/pull/103139
+[#103564]: https://github.com/home-assistant/core/pull/103564
+[#103574]: https://github.com/home-assistant/core/pull/103574
+[#104095]: https://github.com/home-assistant/core/pull/104095
+[#104334]: https://github.com/home-assistant/core/pull/104334
+[#104492]: https://github.com/home-assistant/core/pull/104492
+[#104604]: https://github.com/home-assistant/core/pull/104604
+[#104737]: https://github.com/home-assistant/core/pull/104737
+[#104975]: https://github.com/home-assistant/core/pull/104975
+[#105516]: https://github.com/home-assistant/core/pull/105516
+[#105643]: https://github.com/home-assistant/core/pull/105643
+[#105697]: https://github.com/home-assistant/core/pull/105697
+[#105755]: https://github.com/home-assistant/core/pull/105755
+[#105756]: https://github.com/home-assistant/core/pull/105756
+[#105795]: https://github.com/home-assistant/core/pull/105795
+[#105967]: https://github.com/home-assistant/core/pull/105967
+[#106308]: https://github.com/home-assistant/core/pull/106308
+[#106311]: https://github.com/home-assistant/core/pull/106311
+[#107901]: https://github.com/home-assistant/core/pull/107901
+[#107916]: https://github.com/home-assistant/core/pull/107916
+[#107957]: https://github.com/home-assistant/core/pull/107957
+[#108152]: https://github.com/home-assistant/core/pull/108152
+[#108287]: https://github.com/home-assistant/core/pull/108287
+[#108596]: https://github.com/home-assistant/core/pull/108596
+[#108613]: https://github.com/home-assistant/core/pull/108613
+[#108636]: https://github.com/home-assistant/core/pull/108636
+[#108709]: https://github.com/home-assistant/core/pull/108709
+[#108781]: https://github.com/home-assistant/core/pull/108781
+[#108789]: https://github.com/home-assistant/core/pull/108789
+[#108794]: https://github.com/home-assistant/core/pull/108794
+[#108949]: https://github.com/home-assistant/core/pull/108949
+[#109080]: https://github.com/home-assistant/core/pull/109080
+[#109088]: https://github.com/home-assistant/core/pull/109088
+[#109185]: https://github.com/home-assistant/core/pull/109185
+[#109497]: https://github.com/home-assistant/core/pull/109497
+[#109518]: https://github.com/home-assistant/core/pull/109518
+[#109662]: https://github.com/home-assistant/core/pull/109662
+[#109819]: https://github.com/home-assistant/core/pull/109819
+[#109821]: https://github.com/home-assistant/core/pull/109821
+[#109893]: https://github.com/home-assistant/core/pull/109893
+[#109930]: https://github.com/home-assistant/core/pull/109930
+[#110297]: https://github.com/home-assistant/core/pull/110297
+[#110327]: https://github.com/home-assistant/core/pull/110327
+[#110481]: https://github.com/home-assistant/core/pull/110481
+[#110483]: https://github.com/home-assistant/core/pull/110483
+[#110492]: https://github.com/home-assistant/core/pull/110492
+[#110761]: https://github.com/home-assistant/core/pull/110761
+[#110764]: https://github.com/home-assistant/core/pull/110764
+[#110816]: https://github.com/home-assistant/core/pull/110816
+[#110847]: https://github.com/home-assistant/core/pull/110847
+[#110850]: https://github.com/home-assistant/core/pull/110850
+[#110860]: https://github.com/home-assistant/core/pull/110860
+[#110885]: https://github.com/home-assistant/core/pull/110885
+[#110897]: https://github.com/home-assistant/core/pull/110897
+[#110906]: https://github.com/home-assistant/core/pull/110906
+[#110961]: https://github.com/home-assistant/core/pull/110961
+[#110997]: https://github.com/home-assistant/core/pull/110997
+[#111024]: https://github.com/home-assistant/core/pull/111024
+[#111029]: https://github.com/home-assistant/core/pull/111029
+[#111135]: https://github.com/home-assistant/core/pull/111135
+[#111156]: https://github.com/home-assistant/core/pull/111156
+[#111161]: https://github.com/home-assistant/core/pull/111161
+[#111190]: https://github.com/home-assistant/core/pull/111190
+[#111196]: https://github.com/home-assistant/core/pull/111196
+[#111258]: https://github.com/home-assistant/core/pull/111258
+[#111289]: https://github.com/home-assistant/core/pull/111289
+[#111292]: https://github.com/home-assistant/core/pull/111292
+[#111297]: https://github.com/home-assistant/core/pull/111297
+[#111325]: https://github.com/home-assistant/core/pull/111325
+[#111344]: https://github.com/home-assistant/core/pull/111344
+[#111349]: https://github.com/home-assistant/core/pull/111349
+[#111386]: https://github.com/home-assistant/core/pull/111386
+[#111391]: https://github.com/home-assistant/core/pull/111391
+[#111403]: https://github.com/home-assistant/core/pull/111403
+[#111419]: https://github.com/home-assistant/core/pull/111419
+[#111423]: https://github.com/home-assistant/core/pull/111423
+[#111431]: https://github.com/home-assistant/core/pull/111431
+[#111440]: https://github.com/home-assistant/core/pull/111440
+[#111466]: https://github.com/home-assistant/core/pull/111466
+[#111502]: https://github.com/home-assistant/core/pull/111502
+[#111512]: https://github.com/home-assistant/core/pull/111512
+[#111514]: https://github.com/home-assistant/core/pull/111514
+[#111525]: https://github.com/home-assistant/core/pull/111525
+[#111526]: https://github.com/home-assistant/core/pull/111526
+[#111532]: https://github.com/home-assistant/core/pull/111532
+[#111540]: https://github.com/home-assistant/core/pull/111540
+[#111545]: https://github.com/home-assistant/core/pull/111545
+[#111548]: https://github.com/home-assistant/core/pull/111548
+[#111614]: https://github.com/home-assistant/core/pull/111614
+[#111666]: https://github.com/home-assistant/core/pull/111666
+[#111676]: https://github.com/home-assistant/core/pull/111676
+[#111683]: https://github.com/home-assistant/core/pull/111683
+[#111687]: https://github.com/home-assistant/core/pull/111687
+[#111688]: https://github.com/home-assistant/core/pull/111688
+[#111700]: https://github.com/home-assistant/core/pull/111700
+[#111706]: https://github.com/home-assistant/core/pull/111706
+[#111709]: https://github.com/home-assistant/core/pull/111709
+[#111725]: https://github.com/home-assistant/core/pull/111725
+[#111727]: https://github.com/home-assistant/core/pull/111727
+[#111747]: https://github.com/home-assistant/core/pull/111747
+[#111754]: https://github.com/home-assistant/core/pull/111754
+[#111755]: https://github.com/home-assistant/core/pull/111755
+[#111758]: https://github.com/home-assistant/core/pull/111758
+[#111761]: https://github.com/home-assistant/core/pull/111761
+[#111767]: https://github.com/home-assistant/core/pull/111767
+[#111798]: https://github.com/home-assistant/core/pull/111798
+[#111804]: https://github.com/home-assistant/core/pull/111804
+[#111805]: https://github.com/home-assistant/core/pull/111805
+[#111806]: https://github.com/home-assistant/core/pull/111806
+[#111807]: https://github.com/home-assistant/core/pull/111807
+[#111808]: https://github.com/home-assistant/core/pull/111808
+[#111809]: https://github.com/home-assistant/core/pull/111809
+[#111810]: https://github.com/home-assistant/core/pull/111810
+[#111811]: https://github.com/home-assistant/core/pull/111811
+[#111812]: https://github.com/home-assistant/core/pull/111812
+[#111813]: https://github.com/home-assistant/core/pull/111813
+[#111814]: https://github.com/home-assistant/core/pull/111814
+[#111816]: https://github.com/home-assistant/core/pull/111816
+[#111824]: https://github.com/home-assistant/core/pull/111824
+[#111827]: https://github.com/home-assistant/core/pull/111827
+[#111830]: https://github.com/home-assistant/core/pull/111830
+[#111842]: https://github.com/home-assistant/core/pull/111842
+[#111844]: https://github.com/home-assistant/core/pull/111844
+[#111845]: https://github.com/home-assistant/core/pull/111845
+[#111846]: https://github.com/home-assistant/core/pull/111846
+[#111847]: https://github.com/home-assistant/core/pull/111847
+[#111848]: https://github.com/home-assistant/core/pull/111848
+[#111849]: https://github.com/home-assistant/core/pull/111849
+[#111850]: https://github.com/home-assistant/core/pull/111850
+[#111851]: https://github.com/home-assistant/core/pull/111851
+[#111852]: https://github.com/home-assistant/core/pull/111852
+[#111853]: https://github.com/home-assistant/core/pull/111853
+[#111854]: https://github.com/home-assistant/core/pull/111854
+[#111855]: https://github.com/home-assistant/core/pull/111855
+[#111856]: https://github.com/home-assistant/core/pull/111856
+[#111857]: https://github.com/home-assistant/core/pull/111857
+[#111861]: https://github.com/home-assistant/core/pull/111861
+[#111862]: https://github.com/home-assistant/core/pull/111862
+[#111863]: https://github.com/home-assistant/core/pull/111863
+[#111864]: https://github.com/home-assistant/core/pull/111864
+[#111865]: https://github.com/home-assistant/core/pull/111865
+[#111866]: https://github.com/home-assistant/core/pull/111866
+[#111878]: https://github.com/home-assistant/core/pull/111878
+[#111880]: https://github.com/home-assistant/core/pull/111880
+[#111881]: https://github.com/home-assistant/core/pull/111881
+[#111883]: https://github.com/home-assistant/core/pull/111883
+[#111888]: https://github.com/home-assistant/core/pull/111888
+[#111891]: https://github.com/home-assistant/core/pull/111891
+[#111893]: https://github.com/home-assistant/core/pull/111893
+[#111895]: https://github.com/home-assistant/core/pull/111895
+[#111896]: https://github.com/home-assistant/core/pull/111896
+[#111897]: https://github.com/home-assistant/core/pull/111897
+[#111899]: https://github.com/home-assistant/core/pull/111899
+[#111900]: https://github.com/home-assistant/core/pull/111900
+[#111901]: https://github.com/home-assistant/core/pull/111901
+[#111902]: https://github.com/home-assistant/core/pull/111902
+[#111904]: https://github.com/home-assistant/core/pull/111904
+[#111905]: https://github.com/home-assistant/core/pull/111905
+[#111906]: https://github.com/home-assistant/core/pull/111906
+[#111907]: https://github.com/home-assistant/core/pull/111907
+[#111908]: https://github.com/home-assistant/core/pull/111908
+[#111911]: https://github.com/home-assistant/core/pull/111911
+[#111912]: https://github.com/home-assistant/core/pull/111912
+[#111916]: https://github.com/home-assistant/core/pull/111916
+[#111917]: https://github.com/home-assistant/core/pull/111917
+[#111927]: https://github.com/home-assistant/core/pull/111927
+[#111928]: https://github.com/home-assistant/core/pull/111928
+[#111929]: https://github.com/home-assistant/core/pull/111929
+[#111932]: https://github.com/home-assistant/core/pull/111932
+[#111933]: https://github.com/home-assistant/core/pull/111933
+[#111934]: https://github.com/home-assistant/core/pull/111934
+[#111935]: https://github.com/home-assistant/core/pull/111935
+[#111936]: https://github.com/home-assistant/core/pull/111936
+[#111940]: https://github.com/home-assistant/core/pull/111940
+[#111943]: https://github.com/home-assistant/core/pull/111943
+[#111945]: https://github.com/home-assistant/core/pull/111945
+[#111946]: https://github.com/home-assistant/core/pull/111946
+[#111947]: https://github.com/home-assistant/core/pull/111947
+[#111949]: https://github.com/home-assistant/core/pull/111949
+[#111952]: https://github.com/home-assistant/core/pull/111952
+[#111954]: https://github.com/home-assistant/core/pull/111954
+[#111955]: https://github.com/home-assistant/core/pull/111955
+[#111964]: https://github.com/home-assistant/core/pull/111964
+[#111965]: https://github.com/home-assistant/core/pull/111965
+[#111970]: https://github.com/home-assistant/core/pull/111970
+[#111972]: https://github.com/home-assistant/core/pull/111972
+[#111973]: https://github.com/home-assistant/core/pull/111973
+[#111974]: https://github.com/home-assistant/core/pull/111974
+[#111976]: https://github.com/home-assistant/core/pull/111976
+[#111977]: https://github.com/home-assistant/core/pull/111977
+[#111980]: https://github.com/home-assistant/core/pull/111980
+[#111981]: https://github.com/home-assistant/core/pull/111981
+[#111982]: https://github.com/home-assistant/core/pull/111982
+[#111983]: https://github.com/home-assistant/core/pull/111983
+[#111984]: https://github.com/home-assistant/core/pull/111984
+[#111985]: https://github.com/home-assistant/core/pull/111985
+[#111988]: https://github.com/home-assistant/core/pull/111988
+[#111989]: https://github.com/home-assistant/core/pull/111989
+[#111990]: https://github.com/home-assistant/core/pull/111990
+[#111991]: https://github.com/home-assistant/core/pull/111991
+[#111992]: https://github.com/home-assistant/core/pull/111992
+[#111993]: https://github.com/home-assistant/core/pull/111993
+[#111994]: https://github.com/home-assistant/core/pull/111994
+[#111995]: https://github.com/home-assistant/core/pull/111995
+[#111996]: https://github.com/home-assistant/core/pull/111996
+[#111997]: https://github.com/home-assistant/core/pull/111997
+[#111998]: https://github.com/home-assistant/core/pull/111998
+[#112001]: https://github.com/home-assistant/core/pull/112001
+[#112004]: https://github.com/home-assistant/core/pull/112004
+[#112007]: https://github.com/home-assistant/core/pull/112007
+[#112008]: https://github.com/home-assistant/core/pull/112008
+[#112010]: https://github.com/home-assistant/core/pull/112010
+[#112028]: https://github.com/home-assistant/core/pull/112028
+[#112029]: https://github.com/home-assistant/core/pull/112029
+[#112031]: https://github.com/home-assistant/core/pull/112031
+[#112032]: https://github.com/home-assistant/core/pull/112032
+[#112042]: https://github.com/home-assistant/core/pull/112042
+[#112044]: https://github.com/home-assistant/core/pull/112044
+[#112053]: https://github.com/home-assistant/core/pull/112053
+[#112055]: https://github.com/home-assistant/core/pull/112055
+[#112057]: https://github.com/home-assistant/core/pull/112057
+[#112058]: https://github.com/home-assistant/core/pull/112058
+[#112065]: https://github.com/home-assistant/core/pull/112065
+[#112070]: https://github.com/home-assistant/core/pull/112070
+[#112071]: https://github.com/home-assistant/core/pull/112071
+[#112077]: https://github.com/home-assistant/core/pull/112077
+[#112078]: https://github.com/home-assistant/core/pull/112078
+[#112080]: https://github.com/home-assistant/core/pull/112080
+[#112081]: https://github.com/home-assistant/core/pull/112081
+[#112086]: https://github.com/home-assistant/core/pull/112086
+[#112087]: https://github.com/home-assistant/core/pull/112087
+[#112089]: https://github.com/home-assistant/core/pull/112089
+[#112096]: https://github.com/home-assistant/core/pull/112096
+[#112097]: https://github.com/home-assistant/core/pull/112097
+[#112099]: https://github.com/home-assistant/core/pull/112099
+[#112102]: https://github.com/home-assistant/core/pull/112102
+[#112103]: https://github.com/home-assistant/core/pull/112103
+[#112104]: https://github.com/home-assistant/core/pull/112104
+[#112106]: https://github.com/home-assistant/core/pull/112106
+[#112107]: https://github.com/home-assistant/core/pull/112107
+[#112108]: https://github.com/home-assistant/core/pull/112108
+[#112109]: https://github.com/home-assistant/core/pull/112109
+[#112110]: https://github.com/home-assistant/core/pull/112110
+[#112111]: https://github.com/home-assistant/core/pull/112111
+[#112120]: https://github.com/home-assistant/core/pull/112120
+[#112121]: https://github.com/home-assistant/core/pull/112121
+[#112122]: https://github.com/home-assistant/core/pull/112122
+[#112123]: https://github.com/home-assistant/core/pull/112123
+[#112126]: https://github.com/home-assistant/core/pull/112126
+[#112127]: https://github.com/home-assistant/core/pull/112127
+[#112128]: https://github.com/home-assistant/core/pull/112128
+[#112129]: https://github.com/home-assistant/core/pull/112129
+[#112130]: https://github.com/home-assistant/core/pull/112130
+[#112131]: https://github.com/home-assistant/core/pull/112131
+[#112132]: https://github.com/home-assistant/core/pull/112132
+[#112134]: https://github.com/home-assistant/core/pull/112134
+[#112135]: https://github.com/home-assistant/core/pull/112135
+[#112136]: https://github.com/home-assistant/core/pull/112136
+[#112141]: https://github.com/home-assistant/core/pull/112141
+[#112143]: https://github.com/home-assistant/core/pull/112143
+[#112144]: https://github.com/home-assistant/core/pull/112144
+[#112145]: https://github.com/home-assistant/core/pull/112145
+[#112147]: https://github.com/home-assistant/core/pull/112147
+[#112148]: https://github.com/home-assistant/core/pull/112148
+[#112149]: https://github.com/home-assistant/core/pull/112149
+[#112151]: https://github.com/home-assistant/core/pull/112151
+[#112153]: https://github.com/home-assistant/core/pull/112153
+[#112155]: https://github.com/home-assistant/core/pull/112155
+[#112156]: https://github.com/home-assistant/core/pull/112156
+[#112158]: https://github.com/home-assistant/core/pull/112158
+[#112159]: https://github.com/home-assistant/core/pull/112159
+[#112160]: https://github.com/home-assistant/core/pull/112160
+[#112161]: https://github.com/home-assistant/core/pull/112161
+[#112162]: https://github.com/home-assistant/core/pull/112162
+[#112164]: https://github.com/home-assistant/core/pull/112164
+[#112166]: https://github.com/home-assistant/core/pull/112166
+[#112168]: https://github.com/home-assistant/core/pull/112168
+[#112169]: https://github.com/home-assistant/core/pull/112169
+[#112170]: https://github.com/home-assistant/core/pull/112170
+[#112172]: https://github.com/home-assistant/core/pull/112172
+[#112173]: https://github.com/home-assistant/core/pull/112173
+[#112174]: https://github.com/home-assistant/core/pull/112174
+[#112175]: https://github.com/home-assistant/core/pull/112175
+[#112177]: https://github.com/home-assistant/core/pull/112177
+[#112179]: https://github.com/home-assistant/core/pull/112179
+[#112180]: https://github.com/home-assistant/core/pull/112180
+[#112181]: https://github.com/home-assistant/core/pull/112181
+[#112182]: https://github.com/home-assistant/core/pull/112182
+[#112183]: https://github.com/home-assistant/core/pull/112183
+[#112184]: https://github.com/home-assistant/core/pull/112184
+[#112185]: https://github.com/home-assistant/core/pull/112185
+[#112186]: https://github.com/home-assistant/core/pull/112186
+[#112187]: https://github.com/home-assistant/core/pull/112187
+[#112188]: https://github.com/home-assistant/core/pull/112188
+[#112189]: https://github.com/home-assistant/core/pull/112189
+[#112190]: https://github.com/home-assistant/core/pull/112190
+[#112192]: https://github.com/home-assistant/core/pull/112192
+[#112193]: https://github.com/home-assistant/core/pull/112193
+[#112194]: https://github.com/home-assistant/core/pull/112194
+[#112195]: https://github.com/home-assistant/core/pull/112195
+[#112196]: https://github.com/home-assistant/core/pull/112196
+[#112197]: https://github.com/home-assistant/core/pull/112197
+[#112198]: https://github.com/home-assistant/core/pull/112198
+[#112200]: https://github.com/home-assistant/core/pull/112200
+[#112201]: https://github.com/home-assistant/core/pull/112201
+[#112202]: https://github.com/home-assistant/core/pull/112202
+[#112203]: https://github.com/home-assistant/core/pull/112203
+[#112204]: https://github.com/home-assistant/core/pull/112204
+[#112205]: https://github.com/home-assistant/core/pull/112205
+[#112207]: https://github.com/home-assistant/core/pull/112207
+[#112208]: https://github.com/home-assistant/core/pull/112208
+[#112209]: https://github.com/home-assistant/core/pull/112209
+[#112210]: https://github.com/home-assistant/core/pull/112210
+[#112211]: https://github.com/home-assistant/core/pull/112211
+[#112212]: https://github.com/home-assistant/core/pull/112212
+[#112213]: https://github.com/home-assistant/core/pull/112213
+[#112214]: https://github.com/home-assistant/core/pull/112214
+[#112215]: https://github.com/home-assistant/core/pull/112215
+[#112217]: https://github.com/home-assistant/core/pull/112217
+[#112218]: https://github.com/home-assistant/core/pull/112218
+[#112219]: https://github.com/home-assistant/core/pull/112219
+[#112220]: https://github.com/home-assistant/core/pull/112220
+[#112221]: https://github.com/home-assistant/core/pull/112221
+[#112222]: https://github.com/home-assistant/core/pull/112222
+[#112223]: https://github.com/home-assistant/core/pull/112223
+[#112224]: https://github.com/home-assistant/core/pull/112224
+[#112225]: https://github.com/home-assistant/core/pull/112225
+[#112226]: https://github.com/home-assistant/core/pull/112226
+[#112227]: https://github.com/home-assistant/core/pull/112227
+[#112228]: https://github.com/home-assistant/core/pull/112228
+[#112229]: https://github.com/home-assistant/core/pull/112229
+[#112230]: https://github.com/home-assistant/core/pull/112230
+[#112231]: https://github.com/home-assistant/core/pull/112231
+[#112232]: https://github.com/home-assistant/core/pull/112232
+[#112233]: https://github.com/home-assistant/core/pull/112233
+[#112234]: https://github.com/home-assistant/core/pull/112234
+[#112235]: https://github.com/home-assistant/core/pull/112235
+[#112236]: https://github.com/home-assistant/core/pull/112236
+[#112237]: https://github.com/home-assistant/core/pull/112237
+[#112239]: https://github.com/home-assistant/core/pull/112239
+[#112240]: https://github.com/home-assistant/core/pull/112240
+[#112241]: https://github.com/home-assistant/core/pull/112241
+[#112244]: https://github.com/home-assistant/core/pull/112244
+[#112246]: https://github.com/home-assistant/core/pull/112246
+[#112247]: https://github.com/home-assistant/core/pull/112247
+[#112252]: https://github.com/home-assistant/core/pull/112252
+[#112253]: https://github.com/home-assistant/core/pull/112253
+[#112254]: https://github.com/home-assistant/core/pull/112254
+[#112256]: https://github.com/home-assistant/core/pull/112256
+[#112267]: https://github.com/home-assistant/core/pull/112267
+[#112268]: https://github.com/home-assistant/core/pull/112268
+[#112269]: https://github.com/home-assistant/core/pull/112269
+[#112275]: https://github.com/home-assistant/core/pull/112275
+[#112276]: https://github.com/home-assistant/core/pull/112276
+[#112277]: https://github.com/home-assistant/core/pull/112277
+[#112281]: https://github.com/home-assistant/core/pull/112281
+[#112282]: https://github.com/home-assistant/core/pull/112282
+[#112284]: https://github.com/home-assistant/core/pull/112284
+[#112286]: https://github.com/home-assistant/core/pull/112286
+[#112288]: https://github.com/home-assistant/core/pull/112288
+[#112289]: https://github.com/home-assistant/core/pull/112289
+[#112290]: https://github.com/home-assistant/core/pull/112290
+[#112291]: https://github.com/home-assistant/core/pull/112291
+[#112292]: https://github.com/home-assistant/core/pull/112292
+[#112293]: https://github.com/home-assistant/core/pull/112293
+[#112294]: https://github.com/home-assistant/core/pull/112294
+[#112295]: https://github.com/home-assistant/core/pull/112295
+[#112296]: https://github.com/home-assistant/core/pull/112296
+[#112297]: https://github.com/home-assistant/core/pull/112297
+[#112299]: https://github.com/home-assistant/core/pull/112299
+[#112300]: https://github.com/home-assistant/core/pull/112300
+[#112301]: https://github.com/home-assistant/core/pull/112301
+[#112302]: https://github.com/home-assistant/core/pull/112302
+[#112303]: https://github.com/home-assistant/core/pull/112303
+[#112304]: https://github.com/home-assistant/core/pull/112304
+[#112305]: https://github.com/home-assistant/core/pull/112305
+[#112306]: https://github.com/home-assistant/core/pull/112306
+[#112307]: https://github.com/home-assistant/core/pull/112307
+[#112308]: https://github.com/home-assistant/core/pull/112308
+[#112309]: https://github.com/home-assistant/core/pull/112309
+[#112310]: https://github.com/home-assistant/core/pull/112310
+[#112311]: https://github.com/home-assistant/core/pull/112311
+[#112312]: https://github.com/home-assistant/core/pull/112312
+[#112313]: https://github.com/home-assistant/core/pull/112313
+[#112314]: https://github.com/home-assistant/core/pull/112314
+[#112315]: https://github.com/home-assistant/core/pull/112315
+[#112316]: https://github.com/home-assistant/core/pull/112316
+[#112317]: https://github.com/home-assistant/core/pull/112317
+[#112318]: https://github.com/home-assistant/core/pull/112318
+[#112319]: https://github.com/home-assistant/core/pull/112319
+[#112320]: https://github.com/home-assistant/core/pull/112320
+[#112321]: https://github.com/home-assistant/core/pull/112321
+[#112322]: https://github.com/home-assistant/core/pull/112322
+[#112323]: https://github.com/home-assistant/core/pull/112323
+[#112324]: https://github.com/home-assistant/core/pull/112324
+[#112325]: https://github.com/home-assistant/core/pull/112325
+[#112326]: https://github.com/home-assistant/core/pull/112326
+[#112327]: https://github.com/home-assistant/core/pull/112327
+[#112328]: https://github.com/home-assistant/core/pull/112328
+[#112329]: https://github.com/home-assistant/core/pull/112329
+[#112330]: https://github.com/home-assistant/core/pull/112330
+[#112332]: https://github.com/home-assistant/core/pull/112332
+[#112333]: https://github.com/home-assistant/core/pull/112333
+[#112335]: https://github.com/home-assistant/core/pull/112335
+[#112336]: https://github.com/home-assistant/core/pull/112336
+[#112338]: https://github.com/home-assistant/core/pull/112338
+[#112339]: https://github.com/home-assistant/core/pull/112339
+[#112340]: https://github.com/home-assistant/core/pull/112340
+[#112341]: https://github.com/home-assistant/core/pull/112341
+[#112342]: https://github.com/home-assistant/core/pull/112342
+[#112343]: https://github.com/home-assistant/core/pull/112343
+[#112344]: https://github.com/home-assistant/core/pull/112344
+[#112345]: https://github.com/home-assistant/core/pull/112345
+[#112346]: https://github.com/home-assistant/core/pull/112346
+[#112347]: https://github.com/home-assistant/core/pull/112347
+[#112348]: https://github.com/home-assistant/core/pull/112348
+[#112349]: https://github.com/home-assistant/core/pull/112349
+[#112350]: https://github.com/home-assistant/core/pull/112350
+[#112351]: https://github.com/home-assistant/core/pull/112351
+[#112352]: https://github.com/home-assistant/core/pull/112352
+[#112353]: https://github.com/home-assistant/core/pull/112353
+[#112354]: https://github.com/home-assistant/core/pull/112354
+[#112355]: https://github.com/home-assistant/core/pull/112355
+[#112356]: https://github.com/home-assistant/core/pull/112356
+[#112357]: https://github.com/home-assistant/core/pull/112357
+[#112358]: https://github.com/home-assistant/core/pull/112358
+[#112359]: https://github.com/home-assistant/core/pull/112359
+[#112360]: https://github.com/home-assistant/core/pull/112360
+[#112361]: https://github.com/home-assistant/core/pull/112361
+[#112362]: https://github.com/home-assistant/core/pull/112362
+[#112363]: https://github.com/home-assistant/core/pull/112363
+[#112364]: https://github.com/home-assistant/core/pull/112364
+[#112365]: https://github.com/home-assistant/core/pull/112365
+[#112366]: https://github.com/home-assistant/core/pull/112366
+[#112367]: https://github.com/home-assistant/core/pull/112367
+[#112368]: https://github.com/home-assistant/core/pull/112368
+[#112369]: https://github.com/home-assistant/core/pull/112369
+[#112370]: https://github.com/home-assistant/core/pull/112370
+[#112372]: https://github.com/home-assistant/core/pull/112372
+[#112373]: https://github.com/home-assistant/core/pull/112373
+[#112374]: https://github.com/home-assistant/core/pull/112374
+[#112375]: https://github.com/home-assistant/core/pull/112375
+[#112376]: https://github.com/home-assistant/core/pull/112376
+[#112377]: https://github.com/home-assistant/core/pull/112377
+[#112378]: https://github.com/home-assistant/core/pull/112378
+[#112379]: https://github.com/home-assistant/core/pull/112379
+[#112380]: https://github.com/home-assistant/core/pull/112380
+[#112382]: https://github.com/home-assistant/core/pull/112382
+[#112383]: https://github.com/home-assistant/core/pull/112383
+[#112384]: https://github.com/home-assistant/core/pull/112384
+[#112385]: https://github.com/home-assistant/core/pull/112385
+[#112386]: https://github.com/home-assistant/core/pull/112386
+[#112389]: https://github.com/home-assistant/core/pull/112389
+[#112390]: https://github.com/home-assistant/core/pull/112390
+[#112391]: https://github.com/home-assistant/core/pull/112391
+[#112393]: https://github.com/home-assistant/core/pull/112393
+[#112394]: https://github.com/home-assistant/core/pull/112394
+[#112395]: https://github.com/home-assistant/core/pull/112395
+[#112396]: https://github.com/home-assistant/core/pull/112396
+[#112397]: https://github.com/home-assistant/core/pull/112397
+[#112398]: https://github.com/home-assistant/core/pull/112398
+[#112399]: https://github.com/home-assistant/core/pull/112399
+[#112400]: https://github.com/home-assistant/core/pull/112400
+[#112401]: https://github.com/home-assistant/core/pull/112401
+[#112402]: https://github.com/home-assistant/core/pull/112402
+[#112405]: https://github.com/home-assistant/core/pull/112405
+[#112407]: https://github.com/home-assistant/core/pull/112407
+[#112408]: https://github.com/home-assistant/core/pull/112408
+[#112409]: https://github.com/home-assistant/core/pull/112409
+[#112410]: https://github.com/home-assistant/core/pull/112410
+[#112411]: https://github.com/home-assistant/core/pull/112411
+[#112412]: https://github.com/home-assistant/core/pull/112412
+[#112418]: https://github.com/home-assistant/core/pull/112418
+[#112419]: https://github.com/home-assistant/core/pull/112419
+[#112420]: https://github.com/home-assistant/core/pull/112420
+[#112423]: https://github.com/home-assistant/core/pull/112423
+[#112425]: https://github.com/home-assistant/core/pull/112425
+[#112426]: https://github.com/home-assistant/core/pull/112426
+[#112429]: https://github.com/home-assistant/core/pull/112429
+[#112430]: https://github.com/home-assistant/core/pull/112430
+[#112432]: https://github.com/home-assistant/core/pull/112432
+[#112433]: https://github.com/home-assistant/core/pull/112433
+[#112436]: https://github.com/home-assistant/core/pull/112436
+[#112438]: https://github.com/home-assistant/core/pull/112438
+[#112441]: https://github.com/home-assistant/core/pull/112441
+[#112444]: https://github.com/home-assistant/core/pull/112444
+[#112446]: https://github.com/home-assistant/core/pull/112446
+[#112447]: https://github.com/home-assistant/core/pull/112447
+[#112449]: https://github.com/home-assistant/core/pull/112449
+[#112452]: https://github.com/home-assistant/core/pull/112452
+[#112456]: https://github.com/home-assistant/core/pull/112456
+[#112457]: https://github.com/home-assistant/core/pull/112457
+[#112460]: https://github.com/home-assistant/core/pull/112460
+[#112461]: https://github.com/home-assistant/core/pull/112461
+[#112462]: https://github.com/home-assistant/core/pull/112462
+[#112466]: https://github.com/home-assistant/core/pull/112466
+[#112467]: https://github.com/home-assistant/core/pull/112467
+[#112468]: https://github.com/home-assistant/core/pull/112468
+[#112469]: https://github.com/home-assistant/core/pull/112469
+[#112470]: https://github.com/home-assistant/core/pull/112470
+[#112472]: https://github.com/home-assistant/core/pull/112472
+[#112475]: https://github.com/home-assistant/core/pull/112475
+[#112477]: https://github.com/home-assistant/core/pull/112477
+[#112482]: https://github.com/home-assistant/core/pull/112482
+[#112483]: https://github.com/home-assistant/core/pull/112483
+[#112484]: https://github.com/home-assistant/core/pull/112484
+[#112485]: https://github.com/home-assistant/core/pull/112485
+[#112486]: https://github.com/home-assistant/core/pull/112486
+[#112488]: https://github.com/home-assistant/core/pull/112488
+[#112489]: https://github.com/home-assistant/core/pull/112489
+[#112490]: https://github.com/home-assistant/core/pull/112490
+[#112493]: https://github.com/home-assistant/core/pull/112493
+[#112496]: https://github.com/home-assistant/core/pull/112496
+[#112497]: https://github.com/home-assistant/core/pull/112497
+[#112498]: https://github.com/home-assistant/core/pull/112498
+[#112503]: https://github.com/home-assistant/core/pull/112503
+[#112514]: https://github.com/home-assistant/core/pull/112514
+[#112518]: https://github.com/home-assistant/core/pull/112518
+[#112520]: https://github.com/home-assistant/core/pull/112520
+[#112522]: https://github.com/home-assistant/core/pull/112522
+[#112526]: https://github.com/home-assistant/core/pull/112526
+[#112528]: https://github.com/home-assistant/core/pull/112528
+[#112532]: https://github.com/home-assistant/core/pull/112532
+[#112533]: https://github.com/home-assistant/core/pull/112533
+[#112535]: https://github.com/home-assistant/core/pull/112535
+[#112536]: https://github.com/home-assistant/core/pull/112536
+[#112542]: https://github.com/home-assistant/core/pull/112542
+[#112543]: https://github.com/home-assistant/core/pull/112543
+[#112546]: https://github.com/home-assistant/core/pull/112546
+[#112551]: https://github.com/home-assistant/core/pull/112551
+[#112555]: https://github.com/home-assistant/core/pull/112555
+[#112557]: https://github.com/home-assistant/core/pull/112557
+[#112560]: https://github.com/home-assistant/core/pull/112560
+[#112562]: https://github.com/home-assistant/core/pull/112562
+[#112563]: https://github.com/home-assistant/core/pull/112563
+[#112572]: https://github.com/home-assistant/core/pull/112572
+[#112575]: https://github.com/home-assistant/core/pull/112575
+[#112608]: https://github.com/home-assistant/core/pull/112608
+[#112609]: https://github.com/home-assistant/core/pull/112609
+[#112610]: https://github.com/home-assistant/core/pull/112610
+[#112612]: https://github.com/home-assistant/core/pull/112612
+[#112626]: https://github.com/home-assistant/core/pull/112626
+[#112634]: https://github.com/home-assistant/core/pull/112634
+[#112637]: https://github.com/home-assistant/core/pull/112637
+[#112640]: https://github.com/home-assistant/core/pull/112640
+[#112643]: https://github.com/home-assistant/core/pull/112643
+[#112652]: https://github.com/home-assistant/core/pull/112652
+[#112657]: https://github.com/home-assistant/core/pull/112657
+[#112658]: https://github.com/home-assistant/core/pull/112658
+[#112662]: https://github.com/home-assistant/core/pull/112662
+[#112665]: https://github.com/home-assistant/core/pull/112665
+[#112668]: https://github.com/home-assistant/core/pull/112668
+[#112669]: https://github.com/home-assistant/core/pull/112669
+[#112670]: https://github.com/home-assistant/core/pull/112670
+[#112671]: https://github.com/home-assistant/core/pull/112671
+[#112682]: https://github.com/home-assistant/core/pull/112682
+[#112683]: https://github.com/home-assistant/core/pull/112683
+[#112690]: https://github.com/home-assistant/core/pull/112690
+[#112695]: https://github.com/home-assistant/core/pull/112695
+[#112697]: https://github.com/home-assistant/core/pull/112697
+[#112698]: https://github.com/home-assistant/core/pull/112698
+[#112699]: https://github.com/home-assistant/core/pull/112699
+[#112700]: https://github.com/home-assistant/core/pull/112700
+[#112702]: https://github.com/home-assistant/core/pull/112702
+[#112703]: https://github.com/home-assistant/core/pull/112703
+[#112704]: https://github.com/home-assistant/core/pull/112704
+[#112705]: https://github.com/home-assistant/core/pull/112705
+[#112706]: https://github.com/home-assistant/core/pull/112706
+[#112707]: https://github.com/home-assistant/core/pull/112707
+[#112708]: https://github.com/home-assistant/core/pull/112708
+[#112709]: https://github.com/home-assistant/core/pull/112709
+[#112710]: https://github.com/home-assistant/core/pull/112710
+[#112711]: https://github.com/home-assistant/core/pull/112711
+[#112712]: https://github.com/home-assistant/core/pull/112712
+[#112720]: https://github.com/home-assistant/core/pull/112720
+[#112725]: https://github.com/home-assistant/core/pull/112725
+[#112726]: https://github.com/home-assistant/core/pull/112726
+[#112728]: https://github.com/home-assistant/core/pull/112728
+[#112732]: https://github.com/home-assistant/core/pull/112732
+[#112734]: https://github.com/home-assistant/core/pull/112734
+[#112736]: https://github.com/home-assistant/core/pull/112736
+[#112737]: https://github.com/home-assistant/core/pull/112737
+[#112738]: https://github.com/home-assistant/core/pull/112738
+[#112739]: https://github.com/home-assistant/core/pull/112739
+[#112740]: https://github.com/home-assistant/core/pull/112740
+[#112741]: https://github.com/home-assistant/core/pull/112741
+[#112742]: https://github.com/home-assistant/core/pull/112742
+[#112743]: https://github.com/home-assistant/core/pull/112743
+[#112749]: https://github.com/home-assistant/core/pull/112749
+[#112750]: https://github.com/home-assistant/core/pull/112750
+[#112752]: https://github.com/home-assistant/core/pull/112752
+[#112753]: https://github.com/home-assistant/core/pull/112753
+[#112756]: https://github.com/home-assistant/core/pull/112756
+[#112760]: https://github.com/home-assistant/core/pull/112760
+[#112763]: https://github.com/home-assistant/core/pull/112763
+[#112764]: https://github.com/home-assistant/core/pull/112764
+[#112765]: https://github.com/home-assistant/core/pull/112765
+[#112766]: https://github.com/home-assistant/core/pull/112766
+[#112767]: https://github.com/home-assistant/core/pull/112767
+[#112768]: https://github.com/home-assistant/core/pull/112768
+[#112769]: https://github.com/home-assistant/core/pull/112769
+[#112770]: https://github.com/home-assistant/core/pull/112770
+[#112771]: https://github.com/home-assistant/core/pull/112771
+[#112772]: https://github.com/home-assistant/core/pull/112772
+[#112773]: https://github.com/home-assistant/core/pull/112773
+[#112774]: https://github.com/home-assistant/core/pull/112774
+[#112775]: https://github.com/home-assistant/core/pull/112775
+[#112776]: https://github.com/home-assistant/core/pull/112776
+[#112777]: https://github.com/home-assistant/core/pull/112777
+[#112778]: https://github.com/home-assistant/core/pull/112778
+[#112779]: https://github.com/home-assistant/core/pull/112779
+[#112780]: https://github.com/home-assistant/core/pull/112780
+[#112781]: https://github.com/home-assistant/core/pull/112781
+[#112782]: https://github.com/home-assistant/core/pull/112782
+[#112786]: https://github.com/home-assistant/core/pull/112786
+[#112788]: https://github.com/home-assistant/core/pull/112788
+[#112789]: https://github.com/home-assistant/core/pull/112789
+[#112790]: https://github.com/home-assistant/core/pull/112790
+[#112791]: https://github.com/home-assistant/core/pull/112791
+[#112793]: https://github.com/home-assistant/core/pull/112793
+[#112800]: https://github.com/home-assistant/core/pull/112800
+[#112801]: https://github.com/home-assistant/core/pull/112801
+[#112802]: https://github.com/home-assistant/core/pull/112802
+[#112803]: https://github.com/home-assistant/core/pull/112803
+[#112804]: https://github.com/home-assistant/core/pull/112804
+[#112805]: https://github.com/home-assistant/core/pull/112805
+[#112807]: https://github.com/home-assistant/core/pull/112807
+[#112810]: https://github.com/home-assistant/core/pull/112810
+[#112813]: https://github.com/home-assistant/core/pull/112813
+[#112814]: https://github.com/home-assistant/core/pull/112814
+[#112818]: https://github.com/home-assistant/core/pull/112818
+[#112819]: https://github.com/home-assistant/core/pull/112819
+[#112820]: https://github.com/home-assistant/core/pull/112820
+[#112821]: https://github.com/home-assistant/core/pull/112821
+[#112822]: https://github.com/home-assistant/core/pull/112822
+[#112825]: https://github.com/home-assistant/core/pull/112825
+[#112826]: https://github.com/home-assistant/core/pull/112826
+[#112828]: https://github.com/home-assistant/core/pull/112828
+[#112844]: https://github.com/home-assistant/core/pull/112844
+[#112845]: https://github.com/home-assistant/core/pull/112845
+[#112846]: https://github.com/home-assistant/core/pull/112846
+[#112847]: https://github.com/home-assistant/core/pull/112847
+[#112849]: https://github.com/home-assistant/core/pull/112849
+[#112850]: https://github.com/home-assistant/core/pull/112850
+[#112851]: https://github.com/home-assistant/core/pull/112851
+[#112854]: https://github.com/home-assistant/core/pull/112854
+[#112859]: https://github.com/home-assistant/core/pull/112859
+[#112863]: https://github.com/home-assistant/core/pull/112863
+[#112864]: https://github.com/home-assistant/core/pull/112864
+[#112866]: https://github.com/home-assistant/core/pull/112866
+[#112869]: https://github.com/home-assistant/core/pull/112869
+[#112872]: https://github.com/home-assistant/core/pull/112872
+[#112888]: https://github.com/home-assistant/core/pull/112888
+[#112892]: https://github.com/home-assistant/core/pull/112892
+[#112893]: https://github.com/home-assistant/core/pull/112893
+[#112895]: https://github.com/home-assistant/core/pull/112895
+[#112896]: https://github.com/home-assistant/core/pull/112896
+[#112898]: https://github.com/home-assistant/core/pull/112898
+[#112899]: https://github.com/home-assistant/core/pull/112899
+[#112900]: https://github.com/home-assistant/core/pull/112900
+[#112901]: https://github.com/home-assistant/core/pull/112901
+[#112902]: https://github.com/home-assistant/core/pull/112902
+[#112903]: https://github.com/home-assistant/core/pull/112903
+[#112904]: https://github.com/home-assistant/core/pull/112904
+[#112905]: https://github.com/home-assistant/core/pull/112905
+[#112906]: https://github.com/home-assistant/core/pull/112906
+[#112907]: https://github.com/home-assistant/core/pull/112907
+[#112908]: https://github.com/home-assistant/core/pull/112908
+[#112909]: https://github.com/home-assistant/core/pull/112909
+[#112910]: https://github.com/home-assistant/core/pull/112910
+[#112911]: https://github.com/home-assistant/core/pull/112911
+[#112912]: https://github.com/home-assistant/core/pull/112912
+[#112913]: https://github.com/home-assistant/core/pull/112913
+[#112914]: https://github.com/home-assistant/core/pull/112914
+[#112915]: https://github.com/home-assistant/core/pull/112915
+[#112917]: https://github.com/home-assistant/core/pull/112917
+[#112918]: https://github.com/home-assistant/core/pull/112918
+[#112919]: https://github.com/home-assistant/core/pull/112919
+[#112920]: https://github.com/home-assistant/core/pull/112920
+[#112921]: https://github.com/home-assistant/core/pull/112921
+[#112922]: https://github.com/home-assistant/core/pull/112922
+[#112923]: https://github.com/home-assistant/core/pull/112923
+[#112924]: https://github.com/home-assistant/core/pull/112924
+[#112925]: https://github.com/home-assistant/core/pull/112925
+[#112926]: https://github.com/home-assistant/core/pull/112926
+[#112928]: https://github.com/home-assistant/core/pull/112928
+[#112929]: https://github.com/home-assistant/core/pull/112929
+[#112930]: https://github.com/home-assistant/core/pull/112930
+[#112931]: https://github.com/home-assistant/core/pull/112931
+[#112932]: https://github.com/home-assistant/core/pull/112932
+[#112933]: https://github.com/home-assistant/core/pull/112933
+[#112934]: https://github.com/home-assistant/core/pull/112934
+[#112935]: https://github.com/home-assistant/core/pull/112935
+[#112936]: https://github.com/home-assistant/core/pull/112936
+[#112937]: https://github.com/home-assistant/core/pull/112937
+[#112938]: https://github.com/home-assistant/core/pull/112938
+[#112939]: https://github.com/home-assistant/core/pull/112939
+[#112940]: https://github.com/home-assistant/core/pull/112940
+[#112941]: https://github.com/home-assistant/core/pull/112941
+[#112942]: https://github.com/home-assistant/core/pull/112942
+[#112943]: https://github.com/home-assistant/core/pull/112943
+[#112944]: https://github.com/home-assistant/core/pull/112944
+[#112945]: https://github.com/home-assistant/core/pull/112945
+[#112946]: https://github.com/home-assistant/core/pull/112946
+[#112947]: https://github.com/home-assistant/core/pull/112947
+[#112949]: https://github.com/home-assistant/core/pull/112949
+[#112951]: https://github.com/home-assistant/core/pull/112951
+[#112952]: https://github.com/home-assistant/core/pull/112952
+[#112953]: https://github.com/home-assistant/core/pull/112953
+[#112954]: https://github.com/home-assistant/core/pull/112954
+[#112955]: https://github.com/home-assistant/core/pull/112955
+[#112956]: https://github.com/home-assistant/core/pull/112956
+[#112957]: https://github.com/home-assistant/core/pull/112957
+[#112958]: https://github.com/home-assistant/core/pull/112958
+[#112959]: https://github.com/home-assistant/core/pull/112959
+[#112960]: https://github.com/home-assistant/core/pull/112960
+[#112963]: https://github.com/home-assistant/core/pull/112963
+[#112964]: https://github.com/home-assistant/core/pull/112964
+[#112965]: https://github.com/home-assistant/core/pull/112965
+[#112966]: https://github.com/home-assistant/core/pull/112966
+[#112967]: https://github.com/home-assistant/core/pull/112967
+[#112969]: https://github.com/home-assistant/core/pull/112969
+[#112970]: https://github.com/home-assistant/core/pull/112970
+[#112971]: https://github.com/home-assistant/core/pull/112971
+[#112972]: https://github.com/home-assistant/core/pull/112972
+[#112973]: https://github.com/home-assistant/core/pull/112973
+[#112974]: https://github.com/home-assistant/core/pull/112974
+[#112975]: https://github.com/home-assistant/core/pull/112975
+[#112976]: https://github.com/home-assistant/core/pull/112976
+[#112977]: https://github.com/home-assistant/core/pull/112977
+[#112979]: https://github.com/home-assistant/core/pull/112979
+[#112982]: https://github.com/home-assistant/core/pull/112982
+[#112987]: https://github.com/home-assistant/core/pull/112987
+[#112988]: https://github.com/home-assistant/core/pull/112988
+[#112989]: https://github.com/home-assistant/core/pull/112989
+[#112990]: https://github.com/home-assistant/core/pull/112990
+[#112991]: https://github.com/home-assistant/core/pull/112991
+[#112992]: https://github.com/home-assistant/core/pull/112992
+[#112993]: https://github.com/home-assistant/core/pull/112993
+[#112994]: https://github.com/home-assistant/core/pull/112994
+[#112995]: https://github.com/home-assistant/core/pull/112995
+[#112996]: https://github.com/home-assistant/core/pull/112996
+[#112997]: https://github.com/home-assistant/core/pull/112997
+[#113002]: https://github.com/home-assistant/core/pull/113002
+[#113004]: https://github.com/home-assistant/core/pull/113004
+[#113005]: https://github.com/home-assistant/core/pull/113005
+[#113006]: https://github.com/home-assistant/core/pull/113006
+[#113010]: https://github.com/home-assistant/core/pull/113010
+[#113011]: https://github.com/home-assistant/core/pull/113011
+[#113012]: https://github.com/home-assistant/core/pull/113012
+[#113013]: https://github.com/home-assistant/core/pull/113013
+[#113014]: https://github.com/home-assistant/core/pull/113014
+[#113015]: https://github.com/home-assistant/core/pull/113015
+[#113016]: https://github.com/home-assistant/core/pull/113016
+[#113017]: https://github.com/home-assistant/core/pull/113017
+[#113018]: https://github.com/home-assistant/core/pull/113018
+[#113020]: https://github.com/home-assistant/core/pull/113020
+[#113022]: https://github.com/home-assistant/core/pull/113022
+[#113026]: https://github.com/home-assistant/core/pull/113026
+[#113027]: https://github.com/home-assistant/core/pull/113027
+[#113030]: https://github.com/home-assistant/core/pull/113030
+[#113031]: https://github.com/home-assistant/core/pull/113031
+[#113032]: https://github.com/home-assistant/core/pull/113032
+[#113033]: https://github.com/home-assistant/core/pull/113033
+[#113038]: https://github.com/home-assistant/core/pull/113038
+[#113041]: https://github.com/home-assistant/core/pull/113041
+[#113042]: https://github.com/home-assistant/core/pull/113042
+[#113044]: https://github.com/home-assistant/core/pull/113044
+[#113045]: https://github.com/home-assistant/core/pull/113045
+[#113046]: https://github.com/home-assistant/core/pull/113046
+[#113049]: https://github.com/home-assistant/core/pull/113049
+[#113051]: https://github.com/home-assistant/core/pull/113051
+[#113055]: https://github.com/home-assistant/core/pull/113055
+[#113057]: https://github.com/home-assistant/core/pull/113057
+[#113060]: https://github.com/home-assistant/core/pull/113060
+[#113069]: https://github.com/home-assistant/core/pull/113069
+[#113072]: https://github.com/home-assistant/core/pull/113072
+[#113074]: https://github.com/home-assistant/core/pull/113074
+[#113075]: https://github.com/home-assistant/core/pull/113075
+[#113089]: https://github.com/home-assistant/core/pull/113089
+[#113090]: https://github.com/home-assistant/core/pull/113090
+[#113094]: https://github.com/home-assistant/core/pull/113094
+[#113099]: https://github.com/home-assistant/core/pull/113099
+[#113102]: https://github.com/home-assistant/core/pull/113102
+[#113103]: https://github.com/home-assistant/core/pull/113103
+[#113107]: https://github.com/home-assistant/core/pull/113107
+[#113108]: https://github.com/home-assistant/core/pull/113108
+[#113109]: https://github.com/home-assistant/core/pull/113109
+[#113110]: https://github.com/home-assistant/core/pull/113110
+[#113111]: https://github.com/home-assistant/core/pull/113111
+[#113112]: https://github.com/home-assistant/core/pull/113112
+[#113113]: https://github.com/home-assistant/core/pull/113113
+[#113114]: https://github.com/home-assistant/core/pull/113114
+[#113115]: https://github.com/home-assistant/core/pull/113115
+[#113116]: https://github.com/home-assistant/core/pull/113116
+[#113118]: https://github.com/home-assistant/core/pull/113118
+[#113119]: https://github.com/home-assistant/core/pull/113119
+[#113120]: https://github.com/home-assistant/core/pull/113120
+[#113122]: https://github.com/home-assistant/core/pull/113122
+[#113123]: https://github.com/home-assistant/core/pull/113123
+[#113124]: https://github.com/home-assistant/core/pull/113124
+[#113126]: https://github.com/home-assistant/core/pull/113126
+[#113128]: https://github.com/home-assistant/core/pull/113128
+[#113129]: https://github.com/home-assistant/core/pull/113129
+[#113130]: https://github.com/home-assistant/core/pull/113130
+[#113132]: https://github.com/home-assistant/core/pull/113132
+[#113133]: https://github.com/home-assistant/core/pull/113133
+[#113136]: https://github.com/home-assistant/core/pull/113136
+[#113138]: https://github.com/home-assistant/core/pull/113138
+[#113139]: https://github.com/home-assistant/core/pull/113139
+[#113168]: https://github.com/home-assistant/core/pull/113168
+[#113169]: https://github.com/home-assistant/core/pull/113169
+[#113173]: https://github.com/home-assistant/core/pull/113173
+[#113174]: https://github.com/home-assistant/core/pull/113174
+[#113175]: https://github.com/home-assistant/core/pull/113175
+[#113178]: https://github.com/home-assistant/core/pull/113178
+[#113179]: https://github.com/home-assistant/core/pull/113179
+[#113181]: https://github.com/home-assistant/core/pull/113181
+[#113182]: https://github.com/home-assistant/core/pull/113182
+[#113183]: https://github.com/home-assistant/core/pull/113183
+[#113184]: https://github.com/home-assistant/core/pull/113184
+[#113185]: https://github.com/home-assistant/core/pull/113185
+[#113188]: https://github.com/home-assistant/core/pull/113188
+[#113189]: https://github.com/home-assistant/core/pull/113189
+[#113190]: https://github.com/home-assistant/core/pull/113190
+[#113191]: https://github.com/home-assistant/core/pull/113191
+[#113192]: https://github.com/home-assistant/core/pull/113192
+[#113195]: https://github.com/home-assistant/core/pull/113195
+[#113197]: https://github.com/home-assistant/core/pull/113197
+[#113201]: https://github.com/home-assistant/core/pull/113201
+[#113202]: https://github.com/home-assistant/core/pull/113202
+[#113206]: https://github.com/home-assistant/core/pull/113206
+[#113207]: https://github.com/home-assistant/core/pull/113207
+[#113208]: https://github.com/home-assistant/core/pull/113208
+[#113215]: https://github.com/home-assistant/core/pull/113215
+[#113217]: https://github.com/home-assistant/core/pull/113217
+[#113218]: https://github.com/home-assistant/core/pull/113218
+[#113221]: https://github.com/home-assistant/core/pull/113221
+[#113225]: https://github.com/home-assistant/core/pull/113225
+[#113227]: https://github.com/home-assistant/core/pull/113227
+[#113229]: https://github.com/home-assistant/core/pull/113229
+[#113231]: https://github.com/home-assistant/core/pull/113231
+[#113233]: https://github.com/home-assistant/core/pull/113233
+[#113236]: https://github.com/home-assistant/core/pull/113236
+[#113241]: https://github.com/home-assistant/core/pull/113241
+[#113242]: https://github.com/home-assistant/core/pull/113242
+[#113243]: https://github.com/home-assistant/core/pull/113243
+[#113245]: https://github.com/home-assistant/core/pull/113245
+[#113248]: https://github.com/home-assistant/core/pull/113248
+[#113252]: https://github.com/home-assistant/core/pull/113252
+[#113253]: https://github.com/home-assistant/core/pull/113253
+[#113256]: https://github.com/home-assistant/core/pull/113256
+[#113257]: https://github.com/home-assistant/core/pull/113257
+[#113258]: https://github.com/home-assistant/core/pull/113258
+[#113259]: https://github.com/home-assistant/core/pull/113259
+[#113260]: https://github.com/home-assistant/core/pull/113260
+[#113262]: https://github.com/home-assistant/core/pull/113262
+[#113263]: https://github.com/home-assistant/core/pull/113263
+[#113268]: https://github.com/home-assistant/core/pull/113268
+[#113269]: https://github.com/home-assistant/core/pull/113269
+[#113270]: https://github.com/home-assistant/core/pull/113270
+[#113271]: https://github.com/home-assistant/core/pull/113271
+[#113272]: https://github.com/home-assistant/core/pull/113272
+[#113273]: https://github.com/home-assistant/core/pull/113273
+[#113274]: https://github.com/home-assistant/core/pull/113274
+[#113276]: https://github.com/home-assistant/core/pull/113276
+[#113277]: https://github.com/home-assistant/core/pull/113277
+[#113278]: https://github.com/home-assistant/core/pull/113278
+[#113280]: https://github.com/home-assistant/core/pull/113280
+[#113281]: https://github.com/home-assistant/core/pull/113281
+[#113282]: https://github.com/home-assistant/core/pull/113282
+[#113283]: https://github.com/home-assistant/core/pull/113283
+[#113284]: https://github.com/home-assistant/core/pull/113284
+[#113285]: https://github.com/home-assistant/core/pull/113285
+[#113286]: https://github.com/home-assistant/core/pull/113286
+[#113287]: https://github.com/home-assistant/core/pull/113287
+[#113288]: https://github.com/home-assistant/core/pull/113288
+[#113289]: https://github.com/home-assistant/core/pull/113289
+[#113290]: https://github.com/home-assistant/core/pull/113290
+[#113291]: https://github.com/home-assistant/core/pull/113291
+[#113292]: https://github.com/home-assistant/core/pull/113292
+[#113293]: https://github.com/home-assistant/core/pull/113293
+[#113294]: https://github.com/home-assistant/core/pull/113294
+[#113295]: https://github.com/home-assistant/core/pull/113295
+[#113296]: https://github.com/home-assistant/core/pull/113296
+[#113297]: https://github.com/home-assistant/core/pull/113297
+[#113298]: https://github.com/home-assistant/core/pull/113298
+[#113299]: https://github.com/home-assistant/core/pull/113299
+[#113300]: https://github.com/home-assistant/core/pull/113300
+[#113301]: https://github.com/home-assistant/core/pull/113301
+[#113302]: https://github.com/home-assistant/core/pull/113302
+[#113303]: https://github.com/home-assistant/core/pull/113303
+[#113304]: https://github.com/home-assistant/core/pull/113304
+[#113305]: https://github.com/home-assistant/core/pull/113305
+[#113306]: https://github.com/home-assistant/core/pull/113306
+[#113307]: https://github.com/home-assistant/core/pull/113307
+[#113308]: https://github.com/home-assistant/core/pull/113308
+[#113309]: https://github.com/home-assistant/core/pull/113309
+[#113311]: https://github.com/home-assistant/core/pull/113311
+[#113312]: https://github.com/home-assistant/core/pull/113312
+[#113313]: https://github.com/home-assistant/core/pull/113313
+[#113314]: https://github.com/home-assistant/core/pull/113314
+[#113315]: https://github.com/home-assistant/core/pull/113315
+[#113316]: https://github.com/home-assistant/core/pull/113316
+[#113317]: https://github.com/home-assistant/core/pull/113317
+[#113318]: https://github.com/home-assistant/core/pull/113318
+[#113319]: https://github.com/home-assistant/core/pull/113319
+[#113320]: https://github.com/home-assistant/core/pull/113320
+[#113321]: https://github.com/home-assistant/core/pull/113321
+[#113322]: https://github.com/home-assistant/core/pull/113322
+[#113323]: https://github.com/home-assistant/core/pull/113323
+[#113324]: https://github.com/home-assistant/core/pull/113324
+[#113325]: https://github.com/home-assistant/core/pull/113325
+[#113326]: https://github.com/home-assistant/core/pull/113326
+[#113327]: https://github.com/home-assistant/core/pull/113327
+[#113328]: https://github.com/home-assistant/core/pull/113328
+[#113329]: https://github.com/home-assistant/core/pull/113329
+[#113330]: https://github.com/home-assistant/core/pull/113330
+[#113331]: https://github.com/home-assistant/core/pull/113331
+[#113332]: https://github.com/home-assistant/core/pull/113332
+[#113333]: https://github.com/home-assistant/core/pull/113333
+[#113335]: https://github.com/home-assistant/core/pull/113335
+[#113336]: https://github.com/home-assistant/core/pull/113336
+[#113337]: https://github.com/home-assistant/core/pull/113337
+[#113338]: https://github.com/home-assistant/core/pull/113338
+[#113339]: https://github.com/home-assistant/core/pull/113339
+[#113340]: https://github.com/home-assistant/core/pull/113340
+[#113341]: https://github.com/home-assistant/core/pull/113341
+[#113342]: https://github.com/home-assistant/core/pull/113342
+[#113343]: https://github.com/home-assistant/core/pull/113343
+[#113344]: https://github.com/home-assistant/core/pull/113344
+[#113345]: https://github.com/home-assistant/core/pull/113345
+[#113346]: https://github.com/home-assistant/core/pull/113346
+[#113347]: https://github.com/home-assistant/core/pull/113347
+[#113348]: https://github.com/home-assistant/core/pull/113348
+[#113349]: https://github.com/home-assistant/core/pull/113349
+[#113350]: https://github.com/home-assistant/core/pull/113350
+[#113351]: https://github.com/home-assistant/core/pull/113351
+[#113352]: https://github.com/home-assistant/core/pull/113352
+[#113353]: https://github.com/home-assistant/core/pull/113353
+[#113354]: https://github.com/home-assistant/core/pull/113354
+[#113355]: https://github.com/home-assistant/core/pull/113355
+[#113356]: https://github.com/home-assistant/core/pull/113356
+[#113357]: https://github.com/home-assistant/core/pull/113357
+[#113358]: https://github.com/home-assistant/core/pull/113358
+[#113359]: https://github.com/home-assistant/core/pull/113359
+[#113360]: https://github.com/home-assistant/core/pull/113360
+[#113361]: https://github.com/home-assistant/core/pull/113361
+[#113362]: https://github.com/home-assistant/core/pull/113362
+[#113363]: https://github.com/home-assistant/core/pull/113363
+[#113364]: https://github.com/home-assistant/core/pull/113364
+[#113365]: https://github.com/home-assistant/core/pull/113365
+[#113366]: https://github.com/home-assistant/core/pull/113366
+[#113367]: https://github.com/home-assistant/core/pull/113367
+[#113368]: https://github.com/home-assistant/core/pull/113368
+[#113369]: https://github.com/home-assistant/core/pull/113369
+[#113370]: https://github.com/home-assistant/core/pull/113370
+[#113371]: https://github.com/home-assistant/core/pull/113371
+[#113378]: https://github.com/home-assistant/core/pull/113378
+[#113382]: https://github.com/home-assistant/core/pull/113382
+[#113383]: https://github.com/home-assistant/core/pull/113383
+[#113384]: https://github.com/home-assistant/core/pull/113384
+[#113386]: https://github.com/home-assistant/core/pull/113386
+[#113387]: https://github.com/home-assistant/core/pull/113387
+[#113388]: https://github.com/home-assistant/core/pull/113388
+[#113389]: https://github.com/home-assistant/core/pull/113389
+[#113390]: https://github.com/home-assistant/core/pull/113390
+[#113391]: https://github.com/home-assistant/core/pull/113391
+[#113397]: https://github.com/home-assistant/core/pull/113397
+[#113401]: https://github.com/home-assistant/core/pull/113401
+[#113402]: https://github.com/home-assistant/core/pull/113402
+[#113404]: https://github.com/home-assistant/core/pull/113404
+[#113405]: https://github.com/home-assistant/core/pull/113405
+[#113406]: https://github.com/home-assistant/core/pull/113406
+[#113408]: https://github.com/home-assistant/core/pull/113408
+[#113409]: https://github.com/home-assistant/core/pull/113409
+[#113410]: https://github.com/home-assistant/core/pull/113410
+[#113411]: https://github.com/home-assistant/core/pull/113411
+[#113412]: https://github.com/home-assistant/core/pull/113412
+[#113413]: https://github.com/home-assistant/core/pull/113413
+[#113414]: https://github.com/home-assistant/core/pull/113414
+[#113415]: https://github.com/home-assistant/core/pull/113415
+[#113416]: https://github.com/home-assistant/core/pull/113416
+[#113417]: https://github.com/home-assistant/core/pull/113417
+[#113418]: https://github.com/home-assistant/core/pull/113418
+[#113419]: https://github.com/home-assistant/core/pull/113419
+[#113420]: https://github.com/home-assistant/core/pull/113420
+[#113422]: https://github.com/home-assistant/core/pull/113422
+[#113425]: https://github.com/home-assistant/core/pull/113425
+[#113431]: https://github.com/home-assistant/core/pull/113431
+[#113440]: https://github.com/home-assistant/core/pull/113440
+[#113441]: https://github.com/home-assistant/core/pull/113441
+[#113442]: https://github.com/home-assistant/core/pull/113442
+[#113446]: https://github.com/home-assistant/core/pull/113446
+[#113447]: https://github.com/home-assistant/core/pull/113447
+[#113450]: https://github.com/home-assistant/core/pull/113450
+[#113451]: https://github.com/home-assistant/core/pull/113451
+[#113453]: https://github.com/home-assistant/core/pull/113453
+[#113455]: https://github.com/home-assistant/core/pull/113455
+[#113462]: https://github.com/home-assistant/core/pull/113462
+[#113465]: https://github.com/home-assistant/core/pull/113465
+[#113467]: https://github.com/home-assistant/core/pull/113467
+[#113469]: https://github.com/home-assistant/core/pull/113469
+[#113471]: https://github.com/home-assistant/core/pull/113471
+[#113478]: https://github.com/home-assistant/core/pull/113478
+[#113480]: https://github.com/home-assistant/core/pull/113480
+[#113482]: https://github.com/home-assistant/core/pull/113482
+[#113485]: https://github.com/home-assistant/core/pull/113485
+[#113490]: https://github.com/home-assistant/core/pull/113490
+[#113493]: https://github.com/home-assistant/core/pull/113493
+[#113496]: https://github.com/home-assistant/core/pull/113496
+[#113501]: https://github.com/home-assistant/core/pull/113501
+[#113502]: https://github.com/home-assistant/core/pull/113502
+[#113504]: https://github.com/home-assistant/core/pull/113504
+[#113506]: https://github.com/home-assistant/core/pull/113506
+[#113508]: https://github.com/home-assistant/core/pull/113508
+[#113509]: https://github.com/home-assistant/core/pull/113509
+[#113510]: https://github.com/home-assistant/core/pull/113510
+[#113511]: https://github.com/home-assistant/core/pull/113511
+[#113514]: https://github.com/home-assistant/core/pull/113514
+[#113516]: https://github.com/home-assistant/core/pull/113516
+[#113524]: https://github.com/home-assistant/core/pull/113524
+[#113527]: https://github.com/home-assistant/core/pull/113527
+[#113528]: https://github.com/home-assistant/core/pull/113528
+[#113529]: https://github.com/home-assistant/core/pull/113529
+[#113530]: https://github.com/home-assistant/core/pull/113530
+[#113531]: https://github.com/home-assistant/core/pull/113531
+[#113533]: https://github.com/home-assistant/core/pull/113533
+[#113534]: https://github.com/home-assistant/core/pull/113534
+[#113535]: https://github.com/home-assistant/core/pull/113535
+[#113537]: https://github.com/home-assistant/core/pull/113537
+[#113540]: https://github.com/home-assistant/core/pull/113540
+[#113542]: https://github.com/home-assistant/core/pull/113542
+[#113543]: https://github.com/home-assistant/core/pull/113543
+[#113544]: https://github.com/home-assistant/core/pull/113544
+[#113549]: https://github.com/home-assistant/core/pull/113549
+[#113550]: https://github.com/home-assistant/core/pull/113550
+[#113553]: https://github.com/home-assistant/core/pull/113553
+[#113554]: https://github.com/home-assistant/core/pull/113554
+[#113555]: https://github.com/home-assistant/core/pull/113555
+[#113556]: https://github.com/home-assistant/core/pull/113556
+[#113557]: https://github.com/home-assistant/core/pull/113557
+[#113558]: https://github.com/home-assistant/core/pull/113558
+[#113562]: https://github.com/home-assistant/core/pull/113562
+[#113564]: https://github.com/home-assistant/core/pull/113564
+[#113569]: https://github.com/home-assistant/core/pull/113569
+[#113570]: https://github.com/home-assistant/core/pull/113570
+[#113573]: https://github.com/home-assistant/core/pull/113573
+[#113577]: https://github.com/home-assistant/core/pull/113577
+[#113578]: https://github.com/home-assistant/core/pull/113578
+[#113579]: https://github.com/home-assistant/core/pull/113579
+[#113580]: https://github.com/home-assistant/core/pull/113580
+[#113581]: https://github.com/home-assistant/core/pull/113581
+[#113582]: https://github.com/home-assistant/core/pull/113582
+[#113583]: https://github.com/home-assistant/core/pull/113583
+[#113584]: https://github.com/home-assistant/core/pull/113584
+[#113586]: https://github.com/home-assistant/core/pull/113586
+[#113588]: https://github.com/home-assistant/core/pull/113588
+[#113589]: https://github.com/home-assistant/core/pull/113589
+[#113595]: https://github.com/home-assistant/core/pull/113595
+[#113596]: https://github.com/home-assistant/core/pull/113596
+[#113597]: https://github.com/home-assistant/core/pull/113597
+[#113602]: https://github.com/home-assistant/core/pull/113602
+[#113604]: https://github.com/home-assistant/core/pull/113604
+[#113606]: https://github.com/home-assistant/core/pull/113606
+[#113607]: https://github.com/home-assistant/core/pull/113607
+[#113611]: https://github.com/home-assistant/core/pull/113611
+[#113612]: https://github.com/home-assistant/core/pull/113612
+[#113613]: https://github.com/home-assistant/core/pull/113613
+[#113615]: https://github.com/home-assistant/core/pull/113615
+[#113616]: https://github.com/home-assistant/core/pull/113616
+[#113617]: https://github.com/home-assistant/core/pull/113617
+[#113618]: https://github.com/home-assistant/core/pull/113618
+[#113619]: https://github.com/home-assistant/core/pull/113619
+[#113620]: https://github.com/home-assistant/core/pull/113620
+[#113621]: https://github.com/home-assistant/core/pull/113621
+[#113623]: https://github.com/home-assistant/core/pull/113623
+[#113624]: https://github.com/home-assistant/core/pull/113624
+[#113625]: https://github.com/home-assistant/core/pull/113625
+[#113626]: https://github.com/home-assistant/core/pull/113626
+[#113627]: https://github.com/home-assistant/core/pull/113627
+[#113629]: https://github.com/home-assistant/core/pull/113629
+[#113631]: https://github.com/home-assistant/core/pull/113631
+[#113632]: https://github.com/home-assistant/core/pull/113632
+[#113633]: https://github.com/home-assistant/core/pull/113633
+[#113634]: https://github.com/home-assistant/core/pull/113634
+[#113635]: https://github.com/home-assistant/core/pull/113635
+[#113636]: https://github.com/home-assistant/core/pull/113636
+[#113637]: https://github.com/home-assistant/core/pull/113637
+[#113638]: https://github.com/home-assistant/core/pull/113638
+[#113639]: https://github.com/home-assistant/core/pull/113639
+[#113644]: https://github.com/home-assistant/core/pull/113644
+[#113645]: https://github.com/home-assistant/core/pull/113645
+[#113646]: https://github.com/home-assistant/core/pull/113646
+[#113647]: https://github.com/home-assistant/core/pull/113647
+[#113648]: https://github.com/home-assistant/core/pull/113648
+[#113650]: https://github.com/home-assistant/core/pull/113650
+[#113652]: https://github.com/home-assistant/core/pull/113652
+[#113653]: https://github.com/home-assistant/core/pull/113653
+[#113654]: https://github.com/home-assistant/core/pull/113654
+[#113655]: https://github.com/home-assistant/core/pull/113655
+[#113657]: https://github.com/home-assistant/core/pull/113657
+[#113658]: https://github.com/home-assistant/core/pull/113658
+[#113659]: https://github.com/home-assistant/core/pull/113659
+[#113660]: https://github.com/home-assistant/core/pull/113660
+[#113661]: https://github.com/home-assistant/core/pull/113661
+[#113665]: https://github.com/home-assistant/core/pull/113665
+[#113667]: https://github.com/home-assistant/core/pull/113667
+[#113674]: https://github.com/home-assistant/core/pull/113674
+[#113675]: https://github.com/home-assistant/core/pull/113675
+[#113677]: https://github.com/home-assistant/core/pull/113677
+[#113683]: https://github.com/home-assistant/core/pull/113683
+[#113686]: https://github.com/home-assistant/core/pull/113686
+[#113687]: https://github.com/home-assistant/core/pull/113687
+[#113688]: https://github.com/home-assistant/core/pull/113688
+[#113691]: https://github.com/home-assistant/core/pull/113691
+[#113692]: https://github.com/home-assistant/core/pull/113692
+[#113693]: https://github.com/home-assistant/core/pull/113693
+[#113695]: https://github.com/home-assistant/core/pull/113695
+[#113702]: https://github.com/home-assistant/core/pull/113702
+[#113704]: https://github.com/home-assistant/core/pull/113704
+[#113705]: https://github.com/home-assistant/core/pull/113705
+[#113707]: https://github.com/home-assistant/core/pull/113707
+[#113715]: https://github.com/home-assistant/core/pull/113715
+[#113716]: https://github.com/home-assistant/core/pull/113716
+[#113717]: https://github.com/home-assistant/core/pull/113717
+[#113718]: https://github.com/home-assistant/core/pull/113718
+[#113720]: https://github.com/home-assistant/core/pull/113720
+[#113726]: https://github.com/home-assistant/core/pull/113726
+[#113727]: https://github.com/home-assistant/core/pull/113727
+[#113729]: https://github.com/home-assistant/core/pull/113729
+[#113740]: https://github.com/home-assistant/core/pull/113740
+[#113741]: https://github.com/home-assistant/core/pull/113741
+[#113744]: https://github.com/home-assistant/core/pull/113744
+[#113747]: https://github.com/home-assistant/core/pull/113747
+[#113750]: https://github.com/home-assistant/core/pull/113750
+[#113753]: https://github.com/home-assistant/core/pull/113753
+[#113755]: https://github.com/home-assistant/core/pull/113755
+[#113757]: https://github.com/home-assistant/core/pull/113757
+[#113758]: https://github.com/home-assistant/core/pull/113758
+[#113764]: https://github.com/home-assistant/core/pull/113764
+[#113765]: https://github.com/home-assistant/core/pull/113765
+[#113767]: https://github.com/home-assistant/core/pull/113767
+[#113773]: https://github.com/home-assistant/core/pull/113773
+[#113776]: https://github.com/home-assistant/core/pull/113776
+[#113777]: https://github.com/home-assistant/core/pull/113777
+[#113778]: https://github.com/home-assistant/core/pull/113778
+[#113779]: https://github.com/home-assistant/core/pull/113779
+[#113780]: https://github.com/home-assistant/core/pull/113780
+[#113781]: https://github.com/home-assistant/core/pull/113781
+[#113782]: https://github.com/home-assistant/core/pull/113782
+[#113783]: https://github.com/home-assistant/core/pull/113783
+[#113784]: https://github.com/home-assistant/core/pull/113784
+[#113785]: https://github.com/home-assistant/core/pull/113785
+[#113786]: https://github.com/home-assistant/core/pull/113786
+[#113788]: https://github.com/home-assistant/core/pull/113788
+[#113789]: https://github.com/home-assistant/core/pull/113789
+[#113791]: https://github.com/home-assistant/core/pull/113791
+[#113792]: https://github.com/home-assistant/core/pull/113792
+[#113797]: https://github.com/home-assistant/core/pull/113797
+[#113798]: https://github.com/home-assistant/core/pull/113798
+[#113800]: https://github.com/home-assistant/core/pull/113800
+[#113802]: https://github.com/home-assistant/core/pull/113802
+[#113803]: https://github.com/home-assistant/core/pull/113803
+[#113808]: https://github.com/home-assistant/core/pull/113808
+[#113811]: https://github.com/home-assistant/core/pull/113811
+[#113812]: https://github.com/home-assistant/core/pull/113812
+[#113814]: https://github.com/home-assistant/core/pull/113814
+[#113815]: https://github.com/home-assistant/core/pull/113815
+[#113816]: https://github.com/home-assistant/core/pull/113816
+[#113817]: https://github.com/home-assistant/core/pull/113817
+[#113819]: https://github.com/home-assistant/core/pull/113819
+[#113820]: https://github.com/home-assistant/core/pull/113820
+[#113821]: https://github.com/home-assistant/core/pull/113821
+[#113822]: https://github.com/home-assistant/core/pull/113822
+[#113823]: https://github.com/home-assistant/core/pull/113823
+[#113825]: https://github.com/home-assistant/core/pull/113825
+[#113826]: https://github.com/home-assistant/core/pull/113826
+[#113828]: https://github.com/home-assistant/core/pull/113828
+[#113834]: https://github.com/home-assistant/core/pull/113834
+[#113835]: https://github.com/home-assistant/core/pull/113835
+[#113836]: https://github.com/home-assistant/core/pull/113836
+[#113840]: https://github.com/home-assistant/core/pull/113840
+[#113842]: https://github.com/home-assistant/core/pull/113842
+[#113844]: https://github.com/home-assistant/core/pull/113844
+[#113845]: https://github.com/home-assistant/core/pull/113845
+[#113850]: https://github.com/home-assistant/core/pull/113850
+[#113852]: https://github.com/home-assistant/core/pull/113852
+[#113854]: https://github.com/home-assistant/core/pull/113854
+[#113858]: https://github.com/home-assistant/core/pull/113858
+[#113859]: https://github.com/home-assistant/core/pull/113859
+[#113862]: https://github.com/home-assistant/core/pull/113862
+[#113868]: https://github.com/home-assistant/core/pull/113868
+[#113870]: https://github.com/home-assistant/core/pull/113870
+[#113871]: https://github.com/home-assistant/core/pull/113871
+[#113872]: https://github.com/home-assistant/core/pull/113872
+[#113875]: https://github.com/home-assistant/core/pull/113875
+[#113878]: https://github.com/home-assistant/core/pull/113878
+[#113884]: https://github.com/home-assistant/core/pull/113884
+[#113886]: https://github.com/home-assistant/core/pull/113886
+[#113888]: https://github.com/home-assistant/core/pull/113888
+[#113889]: https://github.com/home-assistant/core/pull/113889
+[#113892]: https://github.com/home-assistant/core/pull/113892
+[#113893]: https://github.com/home-assistant/core/pull/113893
+[#113895]: https://github.com/home-assistant/core/pull/113895
+[#113896]: https://github.com/home-assistant/core/pull/113896
+[#113897]: https://github.com/home-assistant/core/pull/113897
+[#113898]: https://github.com/home-assistant/core/pull/113898
+[#113900]: https://github.com/home-assistant/core/pull/113900
+[#113901]: https://github.com/home-assistant/core/pull/113901
+[#113902]: https://github.com/home-assistant/core/pull/113902
+[#113903]: https://github.com/home-assistant/core/pull/113903
+[#113904]: https://github.com/home-assistant/core/pull/113904
+[#113910]: https://github.com/home-assistant/core/pull/113910
+[#113913]: https://github.com/home-assistant/core/pull/113913
+[#113915]: https://github.com/home-assistant/core/pull/113915
+[#113917]: https://github.com/home-assistant/core/pull/113917
+[#113919]: https://github.com/home-assistant/core/pull/113919
+[#113920]: https://github.com/home-assistant/core/pull/113920
+[#113921]: https://github.com/home-assistant/core/pull/113921
+[#113922]: https://github.com/home-assistant/core/pull/113922
+[#113923]: https://github.com/home-assistant/core/pull/113923
+[#113928]: https://github.com/home-assistant/core/pull/113928
+[#113929]: https://github.com/home-assistant/core/pull/113929
+[#113932]: https://github.com/home-assistant/core/pull/113932
+[#113934]: https://github.com/home-assistant/core/pull/113934
+[#113948]: https://github.com/home-assistant/core/pull/113948
+[#113951]: https://github.com/home-assistant/core/pull/113951
+[#113959]: https://github.com/home-assistant/core/pull/113959
+[#113962]: https://github.com/home-assistant/core/pull/113962
+[#113963]: https://github.com/home-assistant/core/pull/113963
+[#113964]: https://github.com/home-assistant/core/pull/113964
+[#113965]: https://github.com/home-assistant/core/pull/113965
+[#113966]: https://github.com/home-assistant/core/pull/113966
+[#113969]: https://github.com/home-assistant/core/pull/113969
+[#113972]: https://github.com/home-assistant/core/pull/113972
+[#113981]: https://github.com/home-assistant/core/pull/113981
+[#113984]: https://github.com/home-assistant/core/pull/113984
+[#113985]: https://github.com/home-assistant/core/pull/113985
+[#113987]: https://github.com/home-assistant/core/pull/113987
+[#113989]: https://github.com/home-assistant/core/pull/113989
+[#113991]: https://github.com/home-assistant/core/pull/113991
+[#113992]: https://github.com/home-assistant/core/pull/113992
+[#113994]: https://github.com/home-assistant/core/pull/113994
+[#113999]: https://github.com/home-assistant/core/pull/113999
+[#114004]: https://github.com/home-assistant/core/pull/114004
+[#114006]: https://github.com/home-assistant/core/pull/114006
+[#114007]: https://github.com/home-assistant/core/pull/114007
+[#114010]: https://github.com/home-assistant/core/pull/114010
+[#114011]: https://github.com/home-assistant/core/pull/114011
+[#114012]: https://github.com/home-assistant/core/pull/114012
+[#114013]: https://github.com/home-assistant/core/pull/114013
+[#114014]: https://github.com/home-assistant/core/pull/114014
+[#114015]: https://github.com/home-assistant/core/pull/114015
+[#114016]: https://github.com/home-assistant/core/pull/114016
+[#114017]: https://github.com/home-assistant/core/pull/114017
+[#114018]: https://github.com/home-assistant/core/pull/114018
+[#114021]: https://github.com/home-assistant/core/pull/114021
+[#114022]: https://github.com/home-assistant/core/pull/114022
+[#114024]: https://github.com/home-assistant/core/pull/114024
+[#114034]: https://github.com/home-assistant/core/pull/114034
+[#114035]: https://github.com/home-assistant/core/pull/114035
+[#114036]: https://github.com/home-assistant/core/pull/114036
+[#114038]: https://github.com/home-assistant/core/pull/114038
+[#114039]: https://github.com/home-assistant/core/pull/114039
+[#114040]: https://github.com/home-assistant/core/pull/114040
+[#114043]: https://github.com/home-assistant/core/pull/114043
+[#114044]: https://github.com/home-assistant/core/pull/114044
+[#114045]: https://github.com/home-assistant/core/pull/114045
+[#114046]: https://github.com/home-assistant/core/pull/114046
+[#114047]: https://github.com/home-assistant/core/pull/114047
+[#114050]: https://github.com/home-assistant/core/pull/114050
+[#114053]: https://github.com/home-assistant/core/pull/114053
+[#114054]: https://github.com/home-assistant/core/pull/114054
+[#114057]: https://github.com/home-assistant/core/pull/114057
+[#114058]: https://github.com/home-assistant/core/pull/114058
+[#114060]: https://github.com/home-assistant/core/pull/114060
+[#114062]: https://github.com/home-assistant/core/pull/114062
+[#114063]: https://github.com/home-assistant/core/pull/114063
+[#114065]: https://github.com/home-assistant/core/pull/114065
+[#114067]: https://github.com/home-assistant/core/pull/114067
+[#114068]: https://github.com/home-assistant/core/pull/114068
+[#114069]: https://github.com/home-assistant/core/pull/114069
+[#114071]: https://github.com/home-assistant/core/pull/114071
+[#114073]: https://github.com/home-assistant/core/pull/114073
+[#114074]: https://github.com/home-assistant/core/pull/114074
+[#114077]: https://github.com/home-assistant/core/pull/114077
+[#114078]: https://github.com/home-assistant/core/pull/114078
+[#114082]: https://github.com/home-assistant/core/pull/114082
+[#114083]: https://github.com/home-assistant/core/pull/114083
+[#114084]: https://github.com/home-assistant/core/pull/114084
+[#114085]: https://github.com/home-assistant/core/pull/114085
+[#114086]: https://github.com/home-assistant/core/pull/114086
+[#114088]: https://github.com/home-assistant/core/pull/114088
+[#114089]: https://github.com/home-assistant/core/pull/114089
+[#114093]: https://github.com/home-assistant/core/pull/114093
+[#114097]: https://github.com/home-assistant/core/pull/114097
+[#114101]: https://github.com/home-assistant/core/pull/114101
+[#114102]: https://github.com/home-assistant/core/pull/114102
+[#114105]: https://github.com/home-assistant/core/pull/114105
+[#114107]: https://github.com/home-assistant/core/pull/114107
+[#114109]: https://github.com/home-assistant/core/pull/114109
+[#114111]: https://github.com/home-assistant/core/pull/114111
+[#114114]: https://github.com/home-assistant/core/pull/114114
+[#114115]: https://github.com/home-assistant/core/pull/114115
+[#114116]: https://github.com/home-assistant/core/pull/114116
+[#114120]: https://github.com/home-assistant/core/pull/114120
+[#114122]: https://github.com/home-assistant/core/pull/114122
+[#114124]: https://github.com/home-assistant/core/pull/114124
+[#114125]: https://github.com/home-assistant/core/pull/114125
+[#114127]: https://github.com/home-assistant/core/pull/114127
+[#114131]: https://github.com/home-assistant/core/pull/114131
+[#114132]: https://github.com/home-assistant/core/pull/114132
+[#114138]: https://github.com/home-assistant/core/pull/114138
+[#114142]: https://github.com/home-assistant/core/pull/114142
+[#114143]: https://github.com/home-assistant/core/pull/114143
+[#114144]: https://github.com/home-assistant/core/pull/114144
+[#114145]: https://github.com/home-assistant/core/pull/114145
+[#114148]: https://github.com/home-assistant/core/pull/114148
+[#114149]: https://github.com/home-assistant/core/pull/114149
+[#114150]: https://github.com/home-assistant/core/pull/114150
+[#114151]: https://github.com/home-assistant/core/pull/114151
+[#114153]: https://github.com/home-assistant/core/pull/114153
+[#114154]: https://github.com/home-assistant/core/pull/114154
+[#114155]: https://github.com/home-assistant/core/pull/114155
+[#114158]: https://github.com/home-assistant/core/pull/114158
+[#114159]: https://github.com/home-assistant/core/pull/114159
+[#114160]: https://github.com/home-assistant/core/pull/114160
+[#114161]: https://github.com/home-assistant/core/pull/114161
+[#114162]: https://github.com/home-assistant/core/pull/114162
+[#114163]: https://github.com/home-assistant/core/pull/114163
+[#114164]: https://github.com/home-assistant/core/pull/114164
+[#114165]: https://github.com/home-assistant/core/pull/114165
+[#114166]: https://github.com/home-assistant/core/pull/114166
+[#114167]: https://github.com/home-assistant/core/pull/114167
+[#114168]: https://github.com/home-assistant/core/pull/114168
+[#114169]: https://github.com/home-assistant/core/pull/114169
+[#114174]: https://github.com/home-assistant/core/pull/114174
+[#114180]: https://github.com/home-assistant/core/pull/114180
+[#114181]: https://github.com/home-assistant/core/pull/114181
+[#114182]: https://github.com/home-assistant/core/pull/114182
+[#114183]: https://github.com/home-assistant/core/pull/114183
+[#114184]: https://github.com/home-assistant/core/pull/114184
+[#114185]: https://github.com/home-assistant/core/pull/114185
+[#114186]: https://github.com/home-assistant/core/pull/114186
+[#114188]: https://github.com/home-assistant/core/pull/114188
+[#114191]: https://github.com/home-assistant/core/pull/114191
+[#114192]: https://github.com/home-assistant/core/pull/114192
+[#114198]: https://github.com/home-assistant/core/pull/114198
+[#114200]: https://github.com/home-assistant/core/pull/114200
+[#114201]: https://github.com/home-assistant/core/pull/114201
+[#114203]: https://github.com/home-assistant/core/pull/114203
+[#114206]: https://github.com/home-assistant/core/pull/114206
+[#114207]: https://github.com/home-assistant/core/pull/114207
+[#114208]: https://github.com/home-assistant/core/pull/114208
+[#114210]: https://github.com/home-assistant/core/pull/114210
+[#114212]: https://github.com/home-assistant/core/pull/114212
+[#114213]: https://github.com/home-assistant/core/pull/114213
+[#114216]: https://github.com/home-assistant/core/pull/114216
+[#114218]: https://github.com/home-assistant/core/pull/114218
+[#114219]: https://github.com/home-assistant/core/pull/114219
+[#114220]: https://github.com/home-assistant/core/pull/114220
+[#114221]: https://github.com/home-assistant/core/pull/114221
+[#114222]: https://github.com/home-assistant/core/pull/114222
+[#114227]: https://github.com/home-assistant/core/pull/114227
+[#114228]: https://github.com/home-assistant/core/pull/114228
+[#114229]: https://github.com/home-assistant/core/pull/114229
+[#114231]: https://github.com/home-assistant/core/pull/114231
+[#114232]: https://github.com/home-assistant/core/pull/114232
+[#114235]: https://github.com/home-assistant/core/pull/114235
+[#114236]: https://github.com/home-assistant/core/pull/114236
+[#114243]: https://github.com/home-assistant/core/pull/114243
+[#114246]: https://github.com/home-assistant/core/pull/114246
+[#114249]: https://github.com/home-assistant/core/pull/114249
+[#114252]: https://github.com/home-assistant/core/pull/114252
+[#114253]: https://github.com/home-assistant/core/pull/114253
+[#114260]: https://github.com/home-assistant/core/pull/114260
+[#114261]: https://github.com/home-assistant/core/pull/114261
+[#114263]: https://github.com/home-assistant/core/pull/114263
+[#114271]: https://github.com/home-assistant/core/pull/114271
+[#114276]: https://github.com/home-assistant/core/pull/114276
+[#114277]: https://github.com/home-assistant/core/pull/114277
+[#114278]: https://github.com/home-assistant/core/pull/114278
+[#114281]: https://github.com/home-assistant/core/pull/114281
+[#114283]: https://github.com/home-assistant/core/pull/114283
+[#114285]: https://github.com/home-assistant/core/pull/114285
+[#114288]: https://github.com/home-assistant/core/pull/114288
+[#114289]: https://github.com/home-assistant/core/pull/114289
+[#114292]: https://github.com/home-assistant/core/pull/114292
+[#114293]: https://github.com/home-assistant/core/pull/114293
+[#114295]: https://github.com/home-assistant/core/pull/114295
+[#114296]: https://github.com/home-assistant/core/pull/114296
+[#114297]: https://github.com/home-assistant/core/pull/114297
+[#114298]: https://github.com/home-assistant/core/pull/114298
+[#114300]: https://github.com/home-assistant/core/pull/114300
+[#114301]: https://github.com/home-assistant/core/pull/114301
+[#114302]: https://github.com/home-assistant/core/pull/114302
+[#114303]: https://github.com/home-assistant/core/pull/114303
+[#114304]: https://github.com/home-assistant/core/pull/114304
+[#114306]: https://github.com/home-assistant/core/pull/114306
+[#114308]: https://github.com/home-assistant/core/pull/114308
+[#114309]: https://github.com/home-assistant/core/pull/114309
+[#114311]: https://github.com/home-assistant/core/pull/114311
+[#114312]: https://github.com/home-assistant/core/pull/114312
+[#114315]: https://github.com/home-assistant/core/pull/114315
+[#114316]: https://github.com/home-assistant/core/pull/114316
+[#114317]: https://github.com/home-assistant/core/pull/114317
+[#114320]: https://github.com/home-assistant/core/pull/114320
+[#114321]: https://github.com/home-assistant/core/pull/114321
+[#114322]: https://github.com/home-assistant/core/pull/114322
+[#114326]: https://github.com/home-assistant/core/pull/114326
+[#114332]: https://github.com/home-assistant/core/pull/114332
+[#114333]: https://github.com/home-assistant/core/pull/114333
+[#114335]: https://github.com/home-assistant/core/pull/114335
+[#114336]: https://github.com/home-assistant/core/pull/114336
+[#114337]: https://github.com/home-assistant/core/pull/114337
+[#114339]: https://github.com/home-assistant/core/pull/114339
+[#114344]: https://github.com/home-assistant/core/pull/114344
+[#114346]: https://github.com/home-assistant/core/pull/114346
+[#114348]: https://github.com/home-assistant/core/pull/114348
+[#114354]: https://github.com/home-assistant/core/pull/114354
+[#114356]: https://github.com/home-assistant/core/pull/114356
+[#114368]: https://github.com/home-assistant/core/pull/114368
+[#114370]: https://github.com/home-assistant/core/pull/114370
+[#114371]: https://github.com/home-assistant/core/pull/114371
+[#114372]: https://github.com/home-assistant/core/pull/114372
+[#114373]: https://github.com/home-assistant/core/pull/114373
+[#114374]: https://github.com/home-assistant/core/pull/114374
+[#114380]: https://github.com/home-assistant/core/pull/114380
+[#114389]: https://github.com/home-assistant/core/pull/114389
+[#114392]: https://github.com/home-assistant/core/pull/114392
+[#114394]: https://github.com/home-assistant/core/pull/114394
+[#114396]: https://github.com/home-assistant/core/pull/114396
+[#114397]: https://github.com/home-assistant/core/pull/114397
+[#114399]: https://github.com/home-assistant/core/pull/114399
+[#114410]: https://github.com/home-assistant/core/pull/114410
+[#114418]: https://github.com/home-assistant/core/pull/114418
+[#114431]: https://github.com/home-assistant/core/pull/114431
+[#114442]: https://github.com/home-assistant/core/pull/114442
+[#114445]: https://github.com/home-assistant/core/pull/114445
+[#114447]: https://github.com/home-assistant/core/pull/114447
+[#114450]: https://github.com/home-assistant/core/pull/114450
+[#114452]: https://github.com/home-assistant/core/pull/114452
+[#114453]: https://github.com/home-assistant/core/pull/114453
+[#114456]: https://github.com/home-assistant/core/pull/114456
+[#114459]: https://github.com/home-assistant/core/pull/114459
+[#114468]: https://github.com/home-assistant/core/pull/114468
+[#114478]: https://github.com/home-assistant/core/pull/114478
+[#114487]: https://github.com/home-assistant/core/pull/114487
+[#114491]: https://github.com/home-assistant/core/pull/114491
+[#114492]: https://github.com/home-assistant/core/pull/114492
+[#114524]: https://github.com/home-assistant/core/pull/114524
+[#114544]: https://github.com/home-assistant/core/pull/114544
+[#114566]: https://github.com/home-assistant/core/pull/114566
+[#114567]: https://github.com/home-assistant/core/pull/114567
+[#114568]: https://github.com/home-assistant/core/pull/114568
+[#114569]: https://github.com/home-assistant/core/pull/114569
+[#114570]: https://github.com/home-assistant/core/pull/114570
+[#114574]: https://github.com/home-assistant/core/pull/114574
+[#114578]: https://github.com/home-assistant/core/pull/114578
+[#114581]: https://github.com/home-assistant/core/pull/114581
+[#114584]: https://github.com/home-assistant/core/pull/114584
+[#114591]: https://github.com/home-assistant/core/pull/114591
+[#114593]: https://github.com/home-assistant/core/pull/114593
+[#114596]: https://github.com/home-assistant/core/pull/114596
+[#114600]: https://github.com/home-assistant/core/pull/114600
+[#114602]: https://github.com/home-assistant/core/pull/114602
+[#114603]: https://github.com/home-assistant/core/pull/114603
+[#114606]: https://github.com/home-assistant/core/pull/114606
+[#114607]: https://github.com/home-assistant/core/pull/114607
+[#114608]: https://github.com/home-assistant/core/pull/114608
+[#114611]: https://github.com/home-assistant/core/pull/114611
+[#114614]: https://github.com/home-assistant/core/pull/114614
+[#114615]: https://github.com/home-assistant/core/pull/114615
+[#114627]: https://github.com/home-assistant/core/pull/114627
+[#114631]: https://github.com/home-assistant/core/pull/114631
+[#114641]: https://github.com/home-assistant/core/pull/114641
+[#114646]: https://github.com/home-assistant/core/pull/114646
+[#114649]: https://github.com/home-assistant/core/pull/114649
+[#114654]: https://github.com/home-assistant/core/pull/114654
+[#114657]: https://github.com/home-assistant/core/pull/114657
+[#114659]: https://github.com/home-assistant/core/pull/114659
+[#114683]: https://github.com/home-assistant/core/pull/114683
+[#114685]: https://github.com/home-assistant/core/pull/114685
+[#114718]: https://github.com/home-assistant/core/pull/114718
+[#114741]: https://github.com/home-assistant/core/pull/114741
+[#114747]: https://github.com/home-assistant/core/pull/114747
+[#114748]: https://github.com/home-assistant/core/pull/114748
+[#114755]: https://github.com/home-assistant/core/pull/114755
+[#114756]: https://github.com/home-assistant/core/pull/114756
+[#114757]: https://github.com/home-assistant/core/pull/114757
+[#87821]: https://github.com/home-assistant/core/pull/87821
+[#94392]: https://github.com/home-assistant/core/pull/94392
+[#95206]: https://github.com/home-assistant/core/pull/95206
+[#98722]: https://github.com/home-assistant/core/pull/98722
+[#99495]: https://github.com/home-assistant/core/pull/99495
+[@343max]: https://github.com/343max
+[@ALERTua]: https://github.com/ALERTua
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Antoni-Czaplicki]: https://github.com/Antoni-Czaplicki
+[@Bre77]: https://github.com/Bre77
+[@CFenner]: https://github.com/CFenner
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@DCSBL]: https://github.com/DCSBL
+[@DarkFox]: https://github.com/DarkFox
+[@Ernst79]: https://github.com/Ernst79
+[@FedDam]: https://github.com/FedDam
+[@Fexiven]: https://github.com/Fexiven
+[@Floris272]: https://github.com/Floris272
+[@GidoHakvoort]: https://github.com/GidoHakvoort
+[@IngoK1]: https://github.com/IngoK1
+[@IsakNyberg]: https://github.com/IsakNyberg
+[@JeromeHXP]: https://github.com/JeromeHXP
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@LarsStegman]: https://github.com/LarsStegman
+[@Lash-L]: https://github.com/Lash-L
+[@LennP]: https://github.com/LennP
+[@ManneW]: https://github.com/ManneW
+[@MarkGodwin]: https://github.com/MarkGodwin
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@MatthiasLohr]: https://github.com/MatthiasLohr
+[@MrXANA91]: https://github.com/MrXANA91
+[@NodeJSmith]: https://github.com/NodeJSmith
+[@Noltari]: https://github.com/Noltari
+[@OnFreund]: https://github.com/OnFreund
+[@OndraM]: https://github.com/OndraM
+[@PeteRager]: https://github.com/PeteRager
+[@RoboMagus]: https://github.com/RoboMagus
+[@Shutgun]: https://github.com/Shutgun
+[@StevenLooman]: https://github.com/StevenLooman
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@Thomas55555]: https://github.com/Thomas55555
+[@Tronix117]: https://github.com/Tronix117
+[@Xiretza]: https://github.com/Xiretza
+[@Xitee1]: https://github.com/Xitee1
+[@YogevBokobza]: https://github.com/YogevBokobza
+[@abjorck]: https://github.com/abjorck
+[@agoode]: https://github.com/agoode
+[@akx]: https://github.com/akx
+[@albertogeniola]: https://github.com/albertogeniola
+[@alexsydell]: https://github.com/alexsydell
+[@alinbalutoiu]: https://github.com/alinbalutoiu
+[@allenporter]: https://github.com/allenporter
+[@astrandb]: https://github.com/astrandb
+[@autinerd]: https://github.com/autinerd
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@belangp]: https://github.com/belangp
+[@bieniu]: https://github.com/bieniu
+[@boswelja]: https://github.com/boswelja
+[@bouwew]: https://github.com/bouwew
+[@bramkragten]: https://github.com/bramkragten
+[@brg468]: https://github.com/brg468
+[@briglx]: https://github.com/briglx
+[@caronc]: https://github.com/caronc
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@clssn]: https://github.com/clssn
+[@cosimomeli]: https://github.com/cosimomeli
+[@cottsay]: https://github.com/cottsay
+[@ctalkington]: https://github.com/ctalkington
+[@danielperna84]: https://github.com/danielperna84
+[@davet2001]: https://github.com/davet2001
+[@definitio]: https://github.com/definitio
+[@dgomes]: https://github.com/dgomes
+[@dmulcahey]: https://github.com/dmulcahey
+[@dontinelli]: https://github.com/dontinelli
+[@dotvav]: https://github.com/dotvav
+[@dougiteixeira]: https://github.com/dougiteixeira
+[@drewclauson]: https://github.com/drewclauson
+[@dshokouhi]: https://github.com/dshokouhi
+[@edenhaus]: https://github.com/edenhaus
+[@eifinger]: https://github.com/eifinger
+[@elupus]: https://github.com/elupus
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@esciara]: https://github.com/esciara
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@fwestenberg]: https://github.com/fwestenberg
+[@gibwar]: https://github.com/gibwar
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@hopkins-tk]: https://github.com/hopkins-tk
+[@iMicknl]: https://github.com/iMicknl
+[@idelsink]: https://github.com/idelsink
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jeeftor]: https://github.com/jeeftor
+[@jesserockz]: https://github.com/jesserockz
+[@jjlawren]: https://github.com/jjlawren
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@jwillemsen]: https://github.com/jwillemsen
+[@kingy444]: https://github.com/kingy444
+[@lellky]: https://github.com/lellky
+[@lextm]: https://github.com/lextm
+[@luar123]: https://github.com/luar123
+[@ludeeus]: https://github.com/ludeeus
+[@malkstar]: https://github.com/malkstar
+[@marcelveldt]: https://github.com/marcelveldt
+[@matrixd2]: https://github.com/matrixd2
+[@max2697]: https://github.com/max2697
+[@mdegat01]: https://github.com/mdegat01
+[@miaucl]: https://github.com/miaucl
+[@mib1185]: https://github.com/mib1185
+[@mjh1]: https://github.com/mjh1
+[@mkmer]: https://github.com/mkmer
+[@msavazzi]: https://github.com/msavazzi
+[@nalin29]: https://github.com/nalin29
+[@niro1987]: https://github.com/niro1987
+[@oyvindwe]: https://github.com/oyvindwe
+[@pavoni]: https://github.com/pavoni
+[@piitaya]: https://github.com/piitaya
+[@puddly]: https://github.com/puddly
+[@rokam]: https://github.com/rokam
+[@ronweikamp]: https://github.com/ronweikamp
+[@scop]: https://github.com/scop
+[@sdb9696]: https://github.com/sdb9696
+[@shaiu]: https://github.com/shaiu
+[@slyoldfox]: https://github.com/slyoldfox
+[@snoack]: https://github.com/snoack
+[@soonsouth]: https://github.com/soonsouth
+[@starkillerOG]: https://github.com/starkillerOG
+[@steffenrapp]: https://github.com/steffenrapp
+[@synesthesiam]: https://github.com/synesthesiam
+[@the-ress]: https://github.com/the-ress
+[@thecode]: https://github.com/thecode
+[@thejeffreystone]: https://github.com/thejeffreystone
+[@timmo001]: https://github.com/timmo001
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@tronikos]: https://github.com/tronikos
+[@tuday2]: https://github.com/tuday2
+[@uchagani]: https://github.com/uchagani
+[@wilburCforce]: https://github.com/wilburCforce
+[@wujiaqi]: https://github.com/wujiaqi
+[@xeniter]: https://github.com/xeniter
+[@yozik04]: https://github.com/yozik04
+[@yuxincs]: https://github.com/yuxincs
+[@zweckj]: https://github.com/zweckj
diff --git a/source/changelogs/core-2024.5.markdown b/source/changelogs/core-2024.5.markdown
new file mode 100644
index 000000000000..03c969af6208
--- /dev/null
+++ b/source/changelogs/core-2024.5.markdown
@@ -0,0 +1,1720 @@
+---
+title: Full changelog for Home Assistant Core 2024.5
+description: Detailed changelog for the Home Assistant Core 2024.5 release
+replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$
+---
+
+These are all the changes included in the Home Assistant Core 2024.5 release.
+
+For a summary in a more readable format:
+[Release notes blog for this release](/blog/2024/05/01/release-20245/).
+
+## All changes
+
+- Update SignalType imports ([@cdce8p] - [#114287])
+- Bump version to 2024.5.0dev0 ([@frenck] - [#114324])
+- Remove suggested_uom from frequency in Enphase ([@catsmanac] - [#114340])
+- Add additional coverage to the ESPHome manager ([@bdraco] - [#114265])
+- Define PARALLEL_UPDATES for APCUPSD ([@yuxincs] - [#114134])
+- Enable Ruff TRY201 ([@autinerd] - [#114269])
+- Set fastdotcom to gold quality ([@erwindouna] - [#105598])
+- Fix ruff error ([@cdce8p] - [#114364])
+- Add translation support to Config Entry errors ([@gjohansson-ST] - [#106305])
+- Mark core as codeowner for some folders ([@edenhaus] - [#114357])
+- Update pyudev to 0.24.1 ([@cdce8p] - [#114359])
+- Update aioazuredevops to 1.4.3 ([@cdce8p] - [#114361])
+- Update aprslib to 0.7.2 ([@cdce8p] - [#114365])
+- Update ovoenergy to 1.3.1 ([@cdce8p] - [#114367])
+- Update aiogithubapi to 23.11.0 ([@cdce8p] - [#114362])
+- Update boschshcpy to 0.2.91 ([@cdce8p] - [#114366])
+- Update pytest-xdist to 3.4.0 ([@cdce8p] - [#114377])
+- SunWEG reauth flow ([@rokam] - [#105861])
+- Use `setup_test_component_platform` helper for switch entity component tests instead of `hass.components` ([@jpbede] - [#114305])
+- Update boto3 to 1.34.51 and aiobotocore to 2.12.1 ([@cdce8p] - [#114379])
+- Add SharkIQ room targeting ([@funkybunch] - [#89350])
+- Add matter zeroconf ([@MartinHjelmare] - [#114385])
+- Replace partial annotations ([@cdce8p] - [#114177])
+- Set ruff requires-version to 0.3.4 ([@autinerd] - [#114388])
+- Use `setup_test_component_platform` helper for text entity component tests instead of `hass.components` ([@jpbede] - [#114400])
+- Migrate moon to use single_config_entry ([@jpbede] - [#114404])
+- Migrate nina to use single_config_entry ([@jpbede] - [#114408])
+- Add eq3btsmart integration ([@EuleMitKeule] - [#109291])
+- Use `mock_platform` for device_tracker entity component tests instead of `hass.components` ([@jpbede] - [#114398])
+- Enable ruff TRY401 ([@autinerd] - [#114395])
+- Use `setup_test_component_platform` helper for fan entity component tests instead of `hass.components` ([@jpbede] - [#114409])
+- Use `setup_test_component_platform` helper for time entity component tests instead of `hass.components` ([@jpbede] - [#114411])
+- Use `setup_test_component_platform` helper for date entity component tests instead of `hass.components` ([@jpbede] - [#114413])
+- Use `setup_test_component_platform` helper for datetime entity component tests instead of `hass.components` ([@jpbede] - [#114415])
+- Address late review comments for fan entity component test ([@jpbede] - [#114425])
+- Add single config entry to Mullvad ([@joostlek] - [#114426])
+- Add Integration for Energenie Power-Sockets ([@gnumpi] - [#113097])
+- Use `setup_test_component_platform` helper for select entity component tests instead of `hass.components` ([@jpbede] - [#114412])
+- Refactor conversation mock_agent ([@autinerd] - [#114428])
+- Add `uid` attribute to `imap_content` event data ([@luca-angemi] - [#114432])
+- Remove stale test for mqtt climate ([@jbouwh] - [#114443])
+- Don't store analytics insights info on entry level ([@joostlek] - [#114429])
+- Address late code review comment of Prusa MK3 support ([@the-ress] - [#114455])
+- Unignore Ruff PLE, PLW in tests ([@autinerd] - [#114406])
+- Enable Ruff TRY300 ([@autinerd] - [#114437])
+- Rework opensky tests ([@joostlek] - [#114441])
+- Add hourly forecast to open_meteo ([@Tommatheussen] - [#113622])
+- Add UniFi WLAN regenerate password button ([@brunohenriquy] - [#114422])
+- Add UniFi WLAN Password sensor ([@brunohenriquy] - [#114419])
+- Avoid call to `hass.helpers.store` in CategoryRegistry ([@jpbede] - [#114485])
+- Fix ZHA websocket API test ([@TheJulianJES] - [#114495])
+- Add pytest rewrite for wemo tests that use entity_test_helpers ([@bdraco] - [#114516])
+- Conversation to unsubscribe when no cache to invalidate ([@balloob] - [#114515])
+- Re-organize conversation integration ([@balloob] - [#114502])
+- Detect blocking module imports in the event loop ([@bdraco] - [#114488])
+- Use entity & device registry mocks instead of `hass.helpers` in airthings_ble tests ([@jpbede] - [#114520])
+- Enable first batch of Ruff RET rules ([@autinerd] - [#114480])
+- Deprecate `hass.helpers` ([@jpbede] - [#114484])
+- Add single config entry to Analytics insights ([@joostlek] - [#114427])
+- Bump aiodns to 3.2.0 ([@bdraco] - [#114527])
+- Add uptime sensor to Glances ([@wittypluck] - [#111402])
+- Add error sensor for Husqvarna Automower ([@Thomas55555] - [#113165])
+- Avoid use of `hass.helpers` in _mqtt_mock_entry fixture ([@jpbede] - [#114536])
+- Use device registry mock instead of `hass.helpers` in dsmr tests ([@jpbede] - [#114535])
+- Avoid use of `hass.helpers` in plugwise test ([@jpbede] - [#114534])
+- Use device registry mock instead of `hass.helpers` in traccar_server tests ([@jpbede] - [#114532])
+- Fix flakey sonos test test_creating_entry_sets_up_media_player ([@bdraco] - [#114539])
+- Bump python-songpal to 0.16.2 ([@rytilahti] - [#114525])
+- Unignore Ruff PLR in tests ([@autinerd] - [#114470])
+- Fix missing mocking in blink tests ([@bdraco] - [#114540])
+- Ensure coverage entries are sorted ([@epenet] - [#114424])
+- Automatic cleanup of entity and device registry in Tankerkoenig ([@mib1185] - [#114573])
+- Upgrade aioazuredevops to 2.0.0 ([@timmo001] - [#114537])
+- Fix missing mocking in nextdns tests ([@bdraco] - [#114541])
+- Apply late review of tankerkoenig ([@mib1185] - [#114582])
+- Small cleanups to zone to reduce startup time ([@bdraco] - [#114587])
+- Unignore Ruff PLC in tests ([@autinerd] - [#114572])
+- Reduce hassio startup time ([@bdraco] - [#114588])
+- Migrate uptime to use single_config_entry ([@jpbede] - [#114586])
+- Use dict comprehension in honeywell diagnostics ([@jpbede] - [#114598])
+- Add conversation entity ([@balloob] - [#114518])
+- Fix flakey cast discovery stop test ([@bdraco] - [#114605])
+- Use switch entities instead of toggle entities in tests ([@jpbede] - [#114585])
+- Bump Wandalen/wretry.action from 2.1.0 to 3.0.0 (@dependabot - [#114554])
+- Tweak integration sensor ([@emontnemery] - [#114384])
+- Fix ruff issue in sonos ([@edenhaus] - [#114616])
+- Update ring quality scale to silver ([@sdb9696] - [#113146])
+- Add sensor entities to Traccar Server ([@ludeeus] - [#111374])
+- Raise ServiceValidationError on number out of range exception ([@jbouwh] - [#114589])
+- Improve DeviceInfo for Total Connect ([@austinmroczek] - [#114509])
+- Bump uv to 0.1.27 ([@edenhaus] - [#114629])
+- Remove YAML configuration from Withings ([@joostlek] - [#114626])
+- Bump ruff to 0.3.5 ([@joostlek] - [#114634])
+- Clean up unnecessary setup calls in tests ([@balloob] - [#114644])
+- Fix Google translate TTS test race condition ([@edenhaus] - [#114656])
+- Add icon to command_line cover config ([@atlflyer] - [#114645])
+- Don't overwrite target temperature by setting hvac mode in AVM Fritz!SmartHome ([@jayme-github] - [#112119])
+- Fix Rpi_power test race condition ([@edenhaus] - [#114662])
+- Add typing to Roomba config flow ([@joostlek] - [#114624])
+- Azure DevOps integration tests ([@timmo001] - [#114577])
+- Add extra sensors to Swiss Public Transport ([@miaucl] - [#114636])
+- Refactor setup code in command_line ([@gjohansson-ST] - [#114661])
+- Add tests for Roomba Options flow ([@joostlek] - [#114666])
+- Remove old device tracker device cleanup code & test ([@pnbruckner] - [#114668])
+- Use is in enum comparison in config flow tests F-J ([@joostlek] - [#114670])
+- Add IMAP seen, move and delete service ([@jbouwh] - [#114501])
+- Use is in enum comparison in config flow tests U-Z ([@joostlek] - [#114677])
+- Bump solax to 3.1.0 ([@Darsstar] - [#114617])
+- Use is in enum comparison in config flow tests K-O ([@joostlek] - [#114672])
+- Use is in enum comparison in config flow tests P-T ([@joostlek] - [#114675])
+- Use is in enum comparison in config flow tests A-E ([@joostlek] - [#114669])
+- Bump yalexs to 3.0.1 ([@bdraco] - [#114678])
+- Small speed ups to ambient_station ([@bdraco] - [#114698])
+- Small speed up to starting and stopping cloud ([@bdraco] - [#114696])
+- Reduce code for registry items with a base class ([@bdraco] - [#114689])
+- Add service homeworks.send_command ([@emontnemery] - [#114059])
+- Bump Wandalen/wretry.action from 3.0.0 to 3.0.1 (@dependabot - [#114714])
+- Migrate homeassistant_sky_connect to use eager_start for tasks ([@bdraco] - [#114706])
+- Use FlowResultType enum in config flow tests A-M ([@joostlek] - [#114681])
+- Simplify homekit_controller cache clear ([@bdraco] - [#114692])
+- Use FlowResultType enum in config flow tests N-Z ([@joostlek] - [#114682])
+- Use eager_start to load utility_meter platforms ([@bdraco] - [#114699])
+- Fix synology_dsm test side effects ([@edenhaus] - [#114722])
+- Avoid useless done check in config entries async_create_task ([@bdraco] - [#114695])
+- Migrate legacy device_tracker task creation to use eager_start ([@bdraco] - [#114703])
+- Simplify core state cache clear ([@bdraco] - [#114694])
+- Simplify config entry cache clear ([@bdraco] - [#114691])
+- Use eager_start to create async_update_alerts task in homeassistant_alerts ([@bdraco] - [#114707])
+- Create bond fallback polling tasks eagerly ([@bdraco] - [#114705])
+- Make creation of capabilities_updated_at deque in Entity lazy ([@bdraco] - [#114711])
+- Migrate sabnzbd to use data update coordinator ([@jpbede] - [#114745])
+- Replace pytest-test-groups by custom tests splitter ([@edenhaus] - [#114381])
+- Revert the logger level in the Shelly update platform ([@bieniu] - [#114749])
+- Fix CI after splitting tests ([@edenhaus] - [#114754])
+- Add wake on LAN via Fritz!Box for tracked devices ([@chrisbraucker] - [#106778])
+- Correct imap services setup ([@jbouwh] - [#114760])
+- Use eager_start to forward wemo config entry platforms ([@bdraco] - [#114702])
+- Rework update_data starlink coordinator ([@Fexiven] - [#114642])
+- Dispatch the same ReceiveMessage object if the subscription topic is the same ([@bdraco] - [#114769])
+- Improve performance of extracting entities by label ([@bdraco] - [#114720])
+- Load mailbox integration platforms in tracked tasks ([@bdraco] - [#114774])
+- Add index for area/config_entry/label to the device registry ([@bdraco] - [#114776])
+- Adjust async_load_platform comment to remove dead lock reference ([@bdraco] - [#114771])
+- Avoid executor job to start http if server_host is unspecified ([@bdraco] - [#114609])
+- Speed up logger setup ([@bdraco] - [#114610])
+- Bump Wandalen/wretry.action from 2.1.0 to 3.0.1 (@dependabot - [#114805])
+- Avoid linear search of the device registry in deconz ([@bdraco] - [#114803])
+- Add index for floor/label to the area registry ([@bdraco] - [#114777])
+- Avoid linear search in traccar to find devices ([@bdraco] - [#114817])
+- Load template platforms with eager_start ([@bdraco] - [#114701])
+- Load mobile_app notify platform with eager_start ([@bdraco] - [#114700])
+- Remove unnecessary functools.cached_property backport ([@cdce8p] - [#114239])
+- Avoid linear search in hassio to find devices ([@bdraco] - [#114806])
+- Avoid linear search in homekit to find devices ([@bdraco] - [#114808])
+- Avoid linear search in ibeacon to find devices ([@bdraco] - [#114809])
+- Avoid linear search in purpleair to find devices ([@bdraco] - [#114816])
+- Avoid linear search in ps4 to find devices ([@bdraco] - [#114814])
+- Ensure async_test_home_assistant is passed a str in storage tests ([@bdraco] - [#114813])
+- Improve generic event typing [rfxtrx] ([@cdce8p] - [#114733])
+- Avoid linear search to clear a config entry in the device registry ([@bdraco] - [#114802])
+- Avoid linear search in owntracks to find devices ([@bdraco] - [#114812])
+- Avoid linear search in geofency to find devices ([@bdraco] - [#114810])
+- Avoid linear search in gpslogger to find devices ([@bdraco] - [#114811])
+- Use EventStateChangedData type when firing state changed event ([@cdce8p] - [#114740])
+- Add "conversation" key to translations ([@synesthesiam] - [#114887])
+- Validate unique_id in entity registry ([@emontnemery] - [#114648])
+- Fix Sonos Tests failing intermittently on CI ([@PeteRager] - [#114873])
+- Address late review comments on homeworks PRs ([@emontnemery] - [#114867])
+- Migrate more sonos tasks to use eager_start ([@bdraco] - [#114697])
+- Update import for EventStateChangedData [i-z] ([@cdce8p] - [#114900])
+- Update import for EventStateChangedData [a-h] ([@cdce8p] - [#114899])
+- Bump hass-nabucasa from 0.79.0 to 0.80.0 ([@ludeeus] - [#114818])
+- Always run keyed event trackers immediately ([@bdraco] - [#114709])
+- Avoid timestamp conversion in core State when equal to last_updated ([@bdraco] - [#114911])
+- Use is in FlowResultType enum comparison in tests ([@epenet] - [#114917])
+- Bump Wandalen/wretry.action from 3.0.1 to 3.1.0 (@dependabot - [#114916])
+- Update `person` to use `_attr_*` and thus cached properties ([@jpbede] - [#114590])
+- Use is in ConfigEntryState enum comparison in tests (A-M) ([@epenet] - [#114925])
+- Bump python-MotionMount to 1.0.0 ([@RJPoelstra] - [#114945])
+- Include serial number in HomeKit device info ([@ashottonoyan] - [#114688])
+- Use is in ConfigEntryState enum comparison in tests (N-Z) ([@epenet] - [#114926])
+- SIngle entry for Fastdotcom ([@erwindouna] - [#114963])
+- Add new OUI for Axis products ([@bengtsir] - [#114923])
+- Allow single entry in Downloader ([@joostlek] - [#114957])
+- Start async_schedule_update_ha_state task eagerly ([@bdraco] - [#114704])
+- Make config flow imports consistent ([@joostlek] - [#114962])
+- Add current_humidity to Ecobee humidifier ([@bjpetit] - [#114753])
+- Run storage final write listener immediately ([@bdraco] - [#114976])
+- Run device_registry stop listener immediately ([@bdraco] - [#114978])
+- Avoid useless stat() syscalls for every logger record ([@bdraco] - [#114987])
+- Make run_immediately the default for core EventBus listeners ([@bdraco] - [#113752])
+- Migrate torque to use async platform setup ([@bdraco] - [#114994])
+- Improve performance of system_log traceback handling ([@bdraco] - [#114992])
+- Switch configurator to use async_run_hass_job ([@bdraco] - [#114993])
+- Switch to using the AsyncResolver with aiohttp ([@bdraco] - [#114529])
+- Brand name typo in swiss_public_transport ([@lunmay] - [#115000])
+- Add Swing Mode Feature to Modbus integration ([@crug80] - [#113710])
+- Enable Ruff RET504 ([@autinerd] - [#114528])
+- Bump ring_doorbell to 0.8.10 ([@sdb9696] - [#114865])
+- Migrate generic_hygrostat to use async_track_state_change_event ([@bdraco] - [#115001])
+- Migrate proximity to use async_track_state_change_event ([@bdraco] - [#115002])
+- Move Color extractor service to async_setup ([@joostlek] - [#115013])
+- Update glances-api to 0.6.0 ([@wittypluck] - [#114929])
+- Update aioairzone-cloud to v0.5.0 ([@Noltari] - [#114928])
+- Fix placeholder quotes ([@oyvindwe] - [#114974])
+- Improve generic event typing [voip] ([@cdce8p] - [#114738])
+- Improve generic event typing [cloud] ([@cdce8p] - [#114728])
+- Improve generic event typing [conversation] ([@cdce8p] - [#114729])
+- Improve generic event typing [device_tracker] ([@cdce8p] - [#114730])
+- Fix ruff error ([@joostlek] - [#115023])
+- Improve generic event typing [tasmota] ([@cdce8p] - [#114737])
+- Improve generic event typing [EventComponentLoaded] ([@cdce8p] - [#114739])
+- Improve generic event typing [mqtt_statestream] ([@cdce8p] - [#114732])
+- Improve generic event typing [google_pubsub] ([@cdce8p] - [#114731])
+- Update typing extensions to 4.11.0 ([@cdce8p] - [#114985])
+- Refactor Vilfo tests ([@joostlek] - [#115020])
+- Sort coveragerc again ([@joostlek] - [#115017])
+- Add adax on/off functionality for local heaters ([@larsvinc] - [#114557])
+- Deprecate aux heat from Honeywell ([@mkmer] - [#114110])
+- Correct typo in IMAP translation ([@jbouwh] - [#115032])
+- Make eager_start default to True for async_create_task ([@bdraco] - [#114995])
+- Correct changes hassfest coverage backports ([@jbouwh] - [#115044])
+- Improve generic event typing [recorder] ([@cdce8p] - [#114736])
+- Make eager_start default to True for async_create_background_task ([@bdraco] - [#114996])
+- Make eager_start default to True for config entry async_create_background_task ([@bdraco] - [#115050])
+- Make eager_start default to True for config entry async_create_task ([@bdraco] - [#115047])
+- Update aioairzone-cloud to v0.5.1 ([@Noltari] - [#115029])
+- Remove @StevenLooman from dlna_dmr codeowners ([@StevenLooman] - [#115028])
+- Update Ambient Weather to include Lightning Strike Time and Distance ([@strawgate] - [#114255])
+- Add reconfigure step for waze_travel_time ([@eifinger] - [#114885])
+- Add Glances DiskIO read/write sensors ([@wittypluck] - [#114933])
+- Migrate start helper to use run_immediately ([@bdraco] - [#115055])
+- Bump aiolifx to 1.0.2 and aiolifx-themes to 0.4.15 ([@Djelibeybi] - [#115059])
+- Fix sonos switch test failures ([@PeteRager] - [#115052])
+- Fix flakey cast discovery test ([@bdraco] - [#115063])
+- Deprecated old backports and typing aliases ([@cdce8p] - [#114883])
+- Remove prepare override in HomeAssistantQueueHandler ([@bdraco] - [#115064])
+- Use identity checks for EntityPlatformState enum ([@bdraco] - [#115067])
+- Improve registry store data typing ([@cdce8p] - [#115066])
+- Fix flakey tests using the _get_diagnostics_for_config_entry helper ([@bdraco] - [#115069])
+- Simplify invalidating the User cache ([@bdraco] - [#115074])
+- Add snapshot tests to Bluemaestro ([@joostlek] - [#115094])
+- Add more base entities to netatmo ([@joostlek] - [#107862])
+- Enable entities in Netatmo snapshot test ([@joostlek] - [#115105])
+- Add GPU sensor to Glances ([@fhoekstra] - [#106322])
+- Add Water Heater support for Airzone Cloud ([@Noltari] - [#115097])
+- Add device removal capability for Netatmo ([@cgtobi] - [#107630])
+- Add an event filter to the alexa state report state change listener ([@bdraco] - [#115076])
+- Add entity translations to Bluemaestro ([@joostlek] - [#102424])
+- Add Glances network sensors ([@wittypluck] - [#114546])
+- Correct duplicate word in IMAP translations ([@jbouwh] - [#115132])
+- Remove Color extractor import flow ([@joostlek] - [#115015])
+- Add first batch of Ruff PYI rules ([@autinerd] - [#115100])
+- Add additional Sonos integration code-owner ([@PeteRager] - [#115157])
+- Add improved typing for event fire and listen methods ([@cdce8p] - [#114906])
+- Bump pyoverkiz to 1.13.10 ([@iMicknl] - [#115154])
+- Fix flakey fritz image test ([@bdraco] - [#115161])
+- Bump fibaro to 0.7.7 ([@rappenze] - [#115152])
+- Deprecate async_add_hass_job ([@bdraco] - [#115061])
+- Add an event_filter to google_assistant state reporting ([@bdraco] - [#115160])
+- Migrate matrix to use run_immediately for start listener ([@bdraco] - [#115167])
+- Switch async_track_state_change to use run_immediately ([@bdraco] - [#115164])
+- Remove remaining run_immediately=False from tests ([@bdraco] - [#115168])
+- Improve microBees code quality ([@FedDam] - [#114939])
+- Address late review of TP-Link Omada ([@MarkGodwin] - [#115121])
+- Refactor BMW entity availability ([@rikroe] - [#110294])
+- Add reauth to Teslemetry ([@Bre77] - [#114726])
+- Add IMAP fetch service ([@jbouwh] - [#115127])
+- Bump github/codeql-action from 3.24.9 to 3.24.10 (@dependabot - [#115179])
+- Update build system dependencies ([@cdce8p] - [#115102])
+- Remove condition from ecobee humidifier attribute test ([@jbouwh] - [#115197])
+- Fix Downloader test cases and error title ([@erwindouna] - [#114847])
+- Enable Ruff PGH rules ([@autinerd] - [#115091])
+- Enable Ruff INP001 ([@autinerd] - [#115082])
+- Add Arve integration ([@ikalnyi] - [#113156])
+- Add migration logic to assist_pipeline ([@balloob] - [#115172])
+- Add sensor for CPU and memory utilization for unifi device ([@kimdv] - [#114986])
+- Add config message items selector to imap option flow ([@luca-angemi] - [#115108])
+- Change scan interval for Husqvarna Automower ([@Thomas55555] - [#115225])
+- Always include old_state in EventStateChangedData [tests] ([@cdce8p] - [#115098])
+- Use EventType for system events ([@cdce8p] - [#115190])
+- Use EventType for remaining registry events ([@cdce8p] - [#115189])
+- Use EventType for device_registry_updated ([@cdce8p] - [#115188])
+- Migrate rfxtrx to use run_immediately=True for the device registry listener ([@bdraco] - [#115165])
+- Add `__slots__` to NodeClass classes ([@autinerd] - [#115079])
+- Use EventType for entity_registry_updated ([@cdce8p] - [#115187])
+- Remove @skgsergio from foscam and qingping codeowners ([@skgsergio] - [#115210])
+- Enable Ruff PYI036 ([@autinerd] - [#115228])
+- Enable Ruff PYI041 ([@autinerd] - [#115229])
+- Add a service to get maps for Roborock ([@Lash-L] - [#111478])
+- Deprecate calling async_listen and async_listen_once with run_immediately ([@bdraco] - [#115169])
+- Fix failing escea test in connection with greeneye_monitor ([@jpbede] - [#115237])
+- Increase discovery flow init concurrency limit to 20 ([@bdraco] - [#115230])
+- Migrate group to use shorthand attributes for name and icon ([@bdraco] - [#115244])
+- Improve recorder event typing ([@cdce8p] - [#115253])
+- Add tests to Home Connect integration ([@beastie29a] - [#114214])
+- Bump ring_doorbell library to 0.8.11 ([@sdb9696] - [#115263])
+- Wrap tplink exceptions caused by user actions inside HomeAssistantError ([@sdb9696] - [#114919])
+- Remove Epson Workforce integration ([@joostlek] - [#115201])
+- Update and migrate ring non string unique ids ([@sdb9696] - [#115265])
+- Add additional Vital 100S model to vesync ([@pleum] - [#113838])
+- Remove pip jemalloc config from dockerfile ([@konstin] - [#115206])
+- Send/receive Voice Assistant audio via ESPHome native API ([@jesserockz] - [#114800])
+- Add OpenAI conversation entity ([@balloob] - [#114942])
+- Remove Twitch YAML import ([@joostlek] - [#115278])
+- Remove Nextbus YAML import ([@joostlek] - [#115277])
+- Migrate hyperion to use async_update_reload_and_abort ([@bdraco] - [#115238])
+- Use shorthand attributes in automation for name ([@bdraco] - [#115246])
+- Migrate script entities to use more shorthand attrs ([@bdraco] - [#115245])
+- Optimize _async_track_event for the single key common case ([@bdraco] - [#115242])
+- Migrate elkm1 to use async_schedule_reload ([@bdraco] - [#115240])
+- Migrate apple_tv to use async_schedule_reload ([@bdraco] - [#115241])
+- Improve error reporting when an integration tries to create a task in a thread ([@bdraco] - [#115307])
+- Bump codecov/codecov-action to v4.3.0 ([@jpbede] - [#115317])
+- Bump python-roborock to 1.0.0 ([@Lash-L] - [#115324])
+- Use dict instead of MutableMapping [extra_state_attributes] ([@cdce8p] - [#115319])
+- Use dict instead of MutableMapping [recorder] ([@cdce8p] - [#115318])
+- Fix flakiness of test_measure_sliding_window ([@cpfair] - [#115322])
+- Enable Ruff SLOT rules ([@autinerd] - [#115043])
+- Add entity translations to Netatmo ([@joostlek] - [#115104])
+- Enable Ruff RUF013 ([@autinerd] - [#115333])
+- Update pytest-xdist to 3.5.0 ([@cdce8p] - [#111266])
+- Add documentation link for custom integrations in diagnostics ([@ludeeus] - [#115336])
+- Stop scripts with eager tasks ([@bdraco] - [#115340])
+- Add missing oauth2 error strings to myuplink ([@astrandb] - [#115315])
+- Fix type on known_object_ids in _entity_id_available and async_generate_entity_id ([@bdraco] - [#115378])
+- Fix zha test by tweaking the log level ([@jbouwh] - [#115368])
+- Fix flakey tessie media_player test ([@bdraco] - [#115391])
+- Fix duplicate automation entity state writes ([@bdraco] - [#115386])
+- Avoid calling valid_entity_id when adding entities if they are already registered ([@bdraco] - [#115388])
+- Adjust importlib helper to avoid leaking memory on re-raise ([@bdraco] - [#115377])
+- Add PYTHONASYNCIODEBUG to the dev container env ([@bdraco] - [#115392])
+- Add binary sensor to Netatmo ([@joostlek] - [#115119])
+- Use freezer on diagnostics test ([@jbouwh] - [#115398])
+- Add strict typing to ring integration ([@sdb9696] - [#115276])
+- Make ring device generic in RingEntity ([@sdb9696] - [#115406])
+- Add notify entity component ([@jbouwh] - [#110950])
+- Reduce scope of diagnostics tests for rtsp_to_webrtc to not depend on global state ([@allenporter] - [#115422])
+- Fix Codecov upload with token ([@TheJulianJES] - [#115384])
+- Convert async_setup calls for auth sub-modules to callback functions ([@bdraco] - [#115443])
+- Update pytest warnings filter ([@cdce8p] - [#115275])
+- Use library classes instead of namedtuple in ipma tests ([@autinerd] - [#115372])
+- Fix flakey mobile app webhook test ([@bdraco] - [#115447])
+- Bump python-roborock to 2.0.0 ([@Lash-L] - [#115449])
+- Fix flakey influxdb test ([@bdraco] - [#115442])
+- Add py.typed file ([@cdce8p] - [#115446])
+- Improve FlowHandler menu_options typing ([@cdce8p] - [#115296])
+- Bypass ConfigEntry __setattr__ in __init__ ([@bdraco] - [#115405])
+- Avoid falling back to event loop import on ModuleNotFound ([@bdraco] - [#115404])
+- Use enum device class in Netatmo wind direction ([@joostlek] - [#115413])
+- Use enum device class in Netatmo health index sensor ([@joostlek] - [#115409])
+- Enable Ruff FLY002 rule ([@autinerd] - [#115112])
+- Switch imap push coordinator to use eager_start ([@bdraco] - [#115454])
+- Add service schema tests for notify entity platform ([@jbouwh] - [#115457])
+- Fix ci Python cache key ([@cdce8p] - [#115467])
+- Add strict connection ([@edenhaus] - [#112387])
+- Bump ruff to 0.3.7 ([@autinerd] - [#115451])
+- Ignore coverage for aiohttp_resolver backport helper ([@epenet] - [#115177])
+- Add diagnostics to Teslemetry ([@Bre77] - [#115195])
+- Allow customizing display name for energy device ([@karwosts] - [#112834])
+- Add re-auth-flow to fyta integration ([@dontinelli] - [#114972])
+- Update strict connection static page ([@bramkragten] - [#115473])
+- Set Ruff RUF001-003 to ignore ([@autinerd] - [#115477])
+- Remove eager_start=False from zeroconf ([@bdraco] - [#115498])
+- Move out demo notify tests to the notify platform ([@jbouwh] - [#115504])
+- Fix race in influxdb test ([@bdraco] - [#115514])
+- Ignore Ruff RUF015 ([@autinerd] - [#115481])
+- Enable Ruff RUF018 ([@autinerd] - [#115485])
+- Isolate legacy notify tests ([@jbouwh] - [#115470])
+- Add Balboa spa temperature range state control (high/low) ([@kotope] - [#115285])
+- Revert mypy_config formatting ([@cdce8p] - [#115518])
+- Make legacy notify group tests independent of demo platform ([@jbouwh] - [#115494])
+- Make color extractor single config entry ([@joostlek] - [#115016])
+- Migrate demo notify platform ([@jbouwh] - [#115448])
+- Set up notify group with the notify services in test ([@jbouwh] - [#115526])
+- Remove unused CI code ([@edenhaus] - [#115300])
+- Bump py-synologydsm-api to 2.4.2 ([@bdraco] - [#115499])
+- Avoid removing websocket_api subscription in mobile_app teardown ([@bdraco] - [#115540])
+- Hold the reload lock while attempting config entry setup retry ([@bdraco] - [#115538])
+- Migrate homekit ffmpeg task to use eager_start ([@bdraco] - [#115543])
+- Migrate EntityRegistryDisabledHandler to use async_schedule_reload ([@bdraco] - [#115544])
+- Fix unmocked remote socket calls in sunweg tests ([@bdraco] - [#115546])
+- Add forecast subscription failure test case to nws ([@bdraco] - [#115541])
+- Update ollama config_flow task to use eager_start ([@bdraco] - [#115455])
+- Enable eager_start for weather platform update ([@bdraco] - [#115496])
+- Ensure test async_create_task eager start behavior matches production ([@bdraco] - [#115517])
+- Complete ESPHome media_player coverage ([@bdraco] - [#114352])
+- Add additional cached_property to camera entities ([@bdraco] - [#115075])
+- Fix advantage_air disabled entity tests ([@bdraco] - [#115548])
+- Add exception translations to Bring integration ([@tr4nt0r] - [#115547])
+- Only calculate native_value once in mobile_app ([@bdraco] - [#115550])
+- Avoid double dict conversion in bluetooth serialize_entity_description ([@bdraco] - [#115551])
+- Migrate config entry reauth to use eager_start ([@bdraco] - [#115549])
+- Remove sleep in async_setup_component ([@bdraco] - [#115515])
+- Remove attr usage in event helper ([@bdraco] - [#115554])
+- Refactor _async_setup_component to remove need for C901 ([@bdraco] - [#115553])
+- Migrate rfxtrx to use async_track_state_change_event ([@bdraco] - [#115556])
+- Fix missing Home in listener deprecation message ([@bdraco] - [#115559])
+- Enable Ruff B905 ([@autinerd] - [#114197])
+- Unignore Ruff E731 ([@autinerd] - [#115564])
+- Unignore Ruff UP006, UP007 ([@autinerd] - [#115533])
+- Remove unused legacy state translations ([@bdraco] - [#112023])
+- Bump aioshelly to 9.0.0 ([@thecode] - [#114025])
+- For new installs make enphase_envoy phase entities default disabled ([@catsmanac] - [#115577])
+- Replace lambda by attrgetter in enphase_envoy platform value_fn ([@catsmanac] - [#115569])
+- Small cleanups to script ([@bdraco] - [#115565])
+- Only calculate the tplink emeter values once per update cycle ([@bdraco] - [#115587])
+- Move Alexa entity id generation into abstract config class ([@mback2k] - [#115593])
+- Set follow_imports to normal [mypy] ([@cdce8p] - [#115521])
+- Bump soco to 0.30.3 ([@PeteRager] - [#115607])
+- Bump emulated-roku to 0.3.0 to fix Sofabaton Support ([@shawnweeks] - [#115452])
+- Fix flaky zwave update entity delay test ([@bdraco] - [#115552])
+- Small cleanups to the rate limit helper ([@bdraco] - [#115621])
+- Set platform for mypy ([@cdce8p] - [#115638])
+- Bump vacuum-map-parser-roborock to 0.1.2 ([@Lash-L] - [#115579])
+- Avoid update calls in state writes when attributes are empty ([@bdraco] - [#115624])
+- Migrate websocket_api sensor to use shorthand attrs ([@bdraco] - [#115620])
+- Make aiohttp_cors a top level import ([@bdraco] - [#115563])
+- Update switchbot_api to 2.1.0 ([@miterion] - [#115529])
+- Create base class for Rachio smart hose timer entities ([@brg468] - [#115475])
+- Enable Ruff B017 ([@autinerd] - [#115335])
+- Remove pihole codeowner ([@johnluetke] - [#110384])
+- Remove cloud dependency from `islamic-prayer-times` ([@cpfair] - [#115146])
+- Small speed up to async_prepare_setup_platform ([@bdraco] - [#115662])
+- Add dataclass to store AdGuard data ([@cdce8p] - [#115668])
+- Fix typo in modbus integration strings.json ([@theminer3746] - [#115685])
+- Move Insteon configuration panel to config entry ([@teharris1] - [#105581])
+- New BMW sensor for climate activity ([@brave0d] - [#110287])
+- Add Config Flow to LG Netcast ([@splinter98] - [#104913])
+- Add a new "Ambient Weather Network" integration ([@thomaskistler] - [#105779])
+- Fix ambient network test linting ([@MartinHjelmare] - [#115691])
+- Remove Adafruit-BBIO from commented requirements ([@MartinHjelmare] - [#115689])
+- Bump github/codeql-action from 3.24.10 to 3.25.0 (@dependabot - [#115686])
+- Don't reload other automations when saving an automation ([@emontnemery] - [#80254])
+- Add extract media url service to media extractor ([@joostlek] - [#100780])
+- Add select hold to AppleTVs remote entity as possible command ([@myMartek] - [#105764])
+- Correct spelling of "Wi-Fi" in devolo_home_network ([@Shutgun] - [#106167])
+- Add Sound Mode selection in soundpal components ([@BestPig] - [#106589])
+- Unsupported if wrong image used on virtualization ([@mdegat01] - [#113882])
+- Fix check for missing parts on incoming SMS ([@Mallonbacka] - [#105068])
+- Correct unit for total usage in rfxtrx ([@elupus] - [#115719])
+- Use separate data coordinators for AccuWeather observation and forecast ([@bieniu] - [#115628])
+- Bump habluetooth to 2.5.2 ([@bdraco] - [#115721])
+- Bump aioesphomeapi to 24.1.0 ([@jesserockz] - [#115729])
+- Fix stale comment in wheels.yml ([@emontnemery] - [#115736])
+- Multiple data disks detected: tweak strings ([@c0ffeeca7] - [#115713])
+- Bump orjson to 3.10.1 ([@bdraco] - [#115728])
+- Remove stale packages from uncommenting when building wheels ([@emontnemery] - [#115700])
+- Correct normalize_package_name ([@emontnemery] - [#115750])
+- Remove useless any in gen_requirements_all.comment_requirement ([@emontnemery] - [#115751])
+- Fix hassfest requirements check ([@emontnemery] - [#115744])
+- Keep track of top level components ([@bdraco] - [#115586])
+- Improve standard library violation check in hassfest ([@emontnemery] - [#115752])
+- Add Sanix integration ([@tomaszsluszniak] - [#106785])
+- Fix flaky qld_bushfire test ([@emontnemery] - [#115757])
+- Add config flow to enigma2 ([@autinerd] - [#106348])
+- Avoid linear search to remove labels and floors from area registry ([@bdraco] - [#115675])
+- Avoid linear search to clear labels and areas in the device registry ([@bdraco] - [#115676])
+- Avoid linear search to remove a label from the entity registry ([@bdraco] - [#115674])
+- Reduce duplicate code in the device registry ([@bdraco] - [#115677])
+- Add repairs to hassio manifest ([@mdegat01] - [#115486])
+- Remove obsolete translation keys in Sanix ([@joostlek] - [#115764])
+- Include hash of requirements.txt in venv cache key ([@emontnemery] - [#115759])
+- Bump habluetooth to 2.6.0 ([@bdraco] - [#115724])
+- Simplify config_entries entity registry filter ([@bdraco] - [#115678])
+- Add secondary temperature sensor for DHW in ViCare ([@CFenner] - [#106612])
+- Allow selecting Air Quality mode for Airzone Cloud ([@Noltari] - [#106769])
+- Use aiohttp-zlib-ng[isal] ([@emontnemery] - [#115767])
+- Fix unrecoverable error when fetching airthings_ble data ([@LaStrada] - [#115699])
+- Cleanup modbus test mocks ([@janiversen] - [#115412])
+- Guard negative values for IPP states ([@isXander] - [#107446])
+- Replace aiohttp-zlib-ng[isal] with aiohttp-isal ([@bdraco] - [#115777])
+- Add mqtt notify platform ([@jbouwh] - [#115653])
+- Address late reviews for the enigma2 config flow ([@autinerd] - [#115768])
+- Add sanix sensor tests ([@joostlek] - [#115763])
+- Bump google-nest-sdm to 3.0.4 ([@allenporter] - [#115731])
+- Simplify labels and areas template calls ([@bdraco] - [#115673])
+- Bump Broadlink to 0.19.0 ([@felipediel] - [#115742])
+- Migrate snooze config flow to use eager_start ([@bdraco] - [#115658])
+- Bump habluetooth to 2.7.0 ([@bdraco] - [#115783])
+- Bump bluetooth-auto-recovery to 1.4.1 ([@bdraco] - [#115792])
+- Add valve entity support for ESPHome ([@kbx81] - [#115341])
+- Fix failing sanix tests ([@bdraco] - [#115793])
+- Bump github/codeql-action from 3.25.0 to 3.25.1 (@dependabot - [#115796])
+- Bump connect-box to 0.3.1 ([@krzysztof-kwitt] - [#107852])
+- Ambient Weather: Check for key existence before checking value ([@strawgate] - [#115776])
+- Add script to compare alexa locales with upstream ([@MartinHjelmare] - [#114247])
+- Handle connection error in honeywell ([@mkmer] - [#108168])
+- Add state class to mobile_app restore entity ([@luca-angemi] - [#115798])
+- Add diagnostics platform to DSMR Reader ([@erwindouna] - [#115805])
+- Translate service validation errors ([@jbouwh] - [#115024])
+- Clarify cover toggle logic; prevent opening when already open ([@vexofp] - [#107920])
+- Add support for payload_template in rest component ([@ptashek] - [#107464])
+- Add hvac_action attribute to iAqualink Thermostat climate entities ([@mwielgoszewski] - [#107803])
+- Bump arris-tg2492lg to 2.2.0 ([@vanbalken] - [#107905])
+- Bump habluetooth to 2.8.0 ([@bdraco] - [#115789])
+- Add bluetooth adapter model and manufacturer to config flow ([@bdraco] - [#115780])
+- Add reauth support to oncue ([@bdraco] - [#115667])
+- Skip processing websocket_api schema if it has no arguments ([@bdraco] - [#115618])
+- Small cleanups to translation loading ([@bdraco] - [#115583])
+- Migrate device_sun_light_trigger to use async_track_state_change_event ([@bdraco] - [#115555])
+- Deprecate async_track_state_change in favor of async_track_state_change_event ([@bdraco] - [#115558])
+- Add battery binary sensor to Rachio hose timer ([@brg468] - [#115810])
+- Add zhimi.fan.za3 to xiaomi_miio workaround unable to discover device ([@orevron] - [#108310])
+- Add support for room sensor accessories assigned to a Honeywell (Lyric) Thermostat ([@dalinicus] - [#104343])
+- Handle Bluetooth adapters in a crashed state ([@bdraco] - [#115790])
+- Bump yolink-api to 0.4.3 ([@matrixd2] - [#115794])
+- Bump `accuweather` to version 3.0.0 ([@bieniu] - [#115820])
+- Add get_torrents service to qBittorrent integration ([@finder39] - [#106501])
+- Show default profiles in homematic cloud climate entity ([@hahn-th] - [#107348])
+- Bump aiodiscover to 2.1.0 ([@bdraco] - [#115823])
+- Bump actions/upload-artifact from 4.3.1 to 4.3.2 (@dependabot - [#115842])
+- Bump actions/download-artifact from 4.1.4 to 4.1.5 (@dependabot - [#115841])
+- Add group tests with mixed domain entities ([@jbouwh] - [#115849])
+- Bump `gios` to version 4.0.0 ([@bieniu] - [#115822])
+- Add reauth flow to Google Tasks ([@joostlek] - [#109517])
+- Fix mutable objects in group registry class ([@jbouwh] - [#115797])
+- Bump `nextdns` to version 3.0.0 ([@bieniu] - [#115854])
+- Bump `nettigo_air_monitor` to version 3.0.0 ([@bieniu] - [#115853])
+- Bump bluetooth-adapters to 0.19.0 ([@bdraco] - [#115864])
+- Automatic cleanup of entity and device registry in AVM FRITZ!SmartHome ([@mib1185] - [#114601])
+- Use snapshot testing in NextDNS ([@bieniu] - [#115879])
+- Use snapshot testing in GIOS sensor ([@bieniu] - [#115876])
+- Use snapshot testing in Brother sensor ([@bieniu] - [#115875])
+- Use snapshot testing in NAM sensor and diagnostics ([@bieniu] - [#115877])
+- Bump pylitterbot to 2023.5.0 ([@natekspencer] - [#115856])
+- Add test helper to snapshot a platform ([@joostlek] - [#115880])
+- Use snapshot test helper in Brother ([@joostlek] - [#115885])
+- Use snapshot test helper in Accuweather ([@joostlek] - [#115884])
+- Use snapshot test helper in GIOS ([@bieniu] - [#115893])
+- Use snapshot test helper in NAM ([@bieniu] - [#115894])
+- Use snapshot test helper in NextDNS ([@bieniu] - [#115895])
+- Fix Wolf Smart Set Authentication and Session Management ([@mtielen] - [#115815])
+- Use snapshot test helper in AO Smith ([@joostlek] - [#115890])
+- Make release channel a hardcoded enum rather than a free form string ([@albertomontesg] - [#115595])
+- Use snapshot test helper in Analytics insights ([@joostlek] - [#115889])
+- Use snapshot test helper in Ambient Network ([@joostlek] - [#115887])
+- Bump ruff to 0.4.1 ([@autinerd] - [#115873])
+- Add tls support for AVM Fritz!Tools ([@r-binder] - [#112714])
+- Fix flaky history stats test ([@bdraco] - [#115824])
+- Fix Roborock status not correctly mapping for some devices ([@Lash-L] - [#115646])
+- Improve debug logging for evohome ([@zxdavb] - [#110256])
+- Add test for prometheus export of entities becoming unavailable and available again ([@agoode] - [#112157])
+- Improve service validation exception test and translation key ([@jbouwh] - [#115843])
+- Allow manual delete of stale Unifi device from UI ([@wittypluck] - [#115267])
+- Refactor Totalconnect binary sensor ([@joostlek] - [#115629])
+- Remove sensor exposing UniFi WLAN password ([@Kane610] - [#115929])
+- Bump total_connect_client to 2023.12.1 ([@austinmroczek] - [#115928])
+- Add error translations to Blink ([@mkmer] - [#115924])
+- Make use of snapshot testing in Synology DSM ([@mib1185] - [#115931])
+- Convert MQTT to use asyncio ([@bdraco] - [#115910])
+- Temporarily pickup mqtt codeowner ([@bdraco] - [#115934])
+- Enable Ruff A001 ([@autinerd] - [#115654])
+- Introduce base entity for totalconnect ([@joostlek] - [#115936])
+- Add optional location based region to dwd_weather_warnings ([@andarotajo] - [#96027])
+- Add type hints in fibaro device ([@rappenze] - [#106874])
+- Refactor fibaro connect ([@rappenze] - [#106875])
+- Bump actions/checkout from 4.1.2 to 4.1.3 (@dependabot - [#115945])
+- Add Epic Games Store integration ([@Quentame] - [#104725])
+- Bump aioesphomeapi to 24.2.0 ([@jesserockz] - [#115943])
+- Introduce base location entity for totalconnect ([@joostlek] - [#115938])
+- Move NextDNS data update coordinators to the coordinator module ([@bieniu] - [#115919])
+- Update ovoenergy to 2.0.0 ([@timmo001] - [#115921])
+- Add snapshot tests to Totalconnect ([@joostlek] - [#115952])
+- ESPHome: Add datetime entities ([@jesserockz] - [#115942])
+- Address late review for AVM Fritz!Smarthome ([@mib1185] - [#115960])
+- Reduce ecobee throttle ([@marcolivierarsenault] - [#115968])
+- Improve reliability of homeassistant_alerts updates ([@bdraco] - [#115974])
+- Small fixes for processing integration requirements ([@bdraco] - [#115973])
+- Remove YAML support from Hydrawise ([@dknowles2] - [#115966])
+- Generate requirements per supported architecture ([@emontnemery] - [#115708])
+- Revert "Reduce ecobee throttle (#115968)" ([@marcolivierarsenault] - [#115981])
+- Migrate MQTT EnsureJobAfterCooldown to use eager start ([@bdraco] - [#115977])
+- Make recorder.purge_entities require at least one entity filter value ([@karwosts] - [#110066])
+- Bump holidays to 0.47 ([@gjohansson-ST] - [#115992])
+- Add bandwidth sensor for unifi device ports ([@kimdv] - [#115362])
+- Bump aiounifi to v76 ([@Kane610] - [#116005])
+- Bump uv to 0.1.35 ([@edenhaus] - [#115985])
+- Add config flow to Folder Watcher ([@gjohansson-ST] - [#105605])
+- Update Hydrawise from the legacy API to the new GraphQL API ([@thomaskistler] - [#106904])
+- Add coordinator to 17Track ([@shaiu] - [#115057])
+- Bump actions/download-artifact from 4.1.4 to 4.1.6 (@dependabot - [#116017])
+- Bump actions/upload-artifact from 4.3.1 to 4.3.3 (@dependabot - [#116015])
+- Use generator expression in totalconnect ([@joostlek] - [#116020])
+- Improve Vodafone Station empty/unavailable phone number detection ([@myhomeiot] - [#115696])
+- Don't raise errors when using datetime objects in `as_datetime` Jinja function/filter ([@TheFes] - [#109062])
+- Deprecate modbus:restart service ([@janiversen] - [#115754])
+- Add uv version to wheels cache key [ci] ([@cdce8p] - [#116021])
+- Bump aioesphomeapi to 24.3.0 ([@jesserockz] - [#116004])
+- Add event platform to Lutron ([@joostlek] - [#109121])
+- Bump deebot-client to 7.0.0 ([@edenhaus] - [#116025])
+- Add number platform to Husqvarna Automower ([@Thomas55555] - [#115125])
+- Add additional zeroconf discovery coverage and logging to enphase_envoy ([@catsmanac] - [#114405])
+- Use location name on self hosted Ecovacs config entries ([@edenhaus] - [#115294])
+- Fix invalid tuple annotations ([@cdce8p] - [#116035])
+- Expose dynamic range status in Onkyo media player ([@Spacetech] - [#109099])
+- Velbus Cover: Assume state for VMBxBL modules ([@Cereal2nd] - [#109213])
+- Augment SyntaxError raised during dependency collection with offending filename ([@VolkerStolz] - [#109204])
+- Remove unnecessary type ignores ([@cdce8p] - [#116036])
+- Improve energy typing ([@cdce8p] - [#116034])
+- Use snapshot test helper in Husqvarna Automower ([@Thomas55555] - [#116039])
+- Bump python-fritzhome to 0.6.11 ([@mib1185] - [#115904])
+- Remove platform schema from Hydrawise ([@dknowles2] - [#116032])
+- Include libgammu-dev in devcontainer ([@emontnemery] - [#115983])
+- Add fan preset translations and icons to BAF ([@mill1000] - [#109944])
+- Allow plain text messages in telegram_bot ([@malkstar] - [#110051])
+- Bump mozart-api to 3.4.1.8.5 ([@mj23000] - [#113745])
+- Update pipdeptree to 2.17.0 ([@frenck] - [#116049])
+- Update coverage to 7.5.0 ([@frenck] - [#116048])
+- Pass the job type when setting up homekit state change listeners ([@bdraco] - [#116038])
+- Update requests_mock to 1.12.1 ([@frenck] - [#116050])
+- Breakout heartbeat monitor and poe command queue in UniFi ([@Kane610] - [#112529])
+- Add missing adapter data to Bluetooth config entry titles ([@bdraco] - [#115930])
+- Add entity translations to totalconnect ([@joostlek] - [#115950])
+- Deprecate Unify Circuit integration ([@jbouwh] - [#115528])
+- Convert solaredge to asyncio with aiosolaredge ([@bdraco] - [#115599])
+- Add Retry for C4 API due to flakiness ([@nalin29] - [#113857])
+- Add API scope checks to Teslemetry ([@Bre77] - [#113640])
+- Bump plugwise to v0.37.2 ([@bouwew] - [#115989])
+- Bump aioautomower to 2024.4.3 ([@Thomas55555] - [#114500])
+- Only work out job type once when setting up dispatcher ([@bdraco] - [#116030])
+- Fix ruff complaints in control4 ([@bdraco] - [#116058])
+- Add re-auth flow for MQTT broker username and password ([@jbouwh] - [#116011])
+- Rename bus._async_fire to bus.async_fire_internal ([@bdraco] - [#116027])
+- Add entity translations to 17track ([@joostlek] - [#116022])
+- Fix husqvarna_automower typing ([@bdraco] - [#116060])
+- Migrate legacy Ecobee notify service ([@jbouwh] - [#115592])
+- Update quality scale mqtt integration to platinum ([@jbouwh] - [#116059])
+- Complete test coverage for Tankerkonig ([@mib1185] - [#115920])
+- Bump github/codeql-action from 3.25.1 to 3.25.2 (@dependabot - [#116016])
+- Fix non-thread-safe operations in media_extractor ([@bdraco] - [#116065])
+- Add Event support to ESPHome components ([@nohat] - [#116061])
+- Fix non-thread-safe operation in harmony ([@bdraco] - [#116070])
+- Fix non-thread-safe operations in wake_on_lan ([@bdraco] - [#116069])
+- Fix non-thread-safe operations in html5 ([@bdraco] - [#116068])
+- Add debug mode to catch unsafe thread operations using core helpers ([@bdraco] - [#115390])
+- Always do thread safety checks when calling async_fire ([@bdraco] - [#116055])
+- Enable Ruff RUF019 ([@autinerd] - [#115396])
+- Migrate KNX notify service to entity platform ([@farmio] - [#115665])
+- Add reconfigure flow to AVM Fritz!Tools ([@mib1185] - [#116057])
+- Add OSO Energy sensors ([@osohotwateriot] - [#108226])
+- Use display_precision if suggested_display_precision is None ([@rikroe] - [#110270])
+- Bump deebot-client to 7.1.0 ([@edenhaus] - [#116082])
+- Small speed up to async_track_event ([@bdraco] - [#116083])
+- Add strict connection for cloud ([@edenhaus] - [#115814])
+- Bump plugwise to v0.37.3 ([@bouwew] - [#116081])
+- Always do thread safety checks when writing state for custom components ([@bdraco] - [#116044])
+- Ecobee preset mode icon translations ([@gagebenne] - [#116072])
+- Bump zha-quirks to 0.0.115 ([@TheJulianJES] - [#116071])
+- Fix iotawatt warnings about "Detected new cycle for sensor.{sensorname}_wh_last" ([@lyricnz] - [#115909])
+- Rename strict connection static page to guard page ([@edenhaus] - [#116085])
+- Fix accuweather system_health after data change ([@cdce8p] - [#116063])
+- Move thread safety check in async_register/async_remove ([@bdraco] - [#116077])
+- Deprecate relative_time() in favor of time_since() and time_until() ([@rlippmann] - [#111177])
+- Migrate discovery debouncer callback to async_fire_internal ([@bdraco] - [#116078])
+- Temporary CI workaround for broken microsoft ubuntu repo ([@bdraco] - [#116091])
+- Remove duplicate async_write_ha_state thread safety check ([@bdraco] - [#116086])
+- Enable debug mode if asyncio debug is on at startup ([@bdraco] - [#116084])
+- Add reconfigure flow to AVM Fritz!SmartHome ([@mib1185] - [#116047])
+- Remove microsoft apt package list before update ([@cdce8p] - [#116097])
+- Mark Tankerkoenig as Platinum 🏆 integration ([@mib1185] - [#115917])
+- Extend options for ecovacs lifespans ([@Augar] - [#116094])
+- Mask current password in MQTT option flow ([@jbouwh] - [#116098])
+- Deprecate speed limit lock in Tessie ([@Bre77] - [#113848])
+- Fix Sonos music library play problems ([@PeteRager] - [#113429])
+- Add service to 17track to get packages ([@shaiu] - [#116067])
+- Return specific group state if there is one ([@jbouwh] - [#115866])
+- Always reload after a successful reauth flow ([@jbouwh] - [#116026])
+- Update frontend to 20240424.1 ([@bramkragten] - [#116103])
+- Update goodwe library to 0.3.2 ([@mletenay] - [#115309])
+- Add binary sensor platform to romy integration ([@xeniter] - [#112998])
+- Refactor ESPHome manager to avoid sending signals in tests ([@bdraco] - [#116033])
+- Add nfandroidtv type checking and allow for strings to be passed to the image and icon data ([@miawgogo] - [#108652])
+- Cancel timer on enphase_envoy config entry unload ([@catsmanac] - [#111406])
+- Fix removing suggested_display_precision from entity registry ([@pnbruckner] - [#110671])
+- Reduce duplicate code in enphase_envoy ([@bdraco] - [#116107])
+- Expose the SkyConnect integration with a firmware config/options flow ([@puddly] - [#115363])
+- Add sensor platform to romy integration ([@xeniter] - [#112388])
+- Add binary sensor entities to Traccar Server ([@ludeeus] - [#114719])
+- Bump ZHA dependencies ([@TheJulianJES] - [#116106])
+- Add quality scale to Comelit ([@chemelli74] - [#116041])
+- Add quality scale to Vodafone Station ([@chemelli74] - [#116040])
+- Add select platform to jvc_projector component ([@SteveEasley] - [#111638])
+- Bump intents to 2024.4.24 ([@synesthesiam] - [#116111])
+- Add notification service for Bring component ([@tr4nt0r] - [#109222])
+- Fix statistic bug in Tibber sensor ([@Danielhiversen] - [#116112])
+- Bump aiopegelonline to 0.0.10 ([@mib1185] - [#116114])
+- Split out event handling from Axis hub ([@Kane610] - [#113837])
+- Fix climate entity creation when Shelly WallDisplay uses external relay as actuator ([@bieniu] - [#115216])
+- Don't create event entries for lighting4 rfxtrx devices ([@elupus] - [#115716])
+- Update rfxtrx to 0.31.1 ([@elupus] - [#116125])
+- Bump pyfibaro to 0.7.8 ([@rappenze] - [#116126])
+- Avoid blocking the event loop when unloading Monoprice ([@OnFreund] - [#116141])
+- Remove deprecation warnings for relative_time ([@emontnemery] - [#116144])
+- Fix lying docstring for relative_time template function ([@emontnemery] - [#116146])
+- Handle invalid device type in onewire ([@epenet] - [#116153])
+- Fix language in strict connection guard page ([@emontnemery] - [#116154])
+- Update unlocked icon for locks ([@piitaya] - [#116157])
+- Remove early return when validating entity registry items ([@emontnemery] - [#116160])
+- Revert orjson to 3.9.15 due to segmentation faults ([@bdraco] - [#116168])
+- Update Ollama model names list ([@synesthesiam] - [#116172])
+- Revert "Return specific group state if there is one" ([@jbouwh] - [#116176])
+- Bump govee-ble to 0.31.2 ([@bdraco] - [#116177])
+- Bump pyrisco to 0.6.1 ([@OnFreund] - [#116182])
+- Make Roborock listener update thread safe ([@Lash-L] - [#116184])
+- Fix smartthings doing I/O in the event loop to import platforms ([@bdraco] - [#116190])
+- Fix flaky traccar_server tests ([@emontnemery] - [#116191])
+- Bump bluetooth-auto-recovery to 1.4.2 ([@bdraco] - [#116192])
+- Reduce scope of bootstrap test fixture to module ([@emontnemery] - [#116195])
+- Breakfix to handle null value in Teslemetry ([@Bre77] - [#116206])
+- Restore default timezone after electric_kiwi sensor tests ([@emontnemery] - [#116217])
+- Use None as default value for strict connection cloud store ([@edenhaus] - [#116219])
+- Fix state classes for ovo energy sensors ([@timmo001] - [#116225])
+- Update frontend to 20240426.0 ([@piitaya] - [#116230])
+- Move thread safety check in entity_registry sooner ([@bdraco] - [#116263])
+- Move thread safety check in device_registry sooner ([@bdraco] - [#116264])
+- Move thread safety check in area_registry sooner ([@bdraco] - [#116265])
+- Bump zwave-js-server-python to 0.55.4 ([@raman325] - [#116278])
+- Improve error handling for HTTP errors on Growatt Server ([@marcovtwout] - [#110633])
+- Add matter during onboarding ([@MartinHjelmare] - [#116163])
+- Fix script in restart mode that is fired from the same trigger ([@bdraco] - [#116247])
+- Fix Aseko binary sensors names ([@hopkins-tk] - [#116251])
+- Fix no will published when mqtt is down ([@jbouwh] - [#116319])
+- Make discovery flow tasks background tasks ([@bdraco] - [#116327])
+- Prevent setup retry from delaying shutdown ([@bdraco] - [#116328])
+- Fix august delaying shutdown ([@bdraco] - [#116329])
+- Fix unifiprotect delaying shutdown if websocket if offline ([@bdraco] - [#116331])
+- Fix wemo push updates delaying shutdown ([@bdraco] - [#116333])
+- Fix bluetooth adapter discovery delaying startup and shutdown ([@bdraco] - [#116335])
+- Fix sonos events delaying shutdown ([@bdraco] - [#116337])
+- Add thread safety checks to async_create_task ([@bdraco] - [#116339])
+- Fix homeassistant_alerts delaying shutdown ([@bdraco] - [#116340])
+- Fix Netatmo indoor sensor ([@joostlek] - [#116342])
+- Fix some flapping sonos tests ([@bdraco] - [#116343])
+- Fix bond update delaying shutdown when push updated are not available ([@bdraco] - [#116344])
+- Fix shelly delaying shutdown ([@bdraco] - [#116346])
+- Fix another case of homeassistant_alerts delaying shutdown ([@bdraco] - [#116352])
+- Prevent Shelly raising in a task ([@thecode] - [#116355])
+- Fix usb scan delaying shutdown ([@bdraco] - [#116390])
+- Bump fyta_cli to 0.4.1 ([@dontinelli] - [#115918])
+- Store access token in entry for Fyta ([@dontinelli] - [#116260])
+- Deprecate YAML configuration of Habitica ([@tr4nt0r] - [#116374])
+- Fix jvcprojector command timeout with some projectors ([@SteveEasley] - [#116392])
+- Remove strict connection ([@edenhaus] - [#116396])
+- Update frontend to 20240429.0 ([@bramkragten] - [#116404])
+- Set Synology camera device name as entity name ([@joostlek] - [#109123])
+- Fix stale prayer times from `islamic-prayer-times` ([@cpfair] - [#115683])
+- Bump smart_meter_texas to 0.5.5 ([@grahamwetzler] - [#116321])
+- Remove semicolon in Modbus ([@joostlek] - [#116399])
+- Fix error handling in Shell Command integration ([@mib1185] - [#116409])
+- Fix zoneminder async ([@joostlek] - [#116436])
+- Add user id to coordinator name in Withings ([@joostlek] - [#116440])
+- Some fixes for the Matter light discovery schema ([@marcelveldt] - [#116108])
+- Bump bimmer_connected to 0.15.2 ([@rikroe] - [#116424])
+- Fix zoneminder async v2 ([@joostlek] - [#116451])
+- Bump bluetooth-adapters to 0.19.1 ([@bdraco] - [#116465])
+- Ensure MQTT resubscribes happen before birth message ([@bdraco] - [#116471])
+- Fix local_todo blocking the event loop ([@bdraco] - [#116473])
+- Change SkyConnect integration type back to `hardware` and fix multi-PAN migration bug ([@puddly] - [#116474])
+- Fix non-thread-safe operation in roon volume callback ([@bdraco] - [#116475])
+- Add test MQTT subscription is completed when birth message is sent ([@jbouwh] - [#116476])
+- Update frontend to 20240430.0 ([@bramkragten] - [#116481])
+- Hold a lock to prevent concurrent setup of config entries ([@bdraco] - [#116482])
+- Fix roborock image crashes ([@Lash-L] - [#116487])
+- Bump opower to 0.4.4 ([@max2697] - [#116489])
+- Update frontend to 20240501.0 ([@bramkragten] - [#116503])
+- Bump ZHA dependencies ([@puddly] - [#116509])
+- Fix non-thread-safe operations in ihc ([@bdraco] - [#116513])
+- Bump python matter server library to 5.10.0 ([@marcelveldt] - [#116514])
+- Fix blocking I/O to import modules in mysensors ([@bdraco] - [#116516])
+- Improve scrape strings ([@joostlek] - [#116519])
+- Add blocklist for known Matter devices with faulty transitions ([@marcelveldt] - [#116524])
+- Fix stop event cleanup when reloading MQTT ([@bdraco] - [#116525])
+
+[#100780]: https://github.com/home-assistant/core/pull/100780
+[#102424]: https://github.com/home-assistant/core/pull/102424
+[#104343]: https://github.com/home-assistant/core/pull/104343
+[#104725]: https://github.com/home-assistant/core/pull/104725
+[#104913]: https://github.com/home-assistant/core/pull/104913
+[#105068]: https://github.com/home-assistant/core/pull/105068
+[#105581]: https://github.com/home-assistant/core/pull/105581
+[#105598]: https://github.com/home-assistant/core/pull/105598
+[#105605]: https://github.com/home-assistant/core/pull/105605
+[#105764]: https://github.com/home-assistant/core/pull/105764
+[#105779]: https://github.com/home-assistant/core/pull/105779
+[#105861]: https://github.com/home-assistant/core/pull/105861
+[#106167]: https://github.com/home-assistant/core/pull/106167
+[#106305]: https://github.com/home-assistant/core/pull/106305
+[#106322]: https://github.com/home-assistant/core/pull/106322
+[#106348]: https://github.com/home-assistant/core/pull/106348
+[#106501]: https://github.com/home-assistant/core/pull/106501
+[#106589]: https://github.com/home-assistant/core/pull/106589
+[#106612]: https://github.com/home-assistant/core/pull/106612
+[#106769]: https://github.com/home-assistant/core/pull/106769
+[#106778]: https://github.com/home-assistant/core/pull/106778
+[#106785]: https://github.com/home-assistant/core/pull/106785
+[#106874]: https://github.com/home-assistant/core/pull/106874
+[#106875]: https://github.com/home-assistant/core/pull/106875
+[#106904]: https://github.com/home-assistant/core/pull/106904
+[#107348]: https://github.com/home-assistant/core/pull/107348
+[#107446]: https://github.com/home-assistant/core/pull/107446
+[#107464]: https://github.com/home-assistant/core/pull/107464
+[#107630]: https://github.com/home-assistant/core/pull/107630
+[#107803]: https://github.com/home-assistant/core/pull/107803
+[#107852]: https://github.com/home-assistant/core/pull/107852
+[#107862]: https://github.com/home-assistant/core/pull/107862
+[#107905]: https://github.com/home-assistant/core/pull/107905
+[#107920]: https://github.com/home-assistant/core/pull/107920
+[#108168]: https://github.com/home-assistant/core/pull/108168
+[#108226]: https://github.com/home-assistant/core/pull/108226
+[#108310]: https://github.com/home-assistant/core/pull/108310
+[#108652]: https://github.com/home-assistant/core/pull/108652
+[#109062]: https://github.com/home-assistant/core/pull/109062
+[#109099]: https://github.com/home-assistant/core/pull/109099
+[#109121]: https://github.com/home-assistant/core/pull/109121
+[#109123]: https://github.com/home-assistant/core/pull/109123
+[#109204]: https://github.com/home-assistant/core/pull/109204
+[#109213]: https://github.com/home-assistant/core/pull/109213
+[#109222]: https://github.com/home-assistant/core/pull/109222
+[#109291]: https://github.com/home-assistant/core/pull/109291
+[#109517]: https://github.com/home-assistant/core/pull/109517
+[#109944]: https://github.com/home-assistant/core/pull/109944
+[#110051]: https://github.com/home-assistant/core/pull/110051
+[#110066]: https://github.com/home-assistant/core/pull/110066
+[#110256]: https://github.com/home-assistant/core/pull/110256
+[#110270]: https://github.com/home-assistant/core/pull/110270
+[#110287]: https://github.com/home-assistant/core/pull/110287
+[#110294]: https://github.com/home-assistant/core/pull/110294
+[#110384]: https://github.com/home-assistant/core/pull/110384
+[#110633]: https://github.com/home-assistant/core/pull/110633
+[#110671]: https://github.com/home-assistant/core/pull/110671
+[#110950]: https://github.com/home-assistant/core/pull/110950
+[#111177]: https://github.com/home-assistant/core/pull/111177
+[#111266]: https://github.com/home-assistant/core/pull/111266
+[#111374]: https://github.com/home-assistant/core/pull/111374
+[#111402]: https://github.com/home-assistant/core/pull/111402
+[#111406]: https://github.com/home-assistant/core/pull/111406
+[#111478]: https://github.com/home-assistant/core/pull/111478
+[#111638]: https://github.com/home-assistant/core/pull/111638
+[#112023]: https://github.com/home-assistant/core/pull/112023
+[#112119]: https://github.com/home-assistant/core/pull/112119
+[#112157]: https://github.com/home-assistant/core/pull/112157
+[#112387]: https://github.com/home-assistant/core/pull/112387
+[#112388]: https://github.com/home-assistant/core/pull/112388
+[#112529]: https://github.com/home-assistant/core/pull/112529
+[#112714]: https://github.com/home-assistant/core/pull/112714
+[#112834]: https://github.com/home-assistant/core/pull/112834
+[#112998]: https://github.com/home-assistant/core/pull/112998
+[#113097]: https://github.com/home-assistant/core/pull/113097
+[#113146]: https://github.com/home-assistant/core/pull/113146
+[#113156]: https://github.com/home-assistant/core/pull/113156
+[#113165]: https://github.com/home-assistant/core/pull/113165
+[#113429]: https://github.com/home-assistant/core/pull/113429
+[#113622]: https://github.com/home-assistant/core/pull/113622
+[#113640]: https://github.com/home-assistant/core/pull/113640
+[#113710]: https://github.com/home-assistant/core/pull/113710
+[#113745]: https://github.com/home-assistant/core/pull/113745
+[#113752]: https://github.com/home-assistant/core/pull/113752
+[#113837]: https://github.com/home-assistant/core/pull/113837
+[#113838]: https://github.com/home-assistant/core/pull/113838
+[#113848]: https://github.com/home-assistant/core/pull/113848
+[#113857]: https://github.com/home-assistant/core/pull/113857
+[#113882]: https://github.com/home-assistant/core/pull/113882
+[#114025]: https://github.com/home-assistant/core/pull/114025
+[#114059]: https://github.com/home-assistant/core/pull/114059
+[#114110]: https://github.com/home-assistant/core/pull/114110
+[#114134]: https://github.com/home-assistant/core/pull/114134
+[#114177]: https://github.com/home-assistant/core/pull/114177
+[#114197]: https://github.com/home-assistant/core/pull/114197
+[#114214]: https://github.com/home-assistant/core/pull/114214
+[#114239]: https://github.com/home-assistant/core/pull/114239
+[#114247]: https://github.com/home-assistant/core/pull/114247
+[#114255]: https://github.com/home-assistant/core/pull/114255
+[#114265]: https://github.com/home-assistant/core/pull/114265
+[#114269]: https://github.com/home-assistant/core/pull/114269
+[#114287]: https://github.com/home-assistant/core/pull/114287
+[#114305]: https://github.com/home-assistant/core/pull/114305
+[#114324]: https://github.com/home-assistant/core/pull/114324
+[#114340]: https://github.com/home-assistant/core/pull/114340
+[#114352]: https://github.com/home-assistant/core/pull/114352
+[#114357]: https://github.com/home-assistant/core/pull/114357
+[#114359]: https://github.com/home-assistant/core/pull/114359
+[#114361]: https://github.com/home-assistant/core/pull/114361
+[#114362]: https://github.com/home-assistant/core/pull/114362
+[#114364]: https://github.com/home-assistant/core/pull/114364
+[#114365]: https://github.com/home-assistant/core/pull/114365
+[#114366]: https://github.com/home-assistant/core/pull/114366
+[#114367]: https://github.com/home-assistant/core/pull/114367
+[#114377]: https://github.com/home-assistant/core/pull/114377
+[#114379]: https://github.com/home-assistant/core/pull/114379
+[#114381]: https://github.com/home-assistant/core/pull/114381
+[#114384]: https://github.com/home-assistant/core/pull/114384
+[#114385]: https://github.com/home-assistant/core/pull/114385
+[#114388]: https://github.com/home-assistant/core/pull/114388
+[#114395]: https://github.com/home-assistant/core/pull/114395
+[#114398]: https://github.com/home-assistant/core/pull/114398
+[#114400]: https://github.com/home-assistant/core/pull/114400
+[#114404]: https://github.com/home-assistant/core/pull/114404
+[#114405]: https://github.com/home-assistant/core/pull/114405
+[#114406]: https://github.com/home-assistant/core/pull/114406
+[#114408]: https://github.com/home-assistant/core/pull/114408
+[#114409]: https://github.com/home-assistant/core/pull/114409
+[#114411]: https://github.com/home-assistant/core/pull/114411
+[#114412]: https://github.com/home-assistant/core/pull/114412
+[#114413]: https://github.com/home-assistant/core/pull/114413
+[#114415]: https://github.com/home-assistant/core/pull/114415
+[#114419]: https://github.com/home-assistant/core/pull/114419
+[#114422]: https://github.com/home-assistant/core/pull/114422
+[#114424]: https://github.com/home-assistant/core/pull/114424
+[#114425]: https://github.com/home-assistant/core/pull/114425
+[#114426]: https://github.com/home-assistant/core/pull/114426
+[#114427]: https://github.com/home-assistant/core/pull/114427
+[#114428]: https://github.com/home-assistant/core/pull/114428
+[#114429]: https://github.com/home-assistant/core/pull/114429
+[#114432]: https://github.com/home-assistant/core/pull/114432
+[#114437]: https://github.com/home-assistant/core/pull/114437
+[#114441]: https://github.com/home-assistant/core/pull/114441
+[#114443]: https://github.com/home-assistant/core/pull/114443
+[#114455]: https://github.com/home-assistant/core/pull/114455
+[#114470]: https://github.com/home-assistant/core/pull/114470
+[#114480]: https://github.com/home-assistant/core/pull/114480
+[#114484]: https://github.com/home-assistant/core/pull/114484
+[#114485]: https://github.com/home-assistant/core/pull/114485
+[#114488]: https://github.com/home-assistant/core/pull/114488
+[#114495]: https://github.com/home-assistant/core/pull/114495
+[#114500]: https://github.com/home-assistant/core/pull/114500
+[#114501]: https://github.com/home-assistant/core/pull/114501
+[#114502]: https://github.com/home-assistant/core/pull/114502
+[#114509]: https://github.com/home-assistant/core/pull/114509
+[#114515]: https://github.com/home-assistant/core/pull/114515
+[#114516]: https://github.com/home-assistant/core/pull/114516
+[#114518]: https://github.com/home-assistant/core/pull/114518
+[#114520]: https://github.com/home-assistant/core/pull/114520
+[#114525]: https://github.com/home-assistant/core/pull/114525
+[#114527]: https://github.com/home-assistant/core/pull/114527
+[#114528]: https://github.com/home-assistant/core/pull/114528
+[#114529]: https://github.com/home-assistant/core/pull/114529
+[#114532]: https://github.com/home-assistant/core/pull/114532
+[#114534]: https://github.com/home-assistant/core/pull/114534
+[#114535]: https://github.com/home-assistant/core/pull/114535
+[#114536]: https://github.com/home-assistant/core/pull/114536
+[#114537]: https://github.com/home-assistant/core/pull/114537
+[#114539]: https://github.com/home-assistant/core/pull/114539
+[#114540]: https://github.com/home-assistant/core/pull/114540
+[#114541]: https://github.com/home-assistant/core/pull/114541
+[#114546]: https://github.com/home-assistant/core/pull/114546
+[#114554]: https://github.com/home-assistant/core/pull/114554
+[#114557]: https://github.com/home-assistant/core/pull/114557
+[#114572]: https://github.com/home-assistant/core/pull/114572
+[#114573]: https://github.com/home-assistant/core/pull/114573
+[#114577]: https://github.com/home-assistant/core/pull/114577
+[#114582]: https://github.com/home-assistant/core/pull/114582
+[#114585]: https://github.com/home-assistant/core/pull/114585
+[#114586]: https://github.com/home-assistant/core/pull/114586
+[#114587]: https://github.com/home-assistant/core/pull/114587
+[#114588]: https://github.com/home-assistant/core/pull/114588
+[#114589]: https://github.com/home-assistant/core/pull/114589
+[#114590]: https://github.com/home-assistant/core/pull/114590
+[#114598]: https://github.com/home-assistant/core/pull/114598
+[#114601]: https://github.com/home-assistant/core/pull/114601
+[#114605]: https://github.com/home-assistant/core/pull/114605
+[#114609]: https://github.com/home-assistant/core/pull/114609
+[#114610]: https://github.com/home-assistant/core/pull/114610
+[#114616]: https://github.com/home-assistant/core/pull/114616
+[#114617]: https://github.com/home-assistant/core/pull/114617
+[#114624]: https://github.com/home-assistant/core/pull/114624
+[#114626]: https://github.com/home-assistant/core/pull/114626
+[#114629]: https://github.com/home-assistant/core/pull/114629
+[#114634]: https://github.com/home-assistant/core/pull/114634
+[#114636]: https://github.com/home-assistant/core/pull/114636
+[#114642]: https://github.com/home-assistant/core/pull/114642
+[#114644]: https://github.com/home-assistant/core/pull/114644
+[#114645]: https://github.com/home-assistant/core/pull/114645
+[#114648]: https://github.com/home-assistant/core/pull/114648
+[#114656]: https://github.com/home-assistant/core/pull/114656
+[#114661]: https://github.com/home-assistant/core/pull/114661
+[#114662]: https://github.com/home-assistant/core/pull/114662
+[#114666]: https://github.com/home-assistant/core/pull/114666
+[#114668]: https://github.com/home-assistant/core/pull/114668
+[#114669]: https://github.com/home-assistant/core/pull/114669
+[#114670]: https://github.com/home-assistant/core/pull/114670
+[#114672]: https://github.com/home-assistant/core/pull/114672
+[#114675]: https://github.com/home-assistant/core/pull/114675
+[#114677]: https://github.com/home-assistant/core/pull/114677
+[#114678]: https://github.com/home-assistant/core/pull/114678
+[#114681]: https://github.com/home-assistant/core/pull/114681
+[#114682]: https://github.com/home-assistant/core/pull/114682
+[#114688]: https://github.com/home-assistant/core/pull/114688
+[#114689]: https://github.com/home-assistant/core/pull/114689
+[#114691]: https://github.com/home-assistant/core/pull/114691
+[#114692]: https://github.com/home-assistant/core/pull/114692
+[#114694]: https://github.com/home-assistant/core/pull/114694
+[#114695]: https://github.com/home-assistant/core/pull/114695
+[#114696]: https://github.com/home-assistant/core/pull/114696
+[#114697]: https://github.com/home-assistant/core/pull/114697
+[#114698]: https://github.com/home-assistant/core/pull/114698
+[#114699]: https://github.com/home-assistant/core/pull/114699
+[#114700]: https://github.com/home-assistant/core/pull/114700
+[#114701]: https://github.com/home-assistant/core/pull/114701
+[#114702]: https://github.com/home-assistant/core/pull/114702
+[#114703]: https://github.com/home-assistant/core/pull/114703
+[#114704]: https://github.com/home-assistant/core/pull/114704
+[#114705]: https://github.com/home-assistant/core/pull/114705
+[#114706]: https://github.com/home-assistant/core/pull/114706
+[#114707]: https://github.com/home-assistant/core/pull/114707
+[#114709]: https://github.com/home-assistant/core/pull/114709
+[#114711]: https://github.com/home-assistant/core/pull/114711
+[#114714]: https://github.com/home-assistant/core/pull/114714
+[#114719]: https://github.com/home-assistant/core/pull/114719
+[#114720]: https://github.com/home-assistant/core/pull/114720
+[#114722]: https://github.com/home-assistant/core/pull/114722
+[#114726]: https://github.com/home-assistant/core/pull/114726
+[#114728]: https://github.com/home-assistant/core/pull/114728
+[#114729]: https://github.com/home-assistant/core/pull/114729
+[#114730]: https://github.com/home-assistant/core/pull/114730
+[#114731]: https://github.com/home-assistant/core/pull/114731
+[#114732]: https://github.com/home-assistant/core/pull/114732
+[#114733]: https://github.com/home-assistant/core/pull/114733
+[#114736]: https://github.com/home-assistant/core/pull/114736
+[#114737]: https://github.com/home-assistant/core/pull/114737
+[#114738]: https://github.com/home-assistant/core/pull/114738
+[#114739]: https://github.com/home-assistant/core/pull/114739
+[#114740]: https://github.com/home-assistant/core/pull/114740
+[#114745]: https://github.com/home-assistant/core/pull/114745
+[#114749]: https://github.com/home-assistant/core/pull/114749
+[#114753]: https://github.com/home-assistant/core/pull/114753
+[#114754]: https://github.com/home-assistant/core/pull/114754
+[#114760]: https://github.com/home-assistant/core/pull/114760
+[#114769]: https://github.com/home-assistant/core/pull/114769
+[#114771]: https://github.com/home-assistant/core/pull/114771
+[#114774]: https://github.com/home-assistant/core/pull/114774
+[#114776]: https://github.com/home-assistant/core/pull/114776
+[#114777]: https://github.com/home-assistant/core/pull/114777
+[#114800]: https://github.com/home-assistant/core/pull/114800
+[#114802]: https://github.com/home-assistant/core/pull/114802
+[#114803]: https://github.com/home-assistant/core/pull/114803
+[#114805]: https://github.com/home-assistant/core/pull/114805
+[#114806]: https://github.com/home-assistant/core/pull/114806
+[#114808]: https://github.com/home-assistant/core/pull/114808
+[#114809]: https://github.com/home-assistant/core/pull/114809
+[#114810]: https://github.com/home-assistant/core/pull/114810
+[#114811]: https://github.com/home-assistant/core/pull/114811
+[#114812]: https://github.com/home-assistant/core/pull/114812
+[#114813]: https://github.com/home-assistant/core/pull/114813
+[#114814]: https://github.com/home-assistant/core/pull/114814
+[#114816]: https://github.com/home-assistant/core/pull/114816
+[#114817]: https://github.com/home-assistant/core/pull/114817
+[#114818]: https://github.com/home-assistant/core/pull/114818
+[#114847]: https://github.com/home-assistant/core/pull/114847
+[#114865]: https://github.com/home-assistant/core/pull/114865
+[#114867]: https://github.com/home-assistant/core/pull/114867
+[#114873]: https://github.com/home-assistant/core/pull/114873
+[#114883]: https://github.com/home-assistant/core/pull/114883
+[#114885]: https://github.com/home-assistant/core/pull/114885
+[#114887]: https://github.com/home-assistant/core/pull/114887
+[#114899]: https://github.com/home-assistant/core/pull/114899
+[#114900]: https://github.com/home-assistant/core/pull/114900
+[#114906]: https://github.com/home-assistant/core/pull/114906
+[#114911]: https://github.com/home-assistant/core/pull/114911
+[#114916]: https://github.com/home-assistant/core/pull/114916
+[#114917]: https://github.com/home-assistant/core/pull/114917
+[#114919]: https://github.com/home-assistant/core/pull/114919
+[#114923]: https://github.com/home-assistant/core/pull/114923
+[#114925]: https://github.com/home-assistant/core/pull/114925
+[#114926]: https://github.com/home-assistant/core/pull/114926
+[#114928]: https://github.com/home-assistant/core/pull/114928
+[#114929]: https://github.com/home-assistant/core/pull/114929
+[#114933]: https://github.com/home-assistant/core/pull/114933
+[#114939]: https://github.com/home-assistant/core/pull/114939
+[#114942]: https://github.com/home-assistant/core/pull/114942
+[#114945]: https://github.com/home-assistant/core/pull/114945
+[#114957]: https://github.com/home-assistant/core/pull/114957
+[#114962]: https://github.com/home-assistant/core/pull/114962
+[#114963]: https://github.com/home-assistant/core/pull/114963
+[#114972]: https://github.com/home-assistant/core/pull/114972
+[#114974]: https://github.com/home-assistant/core/pull/114974
+[#114976]: https://github.com/home-assistant/core/pull/114976
+[#114978]: https://github.com/home-assistant/core/pull/114978
+[#114985]: https://github.com/home-assistant/core/pull/114985
+[#114986]: https://github.com/home-assistant/core/pull/114986
+[#114987]: https://github.com/home-assistant/core/pull/114987
+[#114992]: https://github.com/home-assistant/core/pull/114992
+[#114993]: https://github.com/home-assistant/core/pull/114993
+[#114994]: https://github.com/home-assistant/core/pull/114994
+[#114995]: https://github.com/home-assistant/core/pull/114995
+[#114996]: https://github.com/home-assistant/core/pull/114996
+[#115000]: https://github.com/home-assistant/core/pull/115000
+[#115001]: https://github.com/home-assistant/core/pull/115001
+[#115002]: https://github.com/home-assistant/core/pull/115002
+[#115013]: https://github.com/home-assistant/core/pull/115013
+[#115015]: https://github.com/home-assistant/core/pull/115015
+[#115016]: https://github.com/home-assistant/core/pull/115016
+[#115017]: https://github.com/home-assistant/core/pull/115017
+[#115020]: https://github.com/home-assistant/core/pull/115020
+[#115023]: https://github.com/home-assistant/core/pull/115023
+[#115024]: https://github.com/home-assistant/core/pull/115024
+[#115028]: https://github.com/home-assistant/core/pull/115028
+[#115029]: https://github.com/home-assistant/core/pull/115029
+[#115032]: https://github.com/home-assistant/core/pull/115032
+[#115043]: https://github.com/home-assistant/core/pull/115043
+[#115044]: https://github.com/home-assistant/core/pull/115044
+[#115047]: https://github.com/home-assistant/core/pull/115047
+[#115050]: https://github.com/home-assistant/core/pull/115050
+[#115052]: https://github.com/home-assistant/core/pull/115052
+[#115055]: https://github.com/home-assistant/core/pull/115055
+[#115057]: https://github.com/home-assistant/core/pull/115057
+[#115059]: https://github.com/home-assistant/core/pull/115059
+[#115061]: https://github.com/home-assistant/core/pull/115061
+[#115063]: https://github.com/home-assistant/core/pull/115063
+[#115064]: https://github.com/home-assistant/core/pull/115064
+[#115066]: https://github.com/home-assistant/core/pull/115066
+[#115067]: https://github.com/home-assistant/core/pull/115067
+[#115069]: https://github.com/home-assistant/core/pull/115069
+[#115074]: https://github.com/home-assistant/core/pull/115074
+[#115075]: https://github.com/home-assistant/core/pull/115075
+[#115076]: https://github.com/home-assistant/core/pull/115076
+[#115079]: https://github.com/home-assistant/core/pull/115079
+[#115082]: https://github.com/home-assistant/core/pull/115082
+[#115091]: https://github.com/home-assistant/core/pull/115091
+[#115094]: https://github.com/home-assistant/core/pull/115094
+[#115097]: https://github.com/home-assistant/core/pull/115097
+[#115098]: https://github.com/home-assistant/core/pull/115098
+[#115100]: https://github.com/home-assistant/core/pull/115100
+[#115102]: https://github.com/home-assistant/core/pull/115102
+[#115104]: https://github.com/home-assistant/core/pull/115104
+[#115105]: https://github.com/home-assistant/core/pull/115105
+[#115108]: https://github.com/home-assistant/core/pull/115108
+[#115112]: https://github.com/home-assistant/core/pull/115112
+[#115119]: https://github.com/home-assistant/core/pull/115119
+[#115121]: https://github.com/home-assistant/core/pull/115121
+[#115125]: https://github.com/home-assistant/core/pull/115125
+[#115127]: https://github.com/home-assistant/core/pull/115127
+[#115132]: https://github.com/home-assistant/core/pull/115132
+[#115146]: https://github.com/home-assistant/core/pull/115146
+[#115152]: https://github.com/home-assistant/core/pull/115152
+[#115154]: https://github.com/home-assistant/core/pull/115154
+[#115157]: https://github.com/home-assistant/core/pull/115157
+[#115160]: https://github.com/home-assistant/core/pull/115160
+[#115161]: https://github.com/home-assistant/core/pull/115161
+[#115164]: https://github.com/home-assistant/core/pull/115164
+[#115165]: https://github.com/home-assistant/core/pull/115165
+[#115167]: https://github.com/home-assistant/core/pull/115167
+[#115168]: https://github.com/home-assistant/core/pull/115168
+[#115169]: https://github.com/home-assistant/core/pull/115169
+[#115172]: https://github.com/home-assistant/core/pull/115172
+[#115177]: https://github.com/home-assistant/core/pull/115177
+[#115179]: https://github.com/home-assistant/core/pull/115179
+[#115187]: https://github.com/home-assistant/core/pull/115187
+[#115188]: https://github.com/home-assistant/core/pull/115188
+[#115189]: https://github.com/home-assistant/core/pull/115189
+[#115190]: https://github.com/home-assistant/core/pull/115190
+[#115195]: https://github.com/home-assistant/core/pull/115195
+[#115197]: https://github.com/home-assistant/core/pull/115197
+[#115201]: https://github.com/home-assistant/core/pull/115201
+[#115206]: https://github.com/home-assistant/core/pull/115206
+[#115210]: https://github.com/home-assistant/core/pull/115210
+[#115216]: https://github.com/home-assistant/core/pull/115216
+[#115225]: https://github.com/home-assistant/core/pull/115225
+[#115228]: https://github.com/home-assistant/core/pull/115228
+[#115229]: https://github.com/home-assistant/core/pull/115229
+[#115230]: https://github.com/home-assistant/core/pull/115230
+[#115237]: https://github.com/home-assistant/core/pull/115237
+[#115238]: https://github.com/home-assistant/core/pull/115238
+[#115240]: https://github.com/home-assistant/core/pull/115240
+[#115241]: https://github.com/home-assistant/core/pull/115241
+[#115242]: https://github.com/home-assistant/core/pull/115242
+[#115244]: https://github.com/home-assistant/core/pull/115244
+[#115245]: https://github.com/home-assistant/core/pull/115245
+[#115246]: https://github.com/home-assistant/core/pull/115246
+[#115253]: https://github.com/home-assistant/core/pull/115253
+[#115263]: https://github.com/home-assistant/core/pull/115263
+[#115265]: https://github.com/home-assistant/core/pull/115265
+[#115267]: https://github.com/home-assistant/core/pull/115267
+[#115275]: https://github.com/home-assistant/core/pull/115275
+[#115276]: https://github.com/home-assistant/core/pull/115276
+[#115277]: https://github.com/home-assistant/core/pull/115277
+[#115278]: https://github.com/home-assistant/core/pull/115278
+[#115285]: https://github.com/home-assistant/core/pull/115285
+[#115294]: https://github.com/home-assistant/core/pull/115294
+[#115296]: https://github.com/home-assistant/core/pull/115296
+[#115300]: https://github.com/home-assistant/core/pull/115300
+[#115307]: https://github.com/home-assistant/core/pull/115307
+[#115309]: https://github.com/home-assistant/core/pull/115309
+[#115315]: https://github.com/home-assistant/core/pull/115315
+[#115317]: https://github.com/home-assistant/core/pull/115317
+[#115318]: https://github.com/home-assistant/core/pull/115318
+[#115319]: https://github.com/home-assistant/core/pull/115319
+[#115322]: https://github.com/home-assistant/core/pull/115322
+[#115324]: https://github.com/home-assistant/core/pull/115324
+[#115333]: https://github.com/home-assistant/core/pull/115333
+[#115335]: https://github.com/home-assistant/core/pull/115335
+[#115336]: https://github.com/home-assistant/core/pull/115336
+[#115340]: https://github.com/home-assistant/core/pull/115340
+[#115341]: https://github.com/home-assistant/core/pull/115341
+[#115362]: https://github.com/home-assistant/core/pull/115362
+[#115363]: https://github.com/home-assistant/core/pull/115363
+[#115368]: https://github.com/home-assistant/core/pull/115368
+[#115372]: https://github.com/home-assistant/core/pull/115372
+[#115377]: https://github.com/home-assistant/core/pull/115377
+[#115378]: https://github.com/home-assistant/core/pull/115378
+[#115384]: https://github.com/home-assistant/core/pull/115384
+[#115386]: https://github.com/home-assistant/core/pull/115386
+[#115388]: https://github.com/home-assistant/core/pull/115388
+[#115390]: https://github.com/home-assistant/core/pull/115390
+[#115391]: https://github.com/home-assistant/core/pull/115391
+[#115392]: https://github.com/home-assistant/core/pull/115392
+[#115396]: https://github.com/home-assistant/core/pull/115396
+[#115398]: https://github.com/home-assistant/core/pull/115398
+[#115404]: https://github.com/home-assistant/core/pull/115404
+[#115405]: https://github.com/home-assistant/core/pull/115405
+[#115406]: https://github.com/home-assistant/core/pull/115406
+[#115409]: https://github.com/home-assistant/core/pull/115409
+[#115412]: https://github.com/home-assistant/core/pull/115412
+[#115413]: https://github.com/home-assistant/core/pull/115413
+[#115422]: https://github.com/home-assistant/core/pull/115422
+[#115442]: https://github.com/home-assistant/core/pull/115442
+[#115443]: https://github.com/home-assistant/core/pull/115443
+[#115446]: https://github.com/home-assistant/core/pull/115446
+[#115447]: https://github.com/home-assistant/core/pull/115447
+[#115448]: https://github.com/home-assistant/core/pull/115448
+[#115449]: https://github.com/home-assistant/core/pull/115449
+[#115451]: https://github.com/home-assistant/core/pull/115451
+[#115452]: https://github.com/home-assistant/core/pull/115452
+[#115454]: https://github.com/home-assistant/core/pull/115454
+[#115455]: https://github.com/home-assistant/core/pull/115455
+[#115457]: https://github.com/home-assistant/core/pull/115457
+[#115467]: https://github.com/home-assistant/core/pull/115467
+[#115470]: https://github.com/home-assistant/core/pull/115470
+[#115473]: https://github.com/home-assistant/core/pull/115473
+[#115475]: https://github.com/home-assistant/core/pull/115475
+[#115477]: https://github.com/home-assistant/core/pull/115477
+[#115481]: https://github.com/home-assistant/core/pull/115481
+[#115485]: https://github.com/home-assistant/core/pull/115485
+[#115486]: https://github.com/home-assistant/core/pull/115486
+[#115494]: https://github.com/home-assistant/core/pull/115494
+[#115496]: https://github.com/home-assistant/core/pull/115496
+[#115498]: https://github.com/home-assistant/core/pull/115498
+[#115499]: https://github.com/home-assistant/core/pull/115499
+[#115504]: https://github.com/home-assistant/core/pull/115504
+[#115514]: https://github.com/home-assistant/core/pull/115514
+[#115515]: https://github.com/home-assistant/core/pull/115515
+[#115517]: https://github.com/home-assistant/core/pull/115517
+[#115518]: https://github.com/home-assistant/core/pull/115518
+[#115521]: https://github.com/home-assistant/core/pull/115521
+[#115526]: https://github.com/home-assistant/core/pull/115526
+[#115528]: https://github.com/home-assistant/core/pull/115528
+[#115529]: https://github.com/home-assistant/core/pull/115529
+[#115533]: https://github.com/home-assistant/core/pull/115533
+[#115538]: https://github.com/home-assistant/core/pull/115538
+[#115540]: https://github.com/home-assistant/core/pull/115540
+[#115541]: https://github.com/home-assistant/core/pull/115541
+[#115543]: https://github.com/home-assistant/core/pull/115543
+[#115544]: https://github.com/home-assistant/core/pull/115544
+[#115546]: https://github.com/home-assistant/core/pull/115546
+[#115547]: https://github.com/home-assistant/core/pull/115547
+[#115548]: https://github.com/home-assistant/core/pull/115548
+[#115549]: https://github.com/home-assistant/core/pull/115549
+[#115550]: https://github.com/home-assistant/core/pull/115550
+[#115551]: https://github.com/home-assistant/core/pull/115551
+[#115552]: https://github.com/home-assistant/core/pull/115552
+[#115553]: https://github.com/home-assistant/core/pull/115553
+[#115554]: https://github.com/home-assistant/core/pull/115554
+[#115555]: https://github.com/home-assistant/core/pull/115555
+[#115556]: https://github.com/home-assistant/core/pull/115556
+[#115558]: https://github.com/home-assistant/core/pull/115558
+[#115559]: https://github.com/home-assistant/core/pull/115559
+[#115563]: https://github.com/home-assistant/core/pull/115563
+[#115564]: https://github.com/home-assistant/core/pull/115564
+[#115565]: https://github.com/home-assistant/core/pull/115565
+[#115569]: https://github.com/home-assistant/core/pull/115569
+[#115577]: https://github.com/home-assistant/core/pull/115577
+[#115579]: https://github.com/home-assistant/core/pull/115579
+[#115583]: https://github.com/home-assistant/core/pull/115583
+[#115586]: https://github.com/home-assistant/core/pull/115586
+[#115587]: https://github.com/home-assistant/core/pull/115587
+[#115592]: https://github.com/home-assistant/core/pull/115592
+[#115593]: https://github.com/home-assistant/core/pull/115593
+[#115595]: https://github.com/home-assistant/core/pull/115595
+[#115599]: https://github.com/home-assistant/core/pull/115599
+[#115607]: https://github.com/home-assistant/core/pull/115607
+[#115618]: https://github.com/home-assistant/core/pull/115618
+[#115620]: https://github.com/home-assistant/core/pull/115620
+[#115621]: https://github.com/home-assistant/core/pull/115621
+[#115624]: https://github.com/home-assistant/core/pull/115624
+[#115628]: https://github.com/home-assistant/core/pull/115628
+[#115629]: https://github.com/home-assistant/core/pull/115629
+[#115638]: https://github.com/home-assistant/core/pull/115638
+[#115646]: https://github.com/home-assistant/core/pull/115646
+[#115653]: https://github.com/home-assistant/core/pull/115653
+[#115654]: https://github.com/home-assistant/core/pull/115654
+[#115658]: https://github.com/home-assistant/core/pull/115658
+[#115662]: https://github.com/home-assistant/core/pull/115662
+[#115665]: https://github.com/home-assistant/core/pull/115665
+[#115667]: https://github.com/home-assistant/core/pull/115667
+[#115668]: https://github.com/home-assistant/core/pull/115668
+[#115673]: https://github.com/home-assistant/core/pull/115673
+[#115674]: https://github.com/home-assistant/core/pull/115674
+[#115675]: https://github.com/home-assistant/core/pull/115675
+[#115676]: https://github.com/home-assistant/core/pull/115676
+[#115677]: https://github.com/home-assistant/core/pull/115677
+[#115678]: https://github.com/home-assistant/core/pull/115678
+[#115683]: https://github.com/home-assistant/core/pull/115683
+[#115685]: https://github.com/home-assistant/core/pull/115685
+[#115686]: https://github.com/home-assistant/core/pull/115686
+[#115689]: https://github.com/home-assistant/core/pull/115689
+[#115691]: https://github.com/home-assistant/core/pull/115691
+[#115696]: https://github.com/home-assistant/core/pull/115696
+[#115699]: https://github.com/home-assistant/core/pull/115699
+[#115700]: https://github.com/home-assistant/core/pull/115700
+[#115708]: https://github.com/home-assistant/core/pull/115708
+[#115713]: https://github.com/home-assistant/core/pull/115713
+[#115716]: https://github.com/home-assistant/core/pull/115716
+[#115719]: https://github.com/home-assistant/core/pull/115719
+[#115721]: https://github.com/home-assistant/core/pull/115721
+[#115724]: https://github.com/home-assistant/core/pull/115724
+[#115728]: https://github.com/home-assistant/core/pull/115728
+[#115729]: https://github.com/home-assistant/core/pull/115729
+[#115731]: https://github.com/home-assistant/core/pull/115731
+[#115736]: https://github.com/home-assistant/core/pull/115736
+[#115742]: https://github.com/home-assistant/core/pull/115742
+[#115744]: https://github.com/home-assistant/core/pull/115744
+[#115750]: https://github.com/home-assistant/core/pull/115750
+[#115751]: https://github.com/home-assistant/core/pull/115751
+[#115752]: https://github.com/home-assistant/core/pull/115752
+[#115754]: https://github.com/home-assistant/core/pull/115754
+[#115757]: https://github.com/home-assistant/core/pull/115757
+[#115759]: https://github.com/home-assistant/core/pull/115759
+[#115763]: https://github.com/home-assistant/core/pull/115763
+[#115764]: https://github.com/home-assistant/core/pull/115764
+[#115767]: https://github.com/home-assistant/core/pull/115767
+[#115768]: https://github.com/home-assistant/core/pull/115768
+[#115776]: https://github.com/home-assistant/core/pull/115776
+[#115777]: https://github.com/home-assistant/core/pull/115777
+[#115780]: https://github.com/home-assistant/core/pull/115780
+[#115783]: https://github.com/home-assistant/core/pull/115783
+[#115789]: https://github.com/home-assistant/core/pull/115789
+[#115790]: https://github.com/home-assistant/core/pull/115790
+[#115792]: https://github.com/home-assistant/core/pull/115792
+[#115793]: https://github.com/home-assistant/core/pull/115793
+[#115794]: https://github.com/home-assistant/core/pull/115794
+[#115796]: https://github.com/home-assistant/core/pull/115796
+[#115797]: https://github.com/home-assistant/core/pull/115797
+[#115798]: https://github.com/home-assistant/core/pull/115798
+[#115805]: https://github.com/home-assistant/core/pull/115805
+[#115810]: https://github.com/home-assistant/core/pull/115810
+[#115814]: https://github.com/home-assistant/core/pull/115814
+[#115815]: https://github.com/home-assistant/core/pull/115815
+[#115820]: https://github.com/home-assistant/core/pull/115820
+[#115822]: https://github.com/home-assistant/core/pull/115822
+[#115823]: https://github.com/home-assistant/core/pull/115823
+[#115824]: https://github.com/home-assistant/core/pull/115824
+[#115841]: https://github.com/home-assistant/core/pull/115841
+[#115842]: https://github.com/home-assistant/core/pull/115842
+[#115843]: https://github.com/home-assistant/core/pull/115843
+[#115849]: https://github.com/home-assistant/core/pull/115849
+[#115853]: https://github.com/home-assistant/core/pull/115853
+[#115854]: https://github.com/home-assistant/core/pull/115854
+[#115856]: https://github.com/home-assistant/core/pull/115856
+[#115864]: https://github.com/home-assistant/core/pull/115864
+[#115866]: https://github.com/home-assistant/core/pull/115866
+[#115873]: https://github.com/home-assistant/core/pull/115873
+[#115875]: https://github.com/home-assistant/core/pull/115875
+[#115876]: https://github.com/home-assistant/core/pull/115876
+[#115877]: https://github.com/home-assistant/core/pull/115877
+[#115879]: https://github.com/home-assistant/core/pull/115879
+[#115880]: https://github.com/home-assistant/core/pull/115880
+[#115884]: https://github.com/home-assistant/core/pull/115884
+[#115885]: https://github.com/home-assistant/core/pull/115885
+[#115887]: https://github.com/home-assistant/core/pull/115887
+[#115889]: https://github.com/home-assistant/core/pull/115889
+[#115890]: https://github.com/home-assistant/core/pull/115890
+[#115893]: https://github.com/home-assistant/core/pull/115893
+[#115894]: https://github.com/home-assistant/core/pull/115894
+[#115895]: https://github.com/home-assistant/core/pull/115895
+[#115904]: https://github.com/home-assistant/core/pull/115904
+[#115909]: https://github.com/home-assistant/core/pull/115909
+[#115910]: https://github.com/home-assistant/core/pull/115910
+[#115917]: https://github.com/home-assistant/core/pull/115917
+[#115918]: https://github.com/home-assistant/core/pull/115918
+[#115919]: https://github.com/home-assistant/core/pull/115919
+[#115920]: https://github.com/home-assistant/core/pull/115920
+[#115921]: https://github.com/home-assistant/core/pull/115921
+[#115924]: https://github.com/home-assistant/core/pull/115924
+[#115928]: https://github.com/home-assistant/core/pull/115928
+[#115929]: https://github.com/home-assistant/core/pull/115929
+[#115930]: https://github.com/home-assistant/core/pull/115930
+[#115931]: https://github.com/home-assistant/core/pull/115931
+[#115934]: https://github.com/home-assistant/core/pull/115934
+[#115936]: https://github.com/home-assistant/core/pull/115936
+[#115938]: https://github.com/home-assistant/core/pull/115938
+[#115942]: https://github.com/home-assistant/core/pull/115942
+[#115943]: https://github.com/home-assistant/core/pull/115943
+[#115945]: https://github.com/home-assistant/core/pull/115945
+[#115950]: https://github.com/home-assistant/core/pull/115950
+[#115952]: https://github.com/home-assistant/core/pull/115952
+[#115960]: https://github.com/home-assistant/core/pull/115960
+[#115966]: https://github.com/home-assistant/core/pull/115966
+[#115968]: https://github.com/home-assistant/core/pull/115968
+[#115973]: https://github.com/home-assistant/core/pull/115973
+[#115974]: https://github.com/home-assistant/core/pull/115974
+[#115977]: https://github.com/home-assistant/core/pull/115977
+[#115981]: https://github.com/home-assistant/core/pull/115981
+[#115983]: https://github.com/home-assistant/core/pull/115983
+[#115985]: https://github.com/home-assistant/core/pull/115985
+[#115989]: https://github.com/home-assistant/core/pull/115989
+[#115992]: https://github.com/home-assistant/core/pull/115992
+[#116004]: https://github.com/home-assistant/core/pull/116004
+[#116005]: https://github.com/home-assistant/core/pull/116005
+[#116011]: https://github.com/home-assistant/core/pull/116011
+[#116015]: https://github.com/home-assistant/core/pull/116015
+[#116016]: https://github.com/home-assistant/core/pull/116016
+[#116017]: https://github.com/home-assistant/core/pull/116017
+[#116020]: https://github.com/home-assistant/core/pull/116020
+[#116021]: https://github.com/home-assistant/core/pull/116021
+[#116022]: https://github.com/home-assistant/core/pull/116022
+[#116025]: https://github.com/home-assistant/core/pull/116025
+[#116026]: https://github.com/home-assistant/core/pull/116026
+[#116027]: https://github.com/home-assistant/core/pull/116027
+[#116030]: https://github.com/home-assistant/core/pull/116030
+[#116032]: https://github.com/home-assistant/core/pull/116032
+[#116033]: https://github.com/home-assistant/core/pull/116033
+[#116034]: https://github.com/home-assistant/core/pull/116034
+[#116035]: https://github.com/home-assistant/core/pull/116035
+[#116036]: https://github.com/home-assistant/core/pull/116036
+[#116038]: https://github.com/home-assistant/core/pull/116038
+[#116039]: https://github.com/home-assistant/core/pull/116039
+[#116040]: https://github.com/home-assistant/core/pull/116040
+[#116041]: https://github.com/home-assistant/core/pull/116041
+[#116044]: https://github.com/home-assistant/core/pull/116044
+[#116047]: https://github.com/home-assistant/core/pull/116047
+[#116048]: https://github.com/home-assistant/core/pull/116048
+[#116049]: https://github.com/home-assistant/core/pull/116049
+[#116050]: https://github.com/home-assistant/core/pull/116050
+[#116055]: https://github.com/home-assistant/core/pull/116055
+[#116057]: https://github.com/home-assistant/core/pull/116057
+[#116058]: https://github.com/home-assistant/core/pull/116058
+[#116059]: https://github.com/home-assistant/core/pull/116059
+[#116060]: https://github.com/home-assistant/core/pull/116060
+[#116061]: https://github.com/home-assistant/core/pull/116061
+[#116063]: https://github.com/home-assistant/core/pull/116063
+[#116065]: https://github.com/home-assistant/core/pull/116065
+[#116067]: https://github.com/home-assistant/core/pull/116067
+[#116068]: https://github.com/home-assistant/core/pull/116068
+[#116069]: https://github.com/home-assistant/core/pull/116069
+[#116070]: https://github.com/home-assistant/core/pull/116070
+[#116071]: https://github.com/home-assistant/core/pull/116071
+[#116072]: https://github.com/home-assistant/core/pull/116072
+[#116077]: https://github.com/home-assistant/core/pull/116077
+[#116078]: https://github.com/home-assistant/core/pull/116078
+[#116081]: https://github.com/home-assistant/core/pull/116081
+[#116082]: https://github.com/home-assistant/core/pull/116082
+[#116083]: https://github.com/home-assistant/core/pull/116083
+[#116084]: https://github.com/home-assistant/core/pull/116084
+[#116085]: https://github.com/home-assistant/core/pull/116085
+[#116086]: https://github.com/home-assistant/core/pull/116086
+[#116091]: https://github.com/home-assistant/core/pull/116091
+[#116094]: https://github.com/home-assistant/core/pull/116094
+[#116097]: https://github.com/home-assistant/core/pull/116097
+[#116098]: https://github.com/home-assistant/core/pull/116098
+[#116103]: https://github.com/home-assistant/core/pull/116103
+[#116106]: https://github.com/home-assistant/core/pull/116106
+[#116107]: https://github.com/home-assistant/core/pull/116107
+[#116108]: https://github.com/home-assistant/core/pull/116108
+[#116111]: https://github.com/home-assistant/core/pull/116111
+[#116112]: https://github.com/home-assistant/core/pull/116112
+[#116114]: https://github.com/home-assistant/core/pull/116114
+[#116125]: https://github.com/home-assistant/core/pull/116125
+[#116126]: https://github.com/home-assistant/core/pull/116126
+[#116141]: https://github.com/home-assistant/core/pull/116141
+[#116144]: https://github.com/home-assistant/core/pull/116144
+[#116146]: https://github.com/home-assistant/core/pull/116146
+[#116153]: https://github.com/home-assistant/core/pull/116153
+[#116154]: https://github.com/home-assistant/core/pull/116154
+[#116157]: https://github.com/home-assistant/core/pull/116157
+[#116160]: https://github.com/home-assistant/core/pull/116160
+[#116163]: https://github.com/home-assistant/core/pull/116163
+[#116168]: https://github.com/home-assistant/core/pull/116168
+[#116172]: https://github.com/home-assistant/core/pull/116172
+[#116176]: https://github.com/home-assistant/core/pull/116176
+[#116177]: https://github.com/home-assistant/core/pull/116177
+[#116182]: https://github.com/home-assistant/core/pull/116182
+[#116184]: https://github.com/home-assistant/core/pull/116184
+[#116190]: https://github.com/home-assistant/core/pull/116190
+[#116191]: https://github.com/home-assistant/core/pull/116191
+[#116192]: https://github.com/home-assistant/core/pull/116192
+[#116195]: https://github.com/home-assistant/core/pull/116195
+[#116206]: https://github.com/home-assistant/core/pull/116206
+[#116217]: https://github.com/home-assistant/core/pull/116217
+[#116219]: https://github.com/home-assistant/core/pull/116219
+[#116225]: https://github.com/home-assistant/core/pull/116225
+[#116230]: https://github.com/home-assistant/core/pull/116230
+[#116247]: https://github.com/home-assistant/core/pull/116247
+[#116251]: https://github.com/home-assistant/core/pull/116251
+[#116260]: https://github.com/home-assistant/core/pull/116260
+[#116263]: https://github.com/home-assistant/core/pull/116263
+[#116264]: https://github.com/home-assistant/core/pull/116264
+[#116265]: https://github.com/home-assistant/core/pull/116265
+[#116278]: https://github.com/home-assistant/core/pull/116278
+[#116319]: https://github.com/home-assistant/core/pull/116319
+[#116321]: https://github.com/home-assistant/core/pull/116321
+[#116327]: https://github.com/home-assistant/core/pull/116327
+[#116328]: https://github.com/home-assistant/core/pull/116328
+[#116329]: https://github.com/home-assistant/core/pull/116329
+[#116331]: https://github.com/home-assistant/core/pull/116331
+[#116333]: https://github.com/home-assistant/core/pull/116333
+[#116335]: https://github.com/home-assistant/core/pull/116335
+[#116337]: https://github.com/home-assistant/core/pull/116337
+[#116339]: https://github.com/home-assistant/core/pull/116339
+[#116340]: https://github.com/home-assistant/core/pull/116340
+[#116342]: https://github.com/home-assistant/core/pull/116342
+[#116343]: https://github.com/home-assistant/core/pull/116343
+[#116344]: https://github.com/home-assistant/core/pull/116344
+[#116346]: https://github.com/home-assistant/core/pull/116346
+[#116352]: https://github.com/home-assistant/core/pull/116352
+[#116355]: https://github.com/home-assistant/core/pull/116355
+[#116374]: https://github.com/home-assistant/core/pull/116374
+[#116390]: https://github.com/home-assistant/core/pull/116390
+[#116392]: https://github.com/home-assistant/core/pull/116392
+[#116396]: https://github.com/home-assistant/core/pull/116396
+[#116399]: https://github.com/home-assistant/core/pull/116399
+[#116404]: https://github.com/home-assistant/core/pull/116404
+[#116409]: https://github.com/home-assistant/core/pull/116409
+[#116424]: https://github.com/home-assistant/core/pull/116424
+[#116436]: https://github.com/home-assistant/core/pull/116436
+[#116440]: https://github.com/home-assistant/core/pull/116440
+[#116451]: https://github.com/home-assistant/core/pull/116451
+[#116465]: https://github.com/home-assistant/core/pull/116465
+[#116471]: https://github.com/home-assistant/core/pull/116471
+[#116473]: https://github.com/home-assistant/core/pull/116473
+[#116474]: https://github.com/home-assistant/core/pull/116474
+[#116475]: https://github.com/home-assistant/core/pull/116475
+[#116476]: https://github.com/home-assistant/core/pull/116476
+[#116481]: https://github.com/home-assistant/core/pull/116481
+[#116482]: https://github.com/home-assistant/core/pull/116482
+[#116487]: https://github.com/home-assistant/core/pull/116487
+[#116489]: https://github.com/home-assistant/core/pull/116489
+[#116503]: https://github.com/home-assistant/core/pull/116503
+[#116509]: https://github.com/home-assistant/core/pull/116509
+[#116513]: https://github.com/home-assistant/core/pull/116513
+[#116514]: https://github.com/home-assistant/core/pull/116514
+[#116516]: https://github.com/home-assistant/core/pull/116516
+[#116519]: https://github.com/home-assistant/core/pull/116519
+[#116524]: https://github.com/home-assistant/core/pull/116524
+[#116525]: https://github.com/home-assistant/core/pull/116525
+[#80254]: https://github.com/home-assistant/core/pull/80254
+[#89350]: https://github.com/home-assistant/core/pull/89350
+[#96027]: https://github.com/home-assistant/core/pull/96027
+[@Augar]: https://github.com/Augar
+[@BestPig]: https://github.com/BestPig
+[@Bre77]: https://github.com/Bre77
+[@CFenner]: https://github.com/CFenner
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@Danielhiversen]: https://github.com/Danielhiversen
+[@Darsstar]: https://github.com/Darsstar
+[@Djelibeybi]: https://github.com/Djelibeybi
+[@EuleMitKeule]: https://github.com/EuleMitKeule
+[@FedDam]: https://github.com/FedDam
+[@Fexiven]: https://github.com/Fexiven
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@Lash-L]: https://github.com/Lash-L
+[@Mallonbacka]: https://github.com/Mallonbacka
+[@MarkGodwin]: https://github.com/MarkGodwin
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@Noltari]: https://github.com/Noltari
+[@OnFreund]: https://github.com/OnFreund
+[@PeteRager]: https://github.com/PeteRager
+[@Quentame]: https://github.com/Quentame
+[@RJPoelstra]: https://github.com/RJPoelstra
+[@Shutgun]: https://github.com/Shutgun
+[@Spacetech]: https://github.com/Spacetech
+[@SteveEasley]: https://github.com/SteveEasley
+[@StevenLooman]: https://github.com/StevenLooman
+[@TheFes]: https://github.com/TheFes
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@Thomas55555]: https://github.com/Thomas55555
+[@Tommatheussen]: https://github.com/Tommatheussen
+[@VolkerStolz]: https://github.com/VolkerStolz
+[@agoode]: https://github.com/agoode
+[@albertomontesg]: https://github.com/albertomontesg
+[@allenporter]: https://github.com/allenporter
+[@andarotajo]: https://github.com/andarotajo
+[@ashottonoyan]: https://github.com/ashottonoyan
+[@astrandb]: https://github.com/astrandb
+[@atlflyer]: https://github.com/atlflyer
+[@austinmroczek]: https://github.com/austinmroczek
+[@autinerd]: https://github.com/autinerd
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@beastie29a]: https://github.com/beastie29a
+[@bengtsir]: https://github.com/bengtsir
+[@bieniu]: https://github.com/bieniu
+[@bjpetit]: https://github.com/bjpetit
+[@bouwew]: https://github.com/bouwew
+[@bramkragten]: https://github.com/bramkragten
+[@brave0d]: https://github.com/brave0d
+[@brg468]: https://github.com/brg468
+[@brunohenriquy]: https://github.com/brunohenriquy
+[@c0ffeeca7]: https://github.com/c0ffeeca7
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@cgtobi]: https://github.com/cgtobi
+[@chemelli74]: https://github.com/chemelli74
+[@chrisbraucker]: https://github.com/chrisbraucker
+[@cpfair]: https://github.com/cpfair
+[@crug80]: https://github.com/crug80
+[@dalinicus]: https://github.com/dalinicus
+[@dknowles2]: https://github.com/dknowles2
+[@dontinelli]: https://github.com/dontinelli
+[@edenhaus]: https://github.com/edenhaus
+[@eifinger]: https://github.com/eifinger
+[@elupus]: https://github.com/elupus
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@farmio]: https://github.com/farmio
+[@felipediel]: https://github.com/felipediel
+[@fhoekstra]: https://github.com/fhoekstra
+[@finder39]: https://github.com/finder39
+[@frenck]: https://github.com/frenck
+[@funkybunch]: https://github.com/funkybunch
+[@gagebenne]: https://github.com/gagebenne
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@gnumpi]: https://github.com/gnumpi
+[@grahamwetzler]: https://github.com/grahamwetzler
+[@hahn-th]: https://github.com/hahn-th
+[@hopkins-tk]: https://github.com/hopkins-tk
+[@iMicknl]: https://github.com/iMicknl
+[@ikalnyi]: https://github.com/ikalnyi
+[@isXander]: https://github.com/isXander
+[@janiversen]: https://github.com/janiversen
+[@jayme-github]: https://github.com/jayme-github
+[@jbouwh]: https://github.com/jbouwh
+[@jesserockz]: https://github.com/jesserockz
+[@johnluetke]: https://github.com/johnluetke
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@karwosts]: https://github.com/karwosts
+[@kbx81]: https://github.com/kbx81
+[@kimdv]: https://github.com/kimdv
+[@konstin]: https://github.com/konstin
+[@kotope]: https://github.com/kotope
+[@krzysztof-kwitt]: https://github.com/krzysztof-kwitt
+[@larsvinc]: https://github.com/larsvinc
+[@luca-angemi]: https://github.com/luca-angemi
+[@ludeeus]: https://github.com/ludeeus
+[@lunmay]: https://github.com/lunmay
+[@lyricnz]: https://github.com/lyricnz
+[@malkstar]: https://github.com/malkstar
+[@marcelveldt]: https://github.com/marcelveldt
+[@marcolivierarsenault]: https://github.com/marcolivierarsenault
+[@marcovtwout]: https://github.com/marcovtwout
+[@matrixd2]: https://github.com/matrixd2
+[@max2697]: https://github.com/max2697
+[@mback2k]: https://github.com/mback2k
+[@mdegat01]: https://github.com/mdegat01
+[@miaucl]: https://github.com/miaucl
+[@miawgogo]: https://github.com/miawgogo
+[@mib1185]: https://github.com/mib1185
+[@mill1000]: https://github.com/mill1000
+[@miterion]: https://github.com/miterion
+[@mj23000]: https://github.com/mj23000
+[@mkmer]: https://github.com/mkmer
+[@mletenay]: https://github.com/mletenay
+[@mtielen]: https://github.com/mtielen
+[@mwielgoszewski]: https://github.com/mwielgoszewski
+[@myMartek]: https://github.com/myMartek
+[@myhomeiot]: https://github.com/myhomeiot
+[@nalin29]: https://github.com/nalin29
+[@natekspencer]: https://github.com/natekspencer
+[@nohat]: https://github.com/nohat
+[@orevron]: https://github.com/orevron
+[@osohotwateriot]: https://github.com/osohotwateriot
+[@oyvindwe]: https://github.com/oyvindwe
+[@piitaya]: https://github.com/piitaya
+[@pleum]: https://github.com/pleum
+[@pnbruckner]: https://github.com/pnbruckner
+[@ptashek]: https://github.com/ptashek
+[@puddly]: https://github.com/puddly
+[@r-binder]: https://github.com/r-binder
+[@raman325]: https://github.com/raman325
+[@rappenze]: https://github.com/rappenze
+[@rikroe]: https://github.com/rikroe
+[@rlippmann]: https://github.com/rlippmann
+[@rokam]: https://github.com/rokam
+[@rytilahti]: https://github.com/rytilahti
+[@sdb9696]: https://github.com/sdb9696
+[@shaiu]: https://github.com/shaiu
+[@shawnweeks]: https://github.com/shawnweeks
+[@skgsergio]: https://github.com/skgsergio
+[@splinter98]: https://github.com/splinter98
+[@strawgate]: https://github.com/strawgate
+[@synesthesiam]: https://github.com/synesthesiam
+[@teharris1]: https://github.com/teharris1
+[@the-ress]: https://github.com/the-ress
+[@thecode]: https://github.com/thecode
+[@theminer3746]: https://github.com/theminer3746
+[@thomaskistler]: https://github.com/thomaskistler
+[@timmo001]: https://github.com/timmo001
+[@tomaszsluszniak]: https://github.com/tomaszsluszniak
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@vanbalken]: https://github.com/vanbalken
+[@vexofp]: https://github.com/vexofp
+[@wittypluck]: https://github.com/wittypluck
+[@xeniter]: https://github.com/xeniter
+[@yuxincs]: https://github.com/yuxincs
+[@zxdavb]: https://github.com/zxdavb
diff --git a/source/common-tasks/container.markdown b/source/common-tasks/container.markdown
index 18464daa94c6..bba727053b66 100644
--- a/source/common-tasks/container.markdown
+++ b/source/common-tasks/container.markdown
@@ -3,6 +3,9 @@ title: "Common tasks - Container"
description: "Common tasks for Home Assistant Container"
installation: container
---
+
+## Update
+
{% include common-tasks/update.md %}
{% include common-tasks/specific_version.md %}
{% include common-tasks/beta_version.md %}
diff --git a/source/common-tasks/core.markdown b/source/common-tasks/core.markdown
index 04066e649f21..60ea197ac7e1 100644
--- a/source/common-tasks/core.markdown
+++ b/source/common-tasks/core.markdown
@@ -3,6 +3,9 @@ title: "Common tasks - Core"
description: "Common tasks for Home Assistant Core"
installation: core
---
+
+## Update
+
{% include common-tasks/update.md %}
{% include common-tasks/specific_version.md %}
{% include common-tasks/beta_version.md %}
diff --git a/source/common-tasks/general.markdown b/source/common-tasks/general.markdown
index 251b9d7d0191..e6841034ed42 100644
--- a/source/common-tasks/general.markdown
+++ b/source/common-tasks/general.markdown
@@ -9,4 +9,11 @@ This section provides tasks that do not depend on a specific Home Assistant inst
## Defining a custom polling interval
+Creating an automation for polling gives you more flexibility on when to poll.
+
+Why use an automation instead of changing the integration's configuration for polling?
+
+1. Not all integrations have a configurable polling interval. The homassistant.update_entity service on the other hand works with most of the integrations, no code changes required.
+2. An automation allows you to poll whenever you want. For example, if you have a rate-limited solar panel provider with a maximum number of requests per day, you may want to lower/stop the polling at night but poll more frequently during the day.
+
{% include common-tasks/define_custom_polling.md %}
\ No newline at end of file
diff --git a/source/common-tasks/os.markdown b/source/common-tasks/os.markdown
index 73be58794e5f..24ee35d502ff 100644
--- a/source/common-tasks/os.markdown
+++ b/source/common-tasks/os.markdown
@@ -6,6 +6,71 @@ installation_name: "Operating System"
---
This section will provide guides to some common tasks and information which you will need in order to run, maintain, and edit your Home Assistant OS system. For further details on any particular subject, make sure to refer to the documentation for specific add-ons or topics listed here.
+## Updating Home Assistant
+
+If you have the {% term "Home Assistant Operating System" %} installed, you receive update notifications from different components:
+
+- {% term "Home Assistant Operating System" %}
+- {% term "Home Assistant Supervisor" %}
+- {% term "Home Assistant Core" %}
+- Add-ons, if you have any installed
+
+### Updating the Home Assistant Operating System
+
+Updates of the {% term "Home Assistant Operating System" %} are independent of other updates. They do not trigger repair issues and are usually backward-compatible.
+
+#### Prerequisites
+
+- [Backup](/common-tasks/os/#backups) your installation.
+ - Make sure the backup is downloaded and stored outside of the system.
+ - So that you can restore from that backup in case there is an issue with the system.
+
+#### To update the Home Assistant Operating System
+
+{% tabbed_block %}
+
+- title: Using the UI
+ content: |
+
+ 1. Open the **Settings** panel.
+ 2. On the top you will be presented with an update notification.
+
+ _If you do not see that notification, in the top right, select the three dots menu and select **Check for updates**"._
+
+- title: Using the CLI
+ content: |
+
+ ```bash
+ ha os update
+ ```
+
+ _This updates to the latest version. If you want to update to a specific version instead, use `ha os update --version 12.0`._
+
+{% endtabbed_block %}
+
+#### About boot slots used during the update
+
+The {% term "Home Assistant Operating System" %} uses two boot slots. On first installation, boot slot A is used. After that, on each Operating System update, the other boot slot is updated and reboot is triggered. On that reboot, the system boots from the other boot slot (A ➝ B ➝ A,...). When booting fails, the system automatically uses the previous boot slot, so that it boots from the last working operating system.
+
+#### Changing the boot slot used
+
+You can manually define that the previous boot slot is used. This can be useful in cases where the system boots but something still seems wrong. For example, when the device is no longer correctly detected or you see another issue that might be related to the latest update of the operating system.
+
+1. To check which boot slot is currently in use and what OS versions are installed in the individual slots, in the Home Assistant command line, enter the following command:
+
+ ```bash
+ ha os info
+ ```
+
+2. To change the boot slot, enter the following command:
+ - This will boot into the other (previous) OS version.
+
+ ```bash
+ ha os boot-slot other
+ ```
+
+### Updating Home Assistant Core
+
{% include common-tasks/update.md %}
{% include common-tasks/specific_version.md %}
{% include common-tasks/beta_version.md %}
@@ -18,6 +83,3 @@ This section will provide guides to some common tasks and information which you
{% include common-tasks/lost_password.md %}
{% include common-tasks/third-party-addons.md %}
{% include common-tasks/data_disk.md %}
-{% include common-tasks/flashing_n2_otg.md %}
-{% include common-tasks/enable_i2c.md %}
-
diff --git a/source/common-tasks/supervised.markdown b/source/common-tasks/supervised.markdown
index 23adfe856039..d3dc28b5d619 100644
--- a/source/common-tasks/supervised.markdown
+++ b/source/common-tasks/supervised.markdown
@@ -4,6 +4,9 @@ description: "Common tasks for Home Assistant Supervised"
installation: supervised
installation_name: Supervised
---
+
+## Update
+
{% include common-tasks/update.md %}
{% include common-tasks/specific_version.md %}
{% include common-tasks/beta_version.md %}
diff --git a/source/dashboards/actions.markdown b/source/dashboards/actions.markdown
index 31de1e1b0aa8..a22d473b0388 100644
--- a/source/dashboards/actions.markdown
+++ b/source/dashboards/actions.markdown
@@ -1,11 +1,28 @@
---
title: "Actions"
description: "Define what an object does when interacted with."
+related:
+ - docs: /dashboards/button/
+ title: Button card
+ - docs: /dashboards/entities/
+ title: Entities card
+ - docs: /dashboards/glance/
+ title: Glance card
+ - docs: /dashboards/light/
+ title: Light card
+ - docs: /dashboards/picture/
+ title: Picture card
+ - docs: /dashboards/picture-elements/
+ title: Picture element card
+ - docs: /dashboards/picture-entity/
+ title: Picture entity card
+ - docs: /dashboards/picture-glance/
+ title: Picture glance card
---
Some cards have support for tap actions. These actions define what will happen when you tap or hold on an object within a card.
-Actions can be enabled on:
+Actions can be enabled on the following cards:
- [Button](/dashboards/button/)
- [Entities](/dashboards/entities/)
@@ -16,7 +33,7 @@ Actions can be enabled on:
- [Picture entity](/dashboards/picture-entity/)
- [Picture glance](/dashboards/picture-glance/)
-## Tap-Action
+## Tap action
Action that will be performed when an object on a card is tapped.
@@ -78,7 +95,7 @@ tap_action:
default: none
{% endconfiguration %}
-## Hold Action
+## Hold action
Action that will be performed when an object on a card is tapped, held for at least half a second and then released. Action will only be triggered once, not continuously during hold.
@@ -140,7 +157,7 @@ hold_action:
default: none
{% endconfiguration %}
-## Double-Tap Action
+## Double tap action
Action that will be performed when an object on a card is double-tapped.
diff --git a/source/dashboards/badges.markdown b/source/dashboards/badges.markdown
index 0a32b826a5ea..198b11f4105a 100644
--- a/source/dashboards/badges.markdown
+++ b/source/dashboards/badges.markdown
@@ -5,6 +5,11 @@ description: "Description of the various badges that are available."
Badges are widgets that sit at the top of a panel, above all the cards.
+
+
+ Badges at the top of a panel.
+
+
## State Label Badge
The State Label badge allows you to display a state badge. This badge supports [actions](/dashboards/actions/).
@@ -14,7 +19,7 @@ type: state-label
entity: light.living_room
```
-{% configuration state_label %}
+{% configuration state_badge %}
type:
required: true
description: "`state-label`"
@@ -57,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:
@@ -88,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: 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
+above:
required: false
- description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=` or `regex`.
+ description: Entity state or ID to be above this value.*
type: string
-attribute:
+below:
required: false
- description: Attribute of the entity to use instead of the state.
+ description: Entity state or ID to be below this value.*
type: string
{% endconfiguration %}
-### Examples
+*at least one is required (`above` or `below`), both are also possible for values between.
+
+### Screen
-Show only active switches or lights in the house
+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 %}
+
+## Legacy state filters
+
+### String filter
+
+Show only active switches or lights in the house.
```yaml
type: entity-filter
@@ -128,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
@@ -145,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
+```
diff --git a/source/dashboards/cards.markdown b/source/dashboards/cards.markdown
index 4f50fa2ba0fc..8d707a46dbf8 100644
--- a/source/dashboards/cards.markdown
+++ b/source/dashboards/cards.markdown
@@ -1,8 +1,90 @@
---
title: "Cards"
-description: "Cards."
+description: "Introduction to the role of cards on the dashboard and how to add a card."
+related:
+ - docs: /dashboards/actions/
+ title: Card tap actions
+ - docs: /dashboards/features/
+ title: Card features
+ - docs: /dashboards/header-footer/
+ title: Card header and footer widgets
+ - docs: /dashboards/views/
+ title: Views
+ - docs: /dashboards/
+ title: Introduction to dashboards
+ - docs: /dashboards/#get-started-with-your-own-dashboard/
+ title: Take control of the default dashboard
---
-Your dashboard is made up of Cards.
+Each dashboard is made up of cards.
-There are several built-in card types, each with their own configuration options. Select a card from the menu to view additional details and the options for that card.
\ No newline at end of file
+
+
+Screenshot of the masonry view with different types of cards.
+
+
+## Card categories
+
+There are several different card types, each with their own configuration options. They can be categorized in terms of their function:
+
+- **Specific to a device type or service**: alarm, light, humidifier, thermostat, plant status, media control, weather forecast, shopping list, map, logbook, and calendar card
+- **Grouping other cards**: vertical stack, horizontal stack, and grid card
+- **Logic function**: conditional and entity filter card
+- **Display generic data**: sensor, history graph, statistic, statistics graph, energy, gauge, and webpage card
+- **Control devices and entities**: button and entity card
+- **Display data and control entities**: area, picture elements, and picture glance card
+
+## Card actions, features, header and footer widgets
+
+Some cards have support for [tap actions](/dashboards/actions/). These actions define what will happen when you tap or hold on an object within a card.
+
+Some cards have support for [features](/dashboards/features/). These widgets add quick controls to the card. Supported features depend on the card and entity capabilities. Multiple features can be added to a single card.
+
+
+Screenshot of tile cards with features.
+
+
+Some cards have support for [header and footer widgets](/dashboards/header-footer/). These widgets fill up the entire available space in a card.
+
+
+Screenshot of an entities card with a picture header and buttons footer.
+
+
+## Adding cards to your dashboard
+
+1. If this is your first time editing a dashboard, [take control of the default dashboard](/dashboards/#get-started-with-your-own-dashboard).
+
+2. Choose one of the two methods to add cards to a dashboard:
+
+{% details "Using the Add card button" %}
+
+1. In the bottom right, select **Add card**.
+
+2. There are two methods to add a card: **By card** type and **By entity**:
+ - **By card** type:
+ - If you have an idea of what card type you want to use for an entity, browse the list of available cards.
+ - If you are using the **Sections** view, try the **Tile** card in the **Suggested cards** section.
+ ![Add card by Card type dialog](/images/blog/2024-03-dashboard-chapter-1/sections-add-card-by-card.png)
+
+ - **By entity**:
+ - If you want to add multiple entities at once, select them from the list.
+ - Then, select **Continue**.
+ ![Screenshot add cards by entity](/images/dashboards/dashboard_add-by-entity_02.png)
+
+3. Select **Add to dashboard**.
+ ![Screenshot card suggestions](/images/dashboards/dashboard_add-by-entity_04.png)
+
+{% enddetails %}
+
+{% details "Using the Add to dashboard button on device page" %}
+
+Another way to add entities to a dashboard is to use the **Device** page.
+
+1. Go to **{% my integrations title="Settings > Devices & services" %}**.
+2. On the integration card of interest, select **Devices**.
+ - If there are multiple devices, select the device from the list.
+
+3. In the **Controls** section, select **Add to Dashboard**.
+ ![Add to Dashboard button on the device page](/images/blog/2024-03-dashboard-chapter-1/sections-add-from-device-page.jpg)
+
+{% enddetails %}
diff --git a/source/dashboards/dashboards.markdown b/source/dashboards/dashboards.markdown
index 56cdacd8f9ef..bb40bb191abc 100644
--- a/source/dashboards/dashboards.markdown
+++ b/source/dashboards/dashboards.markdown
@@ -1,15 +1,116 @@
---
-title: "Multiple Dashboards"
+title: "Multiple dashboards"
description: "Multiple powerful and configurable dashboards in Home Assistant."
+related:
+ - docs: /integrations/logbook/
+ title: Logbook integration
+ - docs: /integrations/history/
+ title: History integration
+ - docs: /integrations/todo/
+ title: To-do list integration
+ - docs: /dashboards/views/
+ title: Views
+ - docs: /dashboards/iframe/
+ title: Webpage card
---
You can define multiple dashboards in Home Assistant. Each dashboard can be added to the sidebar. This makes it possible to create separate control dashboards for each individual part of your house.
-You can manage your dashboards via the user interface. Go to **Settings** -> **Dashboards**. Here you can see all defined dashboards and create new ones.
+Under {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}, you can see your own dashboards and some of the predefined ones.
-## Using YAML for the default dashboard
+
+
+Screenshot of the Dashboard list.
+
-To change the default dashboard, create a new file `ui-lovelace.yaml` in your configuration directory and add the following section to your `configuration.yaml` and restart Home Assistant:
+## Home Assistant default dashboards
+
+Home Assistant ships with some dashboards out of the box:
+
+- Overview
+- Energy
+- [Map](#map-dashboard)
+- Logbook
+- History
+- To-do lists
+
+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 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
+
+The predefined **Logbook** dashboard is powered by the [Logbook integration](/integrations/logbook/). To control which events to show or filter out, refer to the documentation of the Logbook integration.
+
+### History dashboard
+
+The predefined **History** dashboard is powered by the [History integration](/integrations/history/). To learn about the data sources used and how to export data, refer to the documentation of the History integration.
+
+### To-do lists dashboard
+
+The predefined **To-do lists** dashboard is powered by the [To-do integration](/integrations/todo/). To learn how to use to-do and shopping lists, refer to the documentation of the to-do list integration.
+
+## Webpage dashboard
+
+Another available (but not default) dashboard is the webpage dashboard. The webpage dashboard allows you to add and embed a webpage to your dashboard.
+This could be a web page from the internet or a local web page from a local
+machine or device like your router or NAS. The webpage dashboard uses the [webpage card](/dashboards/iframe/).
+
+
+
+This dashboard replaces the old iFrame panel (`iframe_panel`). If you have
+existing panels configured in your YAML configuration, Home Assistant will
+automatically migrate them to the new webpage dashboard on upgrade.
+
+
+
+Note that not every webpage can be embedded due to security restrictions that
+some sites have in place. These restrictions are enforced by your browser and prevent
+embedding them into a Home Assistant dashboard.
+
+## Creating a new dashboard
+
+The default **Overview** dashboard updates itself when you add new devices, as long as you do not edit the default dashboard. If you want a customized dashboard, it is recommended not to change the **Overview** dashboard, but to create a new dashboard instead.
+
+This will leave the default dashboard intact.
+
+1. Go to {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}.
+2. Select **Add dashboard**.
+ ![Screenshot of the dashboard list](/images/dashboards/dashboard-manage-02.png)
+3. In the dialog, choose one of the options:
+ - If you want to start with a pre-populated dashboard, choose **Default dashboard**.
+ - If you want to start with a completely empty dashboard, choose **New dashboard from scratch**.
+4. In the **Add new dashboard** dialog, enter a name and select an icon.
+ - Define if this dashboard should be visible only to the admin user.
+ - Define if you want the dashboard to be listed in the sidebar.
+ - Select **Create**.
+ - **Result**: The dashboard is added.
+5. Open your new dashboard and in the top right of the screen, select the button.
+6. If you chose **Default dashboard**, you need to take control before you can edit it:
+ - The **Edit dashboard** dialog appears.
+ - By editing the dashboard, you are taking over control of this dashboard.
+ - This means that it is no longer automatically updated when new dashboard elements become available.
+ - To continue, in the dialog, select the three dots menu, then select **Take control**.
+7. You can now [add a card](/dashboards/cards/#adding-cards-to-your-dashboard) or [add a view](/dashboards/views/#adding-a-view-to-a-dashboard).
+
+## Deleting a dashboard
+
+If you do not use one of the predefined dashboards, or created a dashboard you no longer need, you can delete that dashboard. It will then no longer show in the sidebar.
+
+1. Go to {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}.
+2. From the list of dashboards, select the dashboard you want to delete.
+3. In the dialog, select **Delete**.
+ ![Deleting a dashboard](/images/dashboards/delete_dashboard.png)
+
+## Using YAML for the Overview dashboard
+
+To change the **Overview** dashboard, create a new file `ui-lovelace.yaml` in your configuration directory and add the following section to your `configuration.yaml` and restart Home Assistant:
```yaml
lovelace:
@@ -18,9 +119,9 @@ lovelace:
A good way to start this file is to copy and paste the "Raw configuration" from the UI so your manual configuration starts the same as your existing UI.
-- Click `Overview` in your sidebar.
-- Click the three dots menu (top-right) and click on `Edit Dashboard`.
-- Click the three dots menu again and click on `Raw configuration editor`.
+- In your sidebar, select **Overview**.
+- In the top-right corner, select the pencil icon.
+- Select the three dots menu and select **Raw configuration editor**.
- There you see the configuration for your current dashboard. Copy that into the `/ui-lovelace.yaml` file.
Once you take control of your UI via YAML, the Home Assistant interface for modifying it won't be available anymore and new entities will not automatically be added to your UI.
diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown
index 62d1af628f5f..093d3393e88c 100644
--- a/source/dashboards/features.markdown
+++ b/source/dashboards/features.markdown
@@ -1,6 +1,13 @@
---
title: "Features for dashboard cards"
description: "Decorate your dashboard cards with quick controls."
+related:
+ - docs: /dashboards/humidifier/
+ title: Humidifier card
+ - docs: /dashboards/thermostat/
+ title: Thermostat card
+ - docs: /dashboards/tile/
+ title: Tile card
---
Some dashboard cards have support for features. These widgets add quick controls to the card. Supported features depend on the card and entity capabilities. Multiple features can be added to a single card.
@@ -9,6 +16,12 @@ Some dashboard cards have support for features. These widgets add quick controls
Screenshot of tile cards with features.
+Features can be enabled on the following cards:
+
+- [Humidifier](/dashboards/humidifier/)
+- [Thermostat](/dashboards/thermostat/)
+- [Tile](/dashboards/tile/)
+
## Alarm modes
Widget that displays buttons to arm and disarm an [alarm](/integrations/alarm_control_panel).
@@ -104,6 +117,11 @@ type:
required: true
description: "`climate-hvac-modes`"
type: string
+style:
+ required: false
+ description: "How the modes should be displayed. It can be either `dropdown` or `icons`."
+ type: string
+ default: icons
hvac_modes:
required: true
description: List of modes to show on the card. The list can contain `auto`, `heat_cool`, `heat`, `cool`, `dry`, `fan_only`, and `off`.
@@ -228,6 +246,42 @@ type:
type: string
{% endconfiguration %}
+## Fan preset modes
+
+Widget that displays buttons or icons to control the preset mode for a [fan](/integrations/fan).
+
+
+
+ Screenshot of the tile card with the fan preset modes feature
+
+
+```yaml
+features:
+ - type: "fan-preset-modes"
+ style: "icons"
+ preset_modes:
+ - auto
+ - smart
+ - sleep
+ - 'on'
+```
+
+{% configuration features %}
+type:
+ required: true
+ description: "`fan-preset-modes`"
+ type: string
+style:
+ required: false
+ description: "How the preset modes should be displayed. It can be either `dropdown` or `icons`."
+ type: string
+ default: dropdown
+preset_modes:
+ required: true
+ description: List of preset modes to show on the card. The list can contain any supported preset modes.
+ type: list
+{% endconfiguration %}
+
## Fan speed
Widget that displays speed controls for a [fan](/integrations/fan).
@@ -374,6 +428,48 @@ type:
type: string
{% endconfiguration %}
+## Lock commands
+
+Widget that displays buttons to lock or unlock a [lock](/integrations/lock).
+
+
+
+ Screenshot of the tile card with the lock commands feature
+
+
+```yaml
+features:
+ - type: "lock-commands"
+```
+
+{% configuration features %}
+type:
+ required: true
+ description: "`lock-commands`"
+ type: string
+{% endconfiguration %}
+
+## Lock open door
+
+Widget that displays a button to [open a door](/integrations/lock).
+
+
+
+ Screenshot of the tile card with the lock open door feature
+
+
+```yaml
+features:
+ - type: "lock-open-door"
+```
+
+{% configuration features %}
+type:
+ required: true
+ description: "`lock-open-door`"
+ type: string
+{% endconfiguration %}
+
## Numeric input
Widget that displays a slider or buttons to set the value for a [number](/integrations/number) or [input number](/integrations/input_number).
@@ -443,6 +539,33 @@ type:
type: string
{% endconfiguration %}
+## Update actions
+
+Widget that displays actions to install or skip an [update](/integrations/update).
+
+
+
+ Screenshot of the tile card with update actions feature
+
+
+```yaml
+features:
+ - type: "update-actions"
+ backup: "ask"
+```
+
+{% configuration features %}
+type:
+ required: true
+ description: "`update-actions`"
+ type: string
+backup:
+ required: false
+ description: Whether a backup should be done before updating. The value can be `ask`, `yes`, or `no`. `ask` will open a dialog to ask if a backup should be done.
+ type: list
+ default: ask
+{% endconfiguration %}
+
## Vacuum commands
Widget that displays buttons to control a [vacuum](/integrations/vacuum).
@@ -506,3 +629,4 @@ operation_modes:
description: List of modes to show on the card. The list can contain `electric`, `gas`, `heat_pump`, `eco`, `performance`, `high_demand`, and `off`.
type: list
{% endconfiguration %}
+
diff --git a/source/dashboards/header-footer.markdown b/source/dashboards/header-footer.markdown
index 5e25b4241755..2b80e0720eb4 100644
--- a/source/dashboards/header-footer.markdown
+++ b/source/dashboards/header-footer.markdown
@@ -1,6 +1,15 @@
---
title: "Headers & Footers for dashboard cards"
description: "Decorate your dashboard cards with header and footer widgets."
+related:
+ - docs: /integrations/entity/
+ title: Entity
+ - docs: /integrations/entities/
+ title: Entities
+ - docs: /integrations/statistics/
+ title: Statistics
+ - docs: /integrations/actions/
+ title: Card actions
---
Some dashboard cards have support for header and footer widgets. These widgets fill up the whole available space in a card.
@@ -9,6 +18,12 @@ Some dashboard cards have support for header and footer widgets. These widgets f
Screenshot of an entities card with a picture header and buttons footer.
+Header and footer can be used on the following cards:
+
+- [Entity](/dashboards/entity/)
+- [Entities](/dashboards/entities/)
+- [Statistics](/dashboards/statistics/)
+
## Picture header & footer
Widget to show a picture as a header or a footer. A picture can have touch actions associated with it.
diff --git a/source/dashboards/index.markdown b/source/dashboards/index.markdown
index 6a9165268bb0..b0248d37ab86 100644
--- a/source/dashboards/index.markdown
+++ b/source/dashboards/index.markdown
@@ -1,32 +1,44 @@
---
title: "Dashboards"
description: "Powerful and configurable dashboards for Home Assistant."
+related:
+ - docs: /integrations/entity/
+ title: Dashboard themes
+ - docs: /dashboards/dashboards/#creating-a-new-dashboard
+ title: Creating a new dashboard
+ - docs: /dashboards/cards/
+ title: About cards
+ - url: https://demo.home-assistant.io
+ title: Interactive dashboard demo
+ - url: https://home-assistant-cards.bessarabov.com/
+ title: Home Assistant cards
+ - url: https://github.com/custom-cards
+ title: Community custom cards
---
-Home Assistant dashboards are a fast, customizable and powerful way for users to manage their home using their mobiles and desktops.
+Home Assistant dashboards allow you to display information about your smart home. Dashboards are customizable and provide a powerful way to manage your home from your mobile or desktop.
-- 29 different cards to place and configure as you like.
-- Dashboard Editor: Allows you to manage your dashboard by including a live preview when editing cards.
-- Fast: Using a static configuration allows us to build up the dashboard once.
-- Customizable:
- - Cards have a number of options which help to configure your data as required.
- - Themes (even at a per card basis).
- - Ability to override names and icons of entities.
- - Custom Cards from our amazing community are fully supported.
+You can customize your dashboard using various options:
-To start, go to the Home Assistant Overview page, click on the three dots at the top right of the screen and select 'Edit Dashboard'. Then click on the blue '+ Add Card' icon at the bottom right and select a card to add.
+- Different card types to visualize your data and control your smart home devices.
+- [Themes](/integrations/frontend/#defining-themes) (even at a per card basis).
+- Override names and icons of entities.
+- Use custom cards from our amazing community.
-
+
+
+Screencast showing how to edit a dashboard and customize a vertical stack card.
+
-To try it yourself, check out [the demo](https://demo.home-assistant.io).
+## Explore the interactive demo dashboard
+
+Try it yourself with [the interactive demo](https://demo.home-assistant.io).
+
+## Get started with your own dashboard
+
+To create your own dashboard, follow the steps on [creating a new dashboard](/dashboards/dashboards/#creating-a-new-dashboard).
## Discuss dashboard
- Suggestions are welcome in the [frontend repository](https://github.com/home-assistant/frontend/)
- For help with dashboards, join the `#frontend` channel on [our chat](/join-chat/) or [our forums](https://community.home-assistant.io/c/projects/frontend)
-
-## Additional Resources
-
-- [Community Custom Cards](https://github.com/custom-cards)
-- [Home Assistant Cards](https://home-assistant-cards.bessarabov.com/)
-- [Material Design Icons](https://pictogrammers.com/library/mdi/)
diff --git a/source/dashboards/views.markdown b/source/dashboards/views.markdown
index 27423182592b..7ca8f3ef4e07 100644
--- a/source/dashboards/views.markdown
+++ b/source/dashboards/views.markdown
@@ -1,19 +1,64 @@
---
title: "Views"
description: "A view is a tab inside a dashboard."
+related:
+ - docs: /dashboards/masonry/
+ title: Masonry view
+ - docs: /dashboards/panel/
+ title: Panel view
+ - docs: /dashboards/sidebar/
+ title: Sidebar view
+ - docs: /dashboards/sections/
+ title: Sections view
+ - docs: /dashboards/
+ title: About dashboards
+ - docs: /dashboards/cards/#adding-cards-to-your-dashboard
+ title: Adding cards to a view
---
-A View is a tab inside a dashboard.
-To display cards on the UI you have to define them in views.
+A view is a tab inside a dashboard. For example, the screenshot below shows a separate view for lights on the Overview dashboard.
-You can add a view to your user interface, by clicking the menu (three dots at the top right of the screen) and then **Edit Dashboard**.
-Click the `+` button in the top menu bar.
+
+
+ A lights view tab on the Overview dashboard
+
+
+Views control the layout.
-
-
- Use titles and icons to describe the content of views.
+
+
+ The three basic view layouts: panel, sidebar, and masonry
+There are four different view types:
+
+- **Panel**: Displays one card in full width. For example a map or an image.
+- **Sidebar**: Arranges cards in 2 columns, a wide one and a smaller one on the right.
+- **Masonry (default)**: Arranges cards in columns based on their card size.
+- **Sections (experimental)**: Arranges cards in a grid system and lets you group them in sections.
+
+It is currently not possible to migrate your dashboard from one view type into another. For example, if you have a dashboard in masonry view, and want it in sections view, you need to create a new view.
+
+## Adding a view to a dashboard
+
+1. To add a view to your user interface, in the top right corner, select the pencil icon.
+2. Select the `+` button in the top menu bar.
+
+ ![Views toolbar](/images/dashboards/views.png)
+
+3. Define the view settings:
+ - If you want a view title, enter the **Title**.
+ - If you want to see an icon, select the icon.
+ - Note: If an icon is defined, the title text only shows as a tooltip.
+ - We use [Material icons](https://pictogrammers.com/library/mdi/).
+ - Select the view type.
+
+ ![The create new view configuration dialog](/images/dashboards/dashboard_view_configuration_01.png)
+
+4. On the **Badges** tab, add badges, if any.
+ - Note that the sidebar and panel views do not support badges.
+5. If this view should not be visible for some users, on the **Visibility** tab, disable the view for those users.
+
## Path
You can link to one view from a card in another view when using cards that support navigation (`navigation_path`). The string supplied here will be appended to the string `/lovelace/` to create the path to the view. Do not use special characters in paths. Do not begin a path with a number. This will cause the parser to read your path as a view index.
diff --git a/source/getting-started/automation.markdown b/source/getting-started/automation.markdown
index 57932a8c3831..024912d4b0de 100644
--- a/source/getting-started/automation.markdown
+++ b/source/getting-started/automation.markdown
@@ -3,33 +3,38 @@ title: "Automating Home Assistant"
description: "A quick intro on getting your first automation going."
---
-Once your {% term devices %} are set up, it's time to put the cherry on the pie: {% term automation %}. In this guide we're going to create a simple automation rule to turn on the lights when the sun sets. Of course, this assumes that you have set up an integration that provides a light at this point.
+Once your {% term devices %} are set up, it's time to put the cherry on the pie: {% term automation %}. We're going to create a simple automation to turn on the lights when the sun sets. Of course, this assumes that you have set up an integration that provides a light at this point.
-In the user interface in the sidebar, click **{% my automations title="Settings > Automations & Scenes" %}**. You will now see the automation screen from which you can manage all the automations in Home Assistant.
+## Automatically turn on the lights before sunset
-![The automation editor.](/images/getting-started/automation-editor.png)
+1. Go to {% my automations title="**Settings** > **Automations & scenes**" %} and in the lower right corner, select the **Create Automation** button.
-Click the blue button at the bottom right to create a new automation. A dialog will appear. Choose **Create new automation**. You are presented with a blank automation screen.
+ ![The automation editor.](/images/getting-started/automation-editor.png)
-![The start of a new automation.](/images/getting-started/new-automation.png)
+ - You are presented with a blank automation screen.
-The first thing we will do is set a name. Enter "Turn Lights On at Sunset".
+ ![The start of a new automation.](/images/getting-started/new-automation.png)
-The second step is defining what should {% term trigger %} our automation to run. In this case, we want to use the event of the sun setting to trigger our automation. However, if we would turn on the lights when the sun actually sets, it would be too late as it already gets quite dark while it's setting. So we're going to add an offset.
+2. The first step is defining what should {% term trigger %} the automation to run.
+ - In this case, we want to use the event of the sun setting to trigger our automation.
+ - Select **Add trigger**, type `Sun` and select it.
+ ![Use the sun as trigger.](/images/getting-started/sun-trigger.png)
+3. Select **Sunset**.
+ - We want the automation to be triggered a little before that, so let's add `-00:30` as the offset. This indicates that the automation will be triggered 30 minutes before sunset. Neat!
-In the trigger section, click on the dropdown menu and change the trigger type to **Sun**. It allows us to choose sunrise or sunset, so go ahead and pick **Sunset**. As we discussed, we want our automation to be triggered a little before the sun actually sets, so let's add `-00:30` as the offset. This indicates that the automation will be triggered 30 minutes before the sun actually sets. Neat!
+ ![A new automation with a sun trigger filled in.](/images/getting-started/new-trigger.png)
-![A new automation with a sun trigger filled in.](/images/getting-started/new-trigger.png)
+4. Once we have defined our trigger, we need to define what should happen.
+ - Select **Add action**.
+ - Type `Ser` and select **Call service**
+5. Select **Light** > **Turn on** or directly enter `light.turn_on`.
+ - For this automation, we're going to turn on all lights in the living room, so let's select the **Area**.
+ - This only works if your lights are assigned to an {% term area %}.
-Once we have defined our trigger, scroll down to the action section. Make sure the action type is set to **Call service** and change the service to `light.turn_on`. For this automation we're going to turn on all lights, so let's change the service data to:
+ ![A new automation with the action set up to turn on the lights in the living room.](/images/getting-started/action.png)
-```yaml
-entity_id: all
-```
-
-![A new automation with the action set up to turn on the lights.](/images/getting-started/action.png)
-
-Click the orange button to save the automation. Now wait till it's 30 minutes until the sun sets and see your automation magic!
+6. To save the automation, select **Save**, give the automation a name and **Save** again.
+ - Now wait till it's 30 minutes until the sun sets and see your automation magic!
{% include getting-started/next_step.html step="Presence detection" link="/getting-started/presence-detection/" %}
diff --git a/source/getting-started/concepts-terminology.markdown b/source/getting-started/concepts-terminology.markdown
index 6c1a71dc11c9..a53e51760532 100644
--- a/source/getting-started/concepts-terminology.markdown
+++ b/source/getting-started/concepts-terminology.markdown
@@ -4,21 +4,15 @@ description: "Explaining some Home Assistant basics"
---
Now you're in Home Assistant, let's look at the most important concepts.
-## Dashboards
-
-The **Overview** dashboard is the first page you see after the [onboarding process](/getting-started/onboarding). Dashboards are customizable pages to display information in Home Assistant. By default, there are two dashboards: **Overview** and **Energy**. The image below shows a customized example of the **Overview** dashboard. If you just onboarded, your dashboard will be nearly empty. To learn how to customize your dashboards, refer to the [dashboard](/dashboards) documentation.
-
-![Dashboard](/images/getting-started/lovelace.png)
-
## Integrations
-Integrations are pieces of software that allow Home Assistant to connect to other software and platforms. For example, a product by Philips called Hue would use the Philips Hue {% term integration %} and allow Home Assistant to talk to the hardware controller Hue Bridge. Any Home Assistant compatible {% term devices %} connected to the Hue Bridge would appear in Home Assistant as [devices](#devices--entities).
+Integrations are pieces of software that allow Home Assistant to connect to other software and platforms. For example, a product by Philips called Hue would use the Philips Hue {% term integration %} and allow Home Assistant to talk to the hardware controller Hue Bridge. Any Home Assistant compatible {% term devices %} connected to the Hue Bridge would appear in Home Assistant as [devices](#devices).
![Integrations](/images/getting-started/integrations-new.png)
For a full list of compatible {% term integrations %}, refer to the [integrations](/integrations) documentation.
-Once an {% term integration %} has been added, the hardware and/or data are represented in Home Assistant as [devices and entities](#devices--entities).
+Once an {% term integration %} has been added, the hardware and/or data are represented in Home Assistant as [devices and entities](#devices).
## Entities
@@ -32,18 +26,24 @@ Devices are a logical grouping for one or more {% term entities %}. A {% term de
Devices and entities are used throughout Home Assistant. To name a few examples:
-- [Dashboards](#dashboards) can show a state of an {% term entity %}. For example, if a light is on or off.
+- [Dashboards](/getting-started/onboarding_dashboard/) can show a state of an {% term entity %}. For example, if a light is on or off.
- An [automation](#automations) can be triggered from a state change on an {% term entity %}. For example, a motion sensor entity detects motion and triggers a light to turn on.
- A predefined color and brightness setting for a light saved as a [scene](#scenes).
![Home Assistant device](/images/getting-started/home-assistant-device_02.png)
+## Areas
+
+An area in Home Assistant is a logical grouping of {% term devices %} and {% term entities %} that are meant to match areas (or rooms) in the physical world: your home. For example, the `living room` area groups devices and entities in your living room. Areas allow you to target service calls at an entire group of devices. For example, turning off all the lights in the living room.
+Locations within your home such as living room, dance floor, etc. Areas can be assigned to {% term floors %}.
+Areas can also be used for automatically generated cards, such as the [Area card](/dashboards/area/).
+
## Automations
A set of repeatable {% term actions %} that can be set up to run automatically. Automations are made of three key components:
1. Triggers - events that start an {% term automation %}. For example, when the sun sets or a motion sensor is activated.
-2. Conditions - optional tests that must be met an {% term action %} can be run. For example, if someone is home.
+2. Conditions - optional tests that must be met before an {% term action %} can be run. For example, if someone is home.
3. Actions - interact with {% term devices %} such as turn on a light.
To learn the basics about {% term automations %}, refer to the [automation basics](/docs/automation/basics/) page or try [creating an automation](/getting-started/automation) yourself.
@@ -70,4 +70,4 @@ Depending on your [installation type](/installation), you can install third part
![Add-ons](/images/getting-started/add-ons.png)
-{% include getting-started/next_step.html step="Adding Integrations In Home Assistant" link="/getting-started/integration/" %}
+{% include getting-started/next_step.html step="Edit the dashboard" link="/getting-started/onboarding_dashboard/" %}
diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown
index 8c1849ef3c87..b18abfa0212f 100644
--- a/source/getting-started/configuration.markdown
+++ b/source/getting-started/configuration.markdown
@@ -41,7 +41,7 @@ Now let's make a change using the file editor: we are going to change the name,
- Click the save icon in the top right to commit changes.
- - Most changes in `configuration.yaml` require Home Assistant to be restarted to see the changes. You can verify that your changes are acceptable by running a configuration check. Do this by navigating to {% my server_controls title="Developer Tools > YAML" %} and and then clicking on the **Check configuration** button. When it's valid, it will show the text "Configuration valid!". In order for the **Check Configuration**" button to be visible, you must enable **Advanced Mode** on your user profile.
+ - Most changes in `configuration.yaml` require Home Assistant to be restarted to see the changes. You can verify that your changes are acceptable by running a configuration check. Do this by navigating to {% my server_controls title="Developer Tools > YAML" %} and then clicking on the **Check configuration** button. When it's valid, it will show the text "Configuration valid!". In order for the **Check Configuration**" button to be visible, you must enable **Advanced Mode** on your user profile.
- Now restart Home Assistant. You can do so by either using the **Restart** option in the ⚙ menu of the File Editor UI or by navigating to {% my system_dashboard title="Settings > System" %} and then clicking on the **Restart** button on the top right of the page.
![Screenshot of the "General" page in the configuration panel.](/images/screenshots/configuration-validation.png)
diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown
index 6ebe6f8ede82..4e8fa10bf8f4 100644
--- a/source/getting-started/index.markdown
+++ b/source/getting-started/index.markdown
@@ -1,5 +1,5 @@
---
-title: "Getting Started"
+title: "Getting started"
description: "Getting started with Home Assistant"
body_id: getting_started
show_title: true
@@ -7,8 +7,8 @@ show_title: true
{% include getting-started/next_step.html step="Installation" link="/installation/" %}
{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %}
-{% include getting-started/next_step.html step="Edit the dashboard" link="/getting-started/onboarding_dashboard/" %}
{% include getting-started/next_step.html step="Concepts and terminology" link="/getting-started/concepts-terminology/" %}
+{% include getting-started/next_step.html step="Edit the dashboard" link="/getting-started/onboarding_dashboard/" %}
{% include getting-started/next_step.html step="Integration" link="/getting-started/integration/" %}
{% include getting-started/next_step.html step="Automation" link="/getting-started/automation/" %}
{% include getting-started/next_step.html step="Presence detection" link="/getting-started/presence-detection/" %}
diff --git a/source/getting-started/onboarding.markdown b/source/getting-started/onboarding.markdown
index 24051d20fe76..e9df380e60b7 100644
--- a/source/getting-started/onboarding.markdown
+++ b/source/getting-started/onboarding.markdown
@@ -26,7 +26,9 @@ We will now create the owner's account of Home Assistant. This account is an adm
- Continue with the procedure on [restoring from backup](/common-tasks/os/#restoring-a-backup).
- Ignore the rest of this procedure. The following steps describe how to create a new installation, not how to restore from backup.
2. If this is your initial installation, select **Create my smart home**.
-3. Enter a name, username, and password. Select **Create account**.
+3. Enter a name, username, and password.
+ - Store the name, username, and password in a password manager. There is no way to recover the owner credentials.
+ - Select **Create account**.
![Set your username and password.](/images/getting-started/username.png)
diff --git a/source/getting-started/onboarding_dashboard.markdown b/source/getting-started/onboarding_dashboard.markdown
index bef7cd9eeb5e..a4e35a2ece26 100644
--- a/source/getting-started/onboarding_dashboard.markdown
+++ b/source/getting-started/onboarding_dashboard.markdown
@@ -3,49 +3,142 @@ title: "Edit the dashboard"
description: "Instructions on editing the dashboard for the first time"
---
+Dashboards are customizable pages to display information about your smart home devices.
+
+## Dashboards, cards, and views
+
+The screenshot shows an **Overview** dashboard with many [cards](/dashboards/cards/) to represent sensor values. For example, the status of some lights, a media player, and some temperature values. It also shows control elements. For example, you can change the ventilation, the color of the lights, or turn on a smart TV and start YouTube.
+
+### Views
+
+The icons in the blue menu bar on top each represent a different tab. Each tab contains a [view](/dashboards/views/).
+
+
+
+Screenshot of a populated Overview dashboard with many devices.
+
+
+### Multiple dashboards
+
+In the sidebar on the left, you see the names of different dashboards. Home Assistant comes with [multiple dashboards](/dashboards/dashboards/) out of the box.
+
+- Overview
+- Energy
+- Map
+- Logbook
+- History
+- To-do lists
+
## First contact with the Overview dashboard
-The procedure below is optional. The idea is to learn some basics on changing the dashboard.
+The **Overview** [dashboard](/dashboards/) is the first page you see after the [onboarding process](/getting-started/onboarding).
+
+If you just onboarded, your dashboard will be nearly empty. It shows cards for devices that were detected automatically. Your dashboard may look quite different, depending on the devices that you have at home.
+
+
+
+Screenshot of a new Overview dashboard with Bluetooth devices.
+
+
+Let's take a look at the devices that were detected and which cards are used to represent them on the dashboard.
+
+- 1 Sonos speaker: [media control](/dashboards/media-control/) card
+- 1 Person (away): [entities](/dashboards/entities/) card
+- 1 Weather forecast: [weather forecast](/dashboards/weather-forecast/) card
+- 2 temperature sensors: [entities](/dashboards/entities/) card
+
+### Sonos speaker
+
+If you have a smart speaker connected to Wi-Fi, for example, this can be detected.
+
+### Person
+
+After onboarding, the first person shown here is the Home Assistant owner. Next to the name, it claims the person is **away**. You can track whether a person is present or not and create automations based on that. For example, turn down the heating when everyone has left the home. For more information on presence based automations, start with [presence detection](/getting-started/presence-detection/).
-### To change a card on the Overview dashboard
+### Weather forecast
-1. To view your dashboard, go to **Overview**.
- - Your dashboard might not have much on it yet.
+The weather forecast card is shown automatically if you provided a location during onboarding.
+
+### Temperature sensors
+
+The temperature sensors are shown because the Home Assistant device used here (Raspberry Pi) has a built-in Bluetooth module. In Giulia's home, there were 2 Bluetooth temperature sensors present. If your Home Assistant does not have a Bluetooth module (yet), Bluetooth devices in your home won't be shown automatically.
+
+If your Home Assistant has other controllers, such as a [Zigbee](/integrations/zha/) or a [Z-Wave](/integrations/zwave_js/) controller, and you have Zigbee or Z-Wave devices, these could be detected and shown here. However, these devices usually need to be paired first.
+
+## Creating a new dashboard and edit cards
+
+The default **Overview** dashboard updates automatically when you add new devices. However, once you start editing the default dashboard, it no longer updates automatically. For this reason, we start here by adding a new dashboard. This lets us keep the default **Overview** dashboard.
+
+In the following steps, we will create a new dashboard and edit some card settings.
+
+1. Go to {% my lovelace_dashboards title="**Settings** > **Dashboards**" %} and select **Add dashboard**.
+ ![Screenshot of the dashboard list](/images/dashboards/dashboard-manage-02.png)
+2. In the dialog, choose **Default dashboard**.
+3. In the **Add new dashboard** dialog, enter a name and select an icon.
+ - Leave the **Admin only** and **Show in sidebar** options as they are.
+ - Select **Create**.
+ - **Result**: The dashboard is added.
+4. Open your new dashboard and in the top right of the screen, select the button.
+5. By editing the dashboard, you are taking over control of this dashboard.
+ - This means that it is no longer automatically updated when new dashboard elements become available.
+ - To continue, in the dialog, select the three dots menu, then select **Take control**.
+ - Read and accept this before continuing.
+6. Your dashboard might not have much on it yet.
- If you have smart home devices in your home, some may have been connected automatically.
- In this example, some Bluetooth temperature sensors and an AV receiver connected automatically.
- Some cards are there by default, such as the weather, a card for the person who set up the system, and the text-to-speech service.
![Dashboard after onboarding a new device](/images/getting-started/onboarding_dashboard_01.png)
-2. To view the weather forecast for the next few days, select the weather card.
+7. Next, we want to edit the weather card.
+ - Select the weather card.
+ - Then, select the cogwheel.
![Weather details](/images/getting-started/weather_card_details_01.png)
-3. To change the units used on the card, select the cogwheel.
- - Change the units if you like.
- - Do not change any of the other settings for now.
- - Once you are done, select **Update**.
+8. Change any of the units, if you like.
+ - Do not change the **Entity ID**.
+ - Once you are done, select **Update**.
![Weather details](/images/getting-started/onboarding_card_settings_01.png)
-4. To change the type of dashboard card, select the three-dots, then **Device info**.
- - You may be asked to *Take control of your dashboard*. Read and accept this before continuing.
+9. Next, we want to add a new card for this weather {% term service %}.
+ - Select the weather card again, select the three dots, then **Device info**.
- Under **Sensors**, select **Add to dashboard**, then **Pick different card**.
![Dashboard - change the card type](/images/getting-started/onboarding_pick_different_card_01.png)
-5. From the list, select **Weather forecast**.
-6. Select the details to be shown on the card.
- ![Dashboard - change the card details](/images/getting-started/onboarding_card_settings_02.png)
- - **Save** your changes
- - You now see the forecast card on the dashboard.
-
-7. Now let's delete the other weather card.
- - In the top right corner, select the three-dot menu, then select **Edit dashboard**.
- ![Dashboard - edit the dashboard](/images/getting-started/onboarding_edit_dashboard_01.png)
- - On the card, select the three-dot menu and select **Delete**.
- ![Dashboard - delete card](/images/getting-started/onboarding_dashboard_delete_card.png)
-8. Finally, we want to move the weather card to the top left corner.
- - On the bottom of the card, select the number or use the minus button to enter `1`.
- - Repeat this on other cards, if you want to move them around.
- - When you are done, in the top right corner, select **Done**.
-9. Congratulations! You have completed your first dashboard customization.
-
-{% include getting-started/next_step.html step="Concepts & Terminology" link="/getting-started/concepts-terminology/" %}
\ No newline at end of file
+10. From the list, select **Show current weather and forecast**.
+11. Select the details to be shown on the card.
+ ![Dashboard - change the card details](/images/getting-started/onboarding_card_settings_02.png)
+ - **Save** your changes
+ - You now see the forecast card on the dashboard.
+
+12. Now let's delete the other weather card.
+ - In the top right corner, select the pencil.
+ ![Dashboard - edit the dashboard](/images/getting-started/onboarding_edit_dashboard_01.png)
+ - On the card, select the three-dot menu and select **Delete**.
+ ![Dashboard - delete card](/images/getting-started/onboarding_dashboard_delete_card.png)
+13. Finally, we want to move the weather card to the top left corner.
+ - On the bottom of the card, select the number or use the minus button to enter `1`.
+ - Repeat this on other cards, if you want to move them around.
+ - When you are done, in the top right corner, select **Done**.
+14. If you want to change any of the other cards, select the **Edit** button on the card.
+15. Congratulations! You have completed your first dashboard customization.
+
+## Learning more about dashboards
+
+If you want to learn more about dashboards, views, and cards, take a look at these topics:
+
+1. Take a look at the [introduction to dashboards](/dashboards/) and learn about [multiple dashboards](/dashboards/dashboards).
+2. Learn about the different [view types](/dashboards/views/).
+3. Learn how to [add cards](/dashboards/cards/#adding-cards-to-your-dashboard) to a view.
+
+## Next step: integrations
+
+To continue with this tutorial, select the button below to learn about {% term integrations %}.
+
+{% include getting-started/next_step.html step="Integrations" link="/getting-started/integration/" %}
+
+## Related topics
+
+- [Dashboards](/dashboards/)
+- [Views](/dashboards/views/)
+- [Add cards to views](/dashboards/cards/#adding-cards-to-your-dashboard)
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.
[routers]: /integrations/#presence-detection
@@ -40,7 +40,6 @@ The map view will hide all devices that are home.
[zone]: /integrations/zone/
[trigger]: /getting-started/automation-trigger/#zone-trigger
[condition]: /getting-started/automation-condition/#zone-condition
-[ha-map]: /integrations/map/
[companion]: https://companion.home-assistant.io/
{% include getting-started/next_step.html step="Join the Community" link="/getting-started/join-the-community/" %}
diff --git a/source/green/index.html b/source/green/index.html
index f32ebbe28207..595498a5abc4 100644
--- a/source/green/index.html
+++ b/source/green/index.html
@@ -2308,253 +2308,408 @@
+
+ 1: Names are abbreviated. The full names of the installation methods are:
+
+
Home Assistant Operating System
+
Home Assistant Container
+
Home Assistant Core
+
Home Assistant Supervised
+
+
+ 2: Backups for Home Assistant Core and Home Assistant Container is provided
+ by the
+ backup integration.
+
+
+ 3: Backups for Home Assistant Core and Home Assistant Container are either
+ a tool to migrate to HAOS or a completely manual restore of the backup.
+
-
-1: Names are abbreviated. The full names of the installation methods are:
-
-
Home Assistant Operating System
-
Home Assistant Container
-
Home Assistant Core
-
Home Assistant Supervised
-
-
- 2: Backups for Home Assistant Core and Home Assistant Container is provided
- by the
- backup integration.
-
-
- 3: Backups for Home Assistant Core and Home Assistant Container are either
- a tool to migrate to HAOS or a completely manual restore of the backup.
-
-
-
-
We get commissions for purchases made through links in this post.
diff --git a/source/installation/macos.markdown b/source/installation/macos.markdown
index 6ed8c8ee1804..35723ffe2d7c 100644
--- a/source/installation/macos.markdown
+++ b/source/installation/macos.markdown
@@ -1,6 +1,6 @@
---
-title: "MacOS"
-description: "Install Home Assistant on a MacOS"
+title: "macOS"
+description: "Install Home Assistant on macOS"
installation_type: macos
---
{% comment %}
diff --git a/source/installation/raspberrypi.markdown b/source/installation/raspberrypi.markdown
index d22df15d5fd2..a6be8339bfbf 100644
--- a/source/installation/raspberrypi.markdown
+++ b/source/installation/raspberrypi.markdown
@@ -4,7 +4,7 @@ description: "Install Home Assistant on a Raspberry Pi"
installation_type: raspberrypi
---
{% comment %}
-Included sections for this page is located under source/_includes/installation
+Included section for this page is located under source/_includes/installation
{% endcomment %}
{% assign board = "Raspberry Pi" %}
@@ -23,6 +23,7 @@ Before installing Home Assistant, you might want to homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your Raspberry Pi’s IP address).
-- The time it takes for this page to become available depends on your hardware. On a Raspberry Pi 4, this page should be available within a minute.
- - If it does not show up after 5 minutes on a Pi 4, maybe the image was not written properly.
+- The time it takes for this page to become available depends on your hardware. On a Raspberry Pi 4 or 5, this page should be available within a minute.
+ - If it does not show up after 5 minutes on a Pi 4 or 5, maybe the image was not written properly.
- Try to flash the SD card again, possibly even try a different SD card.
- If this did not help, view the console output on the Raspberry Pi.
- To do this, connect a monitor via HDMI.
@@ -86,6 +87,7 @@ With the Home Assistant Operating System installed and accessible, you can now c
{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %}
+
{% include installation/container.md %}
{% include installation/core.md %}
@@ -122,7 +124,7 @@ _Select and copy the URL or use the "copy" button that appear when you hover it.
6. **Select target**.
![Screenshot of the Etcher software showing the select target button highlighted.](/images/installation/etcher3.png)
7. Select the SD card you want to use for your installation.
-![Screenshot of the Etcher software showing teh targets available.](/images/installation/etcher4.png)
+![Screenshot of the Etcher software showing the targets available.](/images/installation/etcher4.png)
8. Select **Flash!** to start writing the image.
![Screenshot of the Etcher software showing the Flash button highlighted.](/images/installation/etcher5.png)
9. Once Balena Etcher has finished writing the image, you will see a confirmation.
@@ -134,3 +136,4 @@ _Select and copy the URL or use the "copy" button that appear when you hover it.
We get commissions for purchases made through links in this post.
+{% include common-tasks/enable_i2c.md %}
\ No newline at end of file
diff --git a/source/integrations/index.html b/source/integrations/index.html
index b97aeec5a86f..69959e54f685 100644
--- a/source/integrations/index.html
+++ b/source/integrations/index.html
@@ -32,7 +32,10 @@
- Out of the box the Home Assistant SkyConnect will support only Zigbee. We're
- working on a firmware update that makes it possible to run both Zigbee and
- Thread at the same time. Thread is the mesh networking protocol that powers
- Matter, the new standard for smart home devices.
-
-
- Once available, Home Assistant SkyConnect will run part of the software that
- normally runs inside Zigbee and Thread chips inside Home Assistant add-ons.
- These add-ons will be installed and updated automatically without requiring
- user interaction.
-
-
- We will make this multi-protocol set-up first available for Home Assistant
- OS installations. We will be looking into making this available for Home
- Assistant Supervised and Home Assistant Container installations afterwards.
-
-
-
Specifications
@@ -196,26 +175,14 @@
Form Factor
FAQs
- {% details "Why start with Home Assistant OS support for multi-protocol?" %} A
- standalone Zigbee or standalone Thread stick works by turning radio signals
- into radio packets and then processing those radio packets and making that
- available over a serial port.
- With multi-protocol, the processing of the radio packets is moved into Linux
- daemons. This means we run one daemon to split the radio packets into Zigbee
- and Thread streams, one daemon to process the Zigbee radio packets and one
- daemon to process the Thread radio packets.
- To make this all work together, we need to strictly manage the version of the
- firmware on the stick and the three different Linux daemons. The easiest way
- for us to do this is using Home Assistant add-ons in a known host environment,
- which is Home Assistant OS. {% enddetails %} {% details "Why include a USB
- extension cable?" %} USB 3.0 ports (the ones with blue on the inside)
- are known to cause significant noise and radio interference to any 2.4Ghz
- wireless devices. This includes Zigbee and Thread. If you do not use the
- extension cable, it may not work at all, and if it does, it could be flaky at
- best with intermittent problems (issues with pairing, device dropouts, unreachable
- devices, timeout errors, etc).
+ {% details "Why include a USB extension cable?" %} USB 3.0 ports (the ones with blue on the inside) are known to cause significant noise and radio interference to any 2.4Ghz wireless devices. This includes Zigbee and Thread. If you do not use the extension cable, it may not work at all, and if it does, it could be flaky at best with intermittent problems (issues with pairing, device dropouts, unreachable devices, timeout errors, etc).
See demo on YouTube. {% enddetails %}
+ {% details "Which use case do you recommend for Home Assistant SkyConnect?" %}
+ Our current recommendation for Home Assistant SkyConnect is to use the Zigbee firmware to power your Zigbee network. This solution offers a great experience out-of-the-box.
+ As part of our efforts to bring Matter to Home Assistant, we're now focused on ensuring that the Thread experience will catch up and become a first-class citizen, making it easy to connect to your Thread-based Matter devices in Home Assistant without a third-party Thread border router. The Thread firmware is already fully functional under the hood, but we still have some work to do to make the experience of using Thread-based devices in Home Assistant feel good. Once the experience has improved, we will recommend using this Thread firmware to power your Thread network as an alternative to using third-party Thread border routers from Apple or Google.{% enddetails %}
+ {% details "What is the current state of multiprotocol support?" %} When we launched Home Assistant SkyConnect, we announced our intent to release a firmware supporting multiprotocol, which allows the Silicon Labs chip to connect to both Zigbee and Thread networks with one radio. This experimental firmware has been available since December 2022. It integrates the Silicon Labs SDK, which adds this support for multiprotocol. During the further development and testing of the multiprotocol firmware, we have concluded that while Silicon Labs' multiprotocol works, it comes with technical limitations. These limitations mean users will not have the best experience compared to using dedicated Zigbee and Thread radios. That is why we do not recommend using this firmware, and it will remain an experimental feature of Home Assistant SkyConnect. If you currently have the multiprotocol firmware installed but don't actively use it to connect to Thread devices, we recommend that you disable multiprotocol.
+ Nothing changes for current users of the multiprotocol firmware who are happy with their experience. The experimental multiprotocol firmware will remain available, but we will not recommend it to new users. Instead, we will focus on making sure the dedicated Zigbee and Thread firmwares for Home Assistant SkyConnect deliver the best experience to users.{% enddetails %}
if (document.location.search === "?order") {
showBuyDialog();
}
+
+ try {
+ const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ const continent = tz.replace( /^(Asia|America|Australia|Europe)\/.*$/, '$1' );
+
+ if ( continent != tz ) {
+ document.querySelector( `#dist_${continent.toLowerCase()}` ).open = true;
+ }
+ } catch ( ev ) {
+ // Ignore...
+ }
diff --git a/source/voice_control/about_wake_word.markdown b/source/voice_control/about_wake_word.markdown
index 1691cd5d0d89..687faacc6f4a 100644
--- a/source/voice_control/about_wake_word.markdown
+++ b/source/voice_control/about_wake_word.markdown
@@ -1,5 +1,14 @@
---
title: "About wake words"
+related:
+ - docs: /voice_control/thirteen-usd-voice-remote/
+ title: Create a $13 voice assistant
+ - docs: /voice_control/install_wake_word_add_on/
+ title: Enable wake words
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake words
+ - docs: /voice_control/voice_remote_cloud_assistant/)
+ title: Create a cloud assistant
---
Wake words are special words or phrases that tell a voice assistant that a command is about to be spoken. The device then switches from passive to active listening. Examples are: *Hey Google*, *Hey Siri*, or *Alexa*. Home Assistant supports its own wake words, such as *Hey Nabu*.
@@ -78,16 +87,28 @@ How wake words integrate into Home Assistant
As an example, we’re also making the **Porcupine (v1)** wake word engine available. It supports 29 wake words across English, French, Spanish, and German. The wake words include *Computer*, *Framboise*, *Manzana*, and *Stachelschwein*.
-## Try it!
+## About on-device wake word processing (microWakeWord)
+
+The [microWakeWord](https://github.com/kahrendt/microWakeWord) created by [Kevin Ahrendt](https://www.kevinahrendt.com/) enables ESPHome to detect wake words on devices like the ESP32-S3-BOX-3.
+
+Because openWakeWord is too large to run on low-power devices like the S3-BOX-3, openWakeWord runs wake word detection on the Home Assistant server.
+
+Doing wake word detection on Home Assistant allows low-power devices like the [M5 ATOM Echo Development Kit](/voice_control/thirteen-usd-voice-remote/) to simply stream audio and let all of the processing happen elsewhere.
+The downside is that adding more voice assistants requires more CPU usage in Home Assistant as well as more network traffic.
-To try wake words today, follow the guide to the [$13 voice assistant][13-tutorial].
+Enter *microWakeWord*; a more light-weight model based on [Google's Inception neural network](https://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202). Because his new model is not as large, it can be run on low-power devices with an ESP32 chip, such as the ESP32-S3 chip inside the S3-BOX-3! _(It also works on the, now discontinued, S3-BOX and S3-BOX-Lite)_.
-## Related topics
+Currently, there are [three models](https://github.com/esphome/micro-wake-word-models/tree/main/models) trained for microWakeWord:
+
+- *okay nabu*
+- *hey jarvis*
+- *alexa*
+
+## Try it!
-- [Create a $13 voice assistant](/voice_control/thirteen-usd-voice-remote/)
-- [Enable wake words](/voice_control/install_wake_word_add_on/)
-- [Create your own wake words](/voice_control/create_wake_word/)
-- [Create a cloud assistant](/voice_control/voice_remote_cloud_assistant/)
+Right now, there are two easy options to get started with wake words:
+- Follow the guide to the [$13 voice assistant][13-tutorial]. This tutorial is using the tiny ATOM Echo, detecting wake words with openWakeWord.
+- Follow the guide to set up an [ESP32-S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/). This tutorial is using the bigger S3-BOX-3 device which features a display. It can detect wake words using openWakeWord. But it can also do on-device wake word detection using microWakeWord.
[13-tutorial]: /voice_control/thirteen-usd-voice-remote/
[openWakeWord]: https://github.com/dscripka/openWakeWord
diff --git a/source/voice_control/aliases.markdown b/source/voice_control/aliases.markdown
index bae43a5f4c04..813f430e2816 100644
--- a/source/voice_control/aliases.markdown
+++ b/source/voice_control/aliases.markdown
@@ -1,9 +1,38 @@
---
-title: "Assist - entity aliases"
+title: "Assist - entity, area, and floor aliases"
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /voice_control/custom_sentences/
+ title: Assist - custom sentences
---
-Assist will use the names of your entities, as well as any aliases you've configured.
+Assist will use the names of your entities, areas and floors, as well as any aliases you've configured. The configured aliases are not only used by Assist, but can also be used by Google Assistant, if you have set that up.
-![Alias example](/images/blog/2023-01/aliases-cloud-multi-language.png)
+These aliases are helpful in case you call the same device by multiple names
+or when using a voice assistant in multiple languages at the same time.
-By adding aliases in your native language, you can speak to Home Assistant with the language configured on your [Android watch](/voice_control/android/) or [Apple device](/voice_control/apple/).
+## Adding an alias of an entity
+
+There are multliple ways to add an alias of an entity:
+
+- **Option 1**: Go to **Settings** > **Voice assistants**. On the **Expose** tab, select the entity for which you want to add an alias.
+![Screenshot showing the alias editing capabilities added to the more info dialog of entities, accessed from the Voice assistants page](/images/assist/assist_aliases.png)
+- **Option 2**: You can also change the alias from the entity's more information dialog in the settings tab in the advanced section.
+![Screenshot showing the alias editing capabilities added to the more info dialog of entities, accessed from the Voice assistants page](/images/assist/assist_aliases_02.png).
+
+## Adding an alias of an area
+
+1. To add an alias for an area, go to **Settings** > **Areas, labels & zones**.
+2. On the area card of interest, select the pencil button.
+3. Select **Add alias** and enter the alias you want to use for that area.
+4. **Save** your changes.
+
+## Adding an alias of a floor
+
+1. To add an alias for a floor, go to **Settings** > **Areas, labels & zones**.
+2. Next to the floor of interest, select the three-dot menu, then select **Edit floor**.
+3. Select **Add alias** and enter the alias you want to use for that floor.
+4. **Save** your changes.
diff --git a/source/voice_control/android.markdown b/source/voice_control/android.markdown
index 5bf8e6753973..d5b7e7039eec 100644
--- a/source/voice_control/android.markdown
+++ b/source/voice_control/android.markdown
@@ -1,5 +1,12 @@
---
title: "Assist on Android"
+related:
+ - docs: /voice_control/voice_remote_expose_devices/
+ title: Exposing devices to Assist
+ - docs: /voice_control/start_assist_from_dashboard/
+ title: Starting Assist from your dashboard
+ - url: https://companion.home-assistant.io/docs/getting_started/
+ title: Home Assistant Companion App
---
## Assist on Android phones
@@ -134,9 +141,3 @@ Depending on your watch, you can assign Assist to a button so that you can start
![List of assistants](/images/assist/android_watch_7.png)
3. Now, use your key and speak a command.
-
-## Related topics
-
-- [Home Assistant Companion App](https://companion.home-assistant.io/docs/getting_started/)
-- [Exposing devices to Assist](/voice_control/voice_remote_expose_devices/)
-- [Starting Assist from your dashboard](/voice_control/start_assist_from_dashboard/)
diff --git a/source/voice_control/assist_create_open_ai_personality.markdown b/source/voice_control/assist_create_open_ai_personality.markdown
index 685e06f084b7..348392cc1616 100644
--- a/source/voice_control/assist_create_open_ai_personality.markdown
+++ b/source/voice_control/assist_create_open_ai_personality.markdown
@@ -1,5 +1,12 @@
---
title: "Create a personality with OpenAI"
+related:
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Cloud assistant pipeline
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Local assistant pipeline
+ - url: https://www.nabucasa.com
+ title: Home Assistant Cloud
---
You can give your voice assistant personality by using OpenAI. This requires an OpenAI account. For what we do in this tutorial, the free trial option is sufficient. No need to leave your credit card information.
@@ -36,9 +43,3 @@ Using OpenAI requires an OpenAI account. For this tutorial, the free trial optio
- Leave the other settings unchanged and select **Create**.
4. You can repeat this with other OpenAI personalities. You can add as many OpenAI Conversation integrations as you would like.
- To add a new personality, you need to create a new API key. Then, add a new OpenAI Conversation integration with that API key.
-
-## Related topics
-
-- [Home Assistant Cloud](https://www.nabucasa.com)
-- [Cloud assistant pipeline](/voice_control/voice_remote_cloud_assistant/)
-- [Local assistant pipeline](/voice_control/voice_remote_local_assistant/)
diff --git a/source/voice_control/assist_daily_summary.markdown b/source/voice_control/assist_daily_summary.markdown
index 6a11c2036697..b63a6c20e1fa 100644
--- a/source/voice_control/assist_daily_summary.markdown
+++ b/source/voice_control/assist_daily_summary.markdown
@@ -1,5 +1,16 @@
---
title: "Daily summary by Assist"
+related:
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Local assistant pipeline
+ - docs: /integrations/local_calendar/
+ title: Local calendar
+ - docs: /integrations/telegram/#setup-example
+ title: Telegram notification
+ - docs: /voice_control/assist_create_open_ai_personality/
+ title: Telegram notification
+ - url: https://www.nabucasa.com
+ title: Home Assistant Cloud
---
In this tutorial, we are creating an automation that has Assist send you a daily summary. Assist will tell you about the weather and your calendar events today. It will also send you the summary to your messenger.
@@ -84,11 +95,3 @@ We are using a blueprint (courtesy of [@allenporter]) that polls calendar events
- You should now receive a notification from Assist in your messenger app.
[@allenporter]: https://github.com/allenporter
-
-## Related topics
-
-- [Home Assistant Cloud](https://www.nabucasa.com)
-- [Local assistant pipeline](/voice_control/voice_remote_local_assistant/)
-- [Local calendar](/integrations/local_calendar/)
-- [Telegram notification](/integrations/telegram/#setup-example)
-- [Create a Mario personality](/voice_control/assist_create_open_ai_personality/)
\ No newline at end of file
diff --git a/source/voice_control/assist_set-conversation-response.png b/source/voice_control/assist_set-conversation-response.png
new file mode 100644
index 000000000000..c78b1306e69f
Binary files /dev/null and b/source/voice_control/assist_set-conversation-response.png differ
diff --git a/source/voice_control/builtin_sentences.markdown b/source/voice_control/builtin_sentences.markdown
index 5472f89fbe3d..c7fc58551652 100644
--- a/source/voice_control/builtin_sentences.markdown
+++ b/source/voice_control/builtin_sentences.markdown
@@ -1,5 +1,20 @@
---
title: "Assist - default sentences"
+related:
+ - docs: /voice_control/aliases/
+ title: Create aliases
+ - docs: /voice_control/custom_sentences/
+ title: Create your own sentences
+ - docs: /voice_control/troubleshooting/
+ title: Sentence troubleshooting
+ - url: https://github.com/home-assistant/intents/tree/main/sentences
+ title: Built-in sentence definitions
+ - url: https://github.com/home-assistant/intents/tree/main/responses
+ title: Built-in response definitions
+ - url: https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/
+ title: Template sentence syntax documentation
+ - url: https://github.com/home-assistant/intents/tree/main/sentences
+ title: Sentence test cases
---
Home Assistant comes with [built-in sentences](https://github.com/home-assistant/intents/tree/main/sentences) contributed by the community for [dozens of languages](https://developers.home-assistant.io/docs/voice/intent-recognition/supported-languages).
@@ -12,9 +27,11 @@ These sentences allow you, for example, to:
- *"turn on the TV"*
- *"lock all the doors"*
- *"open the main door"*
-- **Open and close covers**
+- **Open, close covers, or ask about their state**
- *"Close the garage door"*
- *"Open kitchen window"*
+ - *"Which curtains are closed"*
+ - *"Set bedroom curtain to 50%"*
- **Set the brightness and color of lights**
- *"Change kitchen lights brightness to 50%"*
- *"Set bed light to green"*
@@ -37,6 +54,22 @@ These sentences allow you, for example, to:
- *"How many people are in the kitchen"*
- *"Who is in the garage"*
- *"Where is Anne"*
+- **Control the media player**
+ - *"next item on TV"*
+ - *"skip song on the TV"*
+ - *"skip track on the TV"*
+ - *"skip to the next song on the TV"*
+ - *"pause TV"*
+ - *"TV pause"*
+ - *"unpause TV"*
+ - *"TV unpause"*
+ - *"resume TV"*
+ - *"set TV volume to 90 percent"*
+ - *"change the TV volume to 90"*
+ - *"turn TV volume down to 90 percent"*
+- **Control the vacuum**
+ - *"return rover to base"*
+ - *"start rover"*
- **Abort wake word**
- *"Nevermind"*: If you triggered the wake word by mistake and want to stop Home Assistant from listening
@@ -60,7 +93,7 @@ The list of supported sentences is constantly being updated for each language. T
**Note**: If the voice assistant doesn't understand you, you may need to rephrase your sentence a bit. Or check if the {% term entity %} or {% term area %} name is correct for your environment.
1. Take a look at the test sentences:
- - On GitHub, in the [tests](https://github.com/home-assistant/intents/tree/main/sentences) folder, open the subfolder for your language.
+ - On GitHub, in the [tests](https://github.com/home-assistant/intents/tree/main/tests) folder, open the subfolder for your language.
- Look through the test files to see the example sentences that have been tested.
- The second part of the file name shows the {% term intent %}, the first part shows the {% term domain %}. For some {% term domains %}, such as covers, fans, and light, there are specific sentences.
The other {% term domains %} are covered by the generic *homeassistant_*.
@@ -73,24 +106,15 @@ The list of supported sentences is constantly being updated for each language. T
![Example of a set of test sentences](/images/assist/assist-test-file-light-turn-on.png)
2. View the sentence definition for the tests:
- - On GitHub, in the [tests](https://github.com/home-assistant/intents/tree/main/tests) folder, open the subfolder for your language.
+ - On GitHub, in the [sentences](https://github.com/home-assistant/intents/tree/main/sentences) folder, open the subfolder for your language.
- Open the file of interest.
![Sentences definition for turning on the light](/images/assist/assist-sentence-definition-01.png)
- () mean alternative elements.
- [] mean optional elements.
- - <> mean an expansion rule. The view these rules, search for `expansion_rules` in the [_common.yaml](https://github.com/home-assistant/intents/blob/main/sentences/en/_common.yaml) file.
+ - <> mean an expansion rule. To view these rules, search for `expansion_rules` in the [_common.yaml](https://github.com/home-assistant/intents/blob/main/sentences/en/_common.yaml) file.
- The syntax is explained in detail in the [template sentence syntax documentation](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/).
3. View the [sentence definition](https://github.com/home-assistant/intents/tree/main/sentences) for your language.
4. View the [response definition](https://github.com/home-assistant/intents/tree/main/responses)
-## Related topics
-
-- [Create aliases](/voice_control/aliases/)
-- [Create your own sentences](/voice_control/custom_sentences/)
-- [Built-in sentence definitions](https://github.com/home-assistant/intents/tree/main/sentences)
-- [Built-in response definitions](https://github.com/home-assistant/intents/tree/main/responses)
-- [Template sentence syntax documentation](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/)
-- [Sentence test cases](https://github.com/home-assistant/intents/tree/main/sentences)
-- [Sentence troubleshooting](/voice_control/troubleshooting/)
diff --git a/source/voice_control/create_wake_word.markdown b/source/voice_control/create_wake_word.markdown
index 4e4dce7e5075..cd04b3bf05ae 100644
--- a/source/voice_control/create_wake_word.markdown
+++ b/source/voice_control/create_wake_word.markdown
@@ -1,10 +1,21 @@
---
title: "Create your own wake word"
+related:
+ - docs: /voice_control/thirteen-usd-voice-remote/
+ title: $13 voice assistant for Home Assistant
+ - docs: /voice_control/custom_sentences/
+ title: Installing the Samba add-on
+ - docs: /voice_control/about_wake_word/
+ title: About wake words
+ - url: https://colab.research.google.com/drive/1q1oe2zOyZp7UsB3jJiQ1IFn8z5YfjwEb?usp=sharing#scrollTo=1cbqBebHXjFD
+ title: Wake word training environment
+ - url: https://github.com/dscripka/openWakeWord
+ title: Wake word training environment
---
You can now create your own wake word to use with Home Assistant. The procedure below will guide you to train a model. The model is trained using voice clips generated by our local neural text-to-speech system [Piper](https://github.com/rhasspy/piper).
-_Want to now more about how this all works? Check out the [openWakeWord](https://github.com/dscripka/openWakeWord) project by David Scripka.)_
+_Want to know more about how this all works? Check out the [openWakeWord](https://github.com/dscripka/openWakeWord) project by David Scripka.)_
Depending on the word, training a model on your own wake word may take a few iterations and a bit of tweaking. This guide will take you through the process step by step.
@@ -93,11 +104,3 @@ Things you can try if the execution is very slow:
- Select the link to **Upgrade to Colab Pro**.
- Select your price plan and follow the instructions on screen.
![Connect to hosted runtime](/images/assist/wake_word_upgrade_to_colab.png)
-
-## Related topics
-
-- [$13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/)
-- [Wake word training environment](https://colab.research.google.com/drive/1q1oe2zOyZp7UsB3jJiQ1IFn8z5YfjwEb?usp=sharing#scrollTo=1cbqBebHXjFD)
-- [Installing the Samba add-on](/common-tasks/os/#configuring-access-to-files)
-- [openWakeWord add-on](https://github.com/dscripka/openWakeWord)
-- [About wake words](/voice_control/about_wake_word/)
diff --git a/source/voice_control/custom_sentences.markdown b/source/voice_control/custom_sentences.markdown
index 967f0709cce6..e348a65b27b0 100644
--- a/source/voice_control/custom_sentences.markdown
+++ b/source/voice_control/custom_sentences.markdown
@@ -1,5 +1,16 @@
---
title: "Assist - custom sentences"
+related:
+ - docs: /voice_control/aliases/
+ title: Create aliases
+ - docs: /docs/scripts/#respond-to-a-conversation/
+ title: Conversation response script action
+ - docs: /docs/automation/trigger/#sentence-trigger
+ title: Sentence triggers
+ - docs: /docs/automation/trigger/#sentence-wildcards
+ title: Sentence wildcards
+ - url: https://developers.home-assistant.io/docs/intent_builtin/
+ title: View existing intents
---
You may add your own sentences to the intent recognizer by either extending an [existing intent](https://developers.home-assistant.io/docs/intent_builtin/) or creating a new one. You may also [customize responses](#customizing-responses) for existing intents.
@@ -14,6 +25,7 @@ If you have not set up voice control yet, set up the hardware first. For instruc
- [World's most private voice assistant](/voice_control/worlds-most-private-voice-assistant/): Using a classic landline phone
- [$13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/): Using a button with speaker and mic
+- [S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/): Using a small device with speaker, mic, and display
- [Assist for Apple](/voice_control/apple/): Using your iPhone, Mac, or Apple watch
- [Assist for Android](/voice_control/android/): Using your Android phone, tablet, or a Wear OS watch
@@ -25,11 +37,36 @@ If you have not set up voice control yet, set up the hardware first. For instruc
- Do not use punctuation.
- You can add multiple sentences. They will then all trigger that automation.
![Add a custom sentence](/images/assist/sentence_trigger_01.png)
-4. To test the automation, go to **Overview** and in the top right corner, open Assist.
+4. To add a custom response, select **Add action**. Scroll all the way down and select **Other actions**.
+ - Then, select **Set conversation response**.
+ ![Set conversation response](/images/assist/assist_set-conversation-response.png)
+5. In the text field, enter the response you want to hear from Assist and select **Save**.
+
+ ![Enter the response text](/images/assist/assist_set-conversation-response_02.png)
+
+ - You can also use [wildcards](/docs/automation/trigger/#sentence-wildcards). For example, the trigger:
+
+ ```yaml
+ play {album} by {artist}
+ ```
+
+ could have the response:
+
+ {% raw %}
+
+ ```yaml
+ Playing {{ trigger.slots.album }} by {{ trigger.slots.artist }}
+ ```
+
+ {% endraw %}
+
+ - For more details, refer to [conversation response script action](/docs/scripts/#respond-to-a-conversation).
+
+6. To test the automation, go to **Overview** and in the top right corner, open Assist.
- Enter one of the sentences.
-5. If it did not work out, checkout the [troubleshooting](/voice_control/troubleshooting/) section.
+7. If it did not work out, checkout the [troubleshooting](/voice_control/troubleshooting/) section.
- One of the causes could be that the device you're targeting has not been exposed to Assist.
-6. Pick up your voice control device and speak the custom sentence.
+8. Pick up your voice control device and speak the custom sentence.
- Your automation should now be triggered.
## Setting up custom sentences in configuration.yaml
@@ -139,11 +176,9 @@ responses:
{% endraw %}
+## Related devices and installation tutorials
-## Related topics
-
-- [View existing intents](https://developers.home-assistant.io/docs/intent_builtin/)
-- [Create aliases](/voice_control/aliases/)
- [$13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/)
+- [S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/)
- [Assist for Apple](/voice_control/apple/)
- [Assist for Android](/voice_control/android/)
\ No newline at end of file
diff --git a/source/voice_control/index.markdown b/source/voice_control/index.markdown
index 6dba70a411b0..fb41ac16f9e1 100644
--- a/source/voice_control/index.markdown
+++ b/source/voice_control/index.markdown
@@ -1,5 +1,24 @@
---
title: Assist - Talking to Home Assistant
+related:
+ - docs: /voice_control/android
+ title: Assist on Android
+ - docs: /voice_control/android/#assist-on-wear-os
+ title: Assist on Wear OS
+ - docs: /voice_control/apple
+ title: Siri and Assist shortcuts
+ - docs: /voice_control/start_assist_from_dashboard/
+ title: Assist dashboard button
+ - docs: /voice_control/thirteen-usd-voice-remote/
+ title: Build a 13$ voice remote using an ESPHome device
+ - docs: /voice_control/install_wake_word_add_on
+ title: Enable a wake word
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake words
+ - docs: /voice_control/builtin_sentences
+ title: Built-in sentences
+ - url: https://www.nabucasa.com/config/
+ title: Home Assistant Cloud
---
@@ -8,7 +27,7 @@ Assist allows you to control Home Assistant using natural language. It is built
Assist is available to use on most platforms that can interface with Home Assistant. Look for the Assist icon :
-
+
_Want to use Home Assistant with Google Assistant or Amazon Alexa? Get started with [Home Assistant Cloud](https://www.nabucasa.com/config/)._
@@ -62,15 +81,3 @@ Use the [built-in sentences](/voice_control/builtin_sentences) to control entiti
Did Assist not understand your sentence? [Contribute them](https://developers.home-assistant.io/docs/voice/intent-recognition/).
_Assist was introduced in Home Assistant 2023.2._
-
-## Related topics
-
-- [Home Assistant Cloud](https://www.nabucasa.com/config/)
-- [Assist on Android](/voice_control/android)
-- [Assist on Wear OS](/voice_control/android/#assist-on-wear-os)
-- [Siri and Assist shortcuts](/voice_control/apple)
-- [Assist dashboard button](/voice_control/start_assist_from_dashboard/)
-- [Build a 13$ voice remote using an ESPHome device](/voice_control/thirteen-usd-voice-remote/)
-- [Enable a wake word](/voice_control/install_wake_word_add_on)
-- [Create your own wake words](/voice_control/create_wake_word/)
-- [Built-in sentences](/voice_control/builtin_sentences)
diff --git a/source/voice_control/install_wake_word_add_on.markdown b/source/voice_control/install_wake_word_add_on.markdown
index d13b723e2ecc..282157a62dbf 100644
--- a/source/voice_control/install_wake_word_add_on.markdown
+++ b/source/voice_control/install_wake_word_add_on.markdown
@@ -2,13 +2,23 @@
title: "Enabling a wake word"
---
-To use wake words, you need to install the openWakeWord add-on.
+This tutorial shows how you can *enable* a wake word in Home Assistant. It does not describe how to *use* it.
-## Prerequisites
+To *use* the wake word, you need some extra hardware. A low cost option is the [M5Stack ATOM Echo Development Kit](https://shop.m5stack.com/products/atom-echo-smart-speaker-dev-kit?ref=NabuCasa). To set that up, follow the [$13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/).
+
+## To enable a wake word
+
+Enabling a wake word consists of 2 steps:
+
+1. Installing the openWakeWord add-on.
+2. Enabling the wake word for a specific voice assistant.
+
+### Prerequisites
- Home Assistant version 2023.10 or later, installed with the Home Assistant Operating System
+- [Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/) or a manually configured [local Assist pipeline](/voice_control/voice_remote_local_assistant)
-## Installing the openWakeWord add-on
+### Installing the openWakeWord add-on
1. Go to {% my supervisor_addon addon="core_openwakeword" title="**Settings** > **Add-ons** > **openWakeWord**" %} and select **Install**.
2. Start the add-on.
@@ -16,12 +26,35 @@ To use wake words, you need to install the openWakeWord add-on.
- Under **Discovered**, you should now see the **Wyoming** integration.
- Select **Configure** and **Submit**.
- **Result**: You have successfully installed the openWakeWord add-on and Wyoming integration.
-4. Under {% my voice_assistants title="**Settings** > **Voice assistants**" %}, when you select a voice assistant, in the **Wake word** section, you should now see the wake word options that are available out of the box.
- ![Select wake word](/images/blog/2023-10-12-year-of-the-voice-chapter-4/pick-wake-word.png)
-5. If you do not like the available options, you can [create your own wake word](/voice_control/create_wake_word/).
+
+### Enabling wake word for your voice assistant
+
+1. Go to {% my voice_assistants title="**Settings** > **Voice assistants**" %} and select **Add assistant**.
+2. Give your assistant a name, for example the wake word you are going to use.
+3. Select the language you are going to use to speak to Home Assistant.
+ - If the **Text-to-speech** and **Speech-to-text** sections do not provide language selectors, this means you do not have an Assist pipeline set up.
+ - Set up [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist pipeline](/voice_control/voice_remote_local_assistant).
+4. Under **Text-to-speech**, select the language and voice you want Home Assistant to use when speaking to you.
+5. To define the wake word engine, under **Wake word**, select **openWakeWord**.
+ - Then, select **ok nabu**.
+ - If you created a new assistant, select **Create**.
+ - If you edited an existing assistant, select **Update**.
+ - **Result**: You now have a voice assistant that listens to a wake word.
+6. For the first run, it is recommended to use **ok nabu**, just to test the setup.
+ - Once you have it all set up, you can [create your own wake words](/voice_control/create_wake_word/).
## Related topics
+### About wake words and assistants
+
- [Create your own wake words](/voice_control/create_wake_word/)
- [About wake words](/voice_control/about_wake_word/)
- [Create a cloud assistant](/voice_control/voice_remote_cloud_assistant/)
+- [Create a local assistant](/voice_control/voice_remote_local_assistant)
+
+### Extra hardware to use wake word
+
+- [M5Stack ATOM Echo Development Kit](https://shop.m5stack.com/products/atom-echo-smart-speaker-dev-kit?ref=NabuCasa)
+ - [Tutorial: $13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/)
+- [ESP32-S3-BOX-3](https://www.aliexpress.us/item/1005005920207976.html?gatewayAdapt=4itemAdapt)
+ - [Tutorial: ESP32-S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/)
\ No newline at end of file
diff --git a/source/voice_control/s3-box-customize.markdown b/source/voice_control/s3-box-customize.markdown
new file mode 100644
index 000000000000..d873af398cb2
--- /dev/null
+++ b/source/voice_control/s3-box-customize.markdown
@@ -0,0 +1,243 @@
+---
+title: "Customize the S3-BOX-3"
+product_name: ESP32-S3-BOX-3
+device_name_entry: ESP32-S3-BOX-3
+related:
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Home Assistant Cloud
+ - docs: /voice_control/voice_remote_local_assistant
+ title: Assist Pipeline
+ - docs: /voice_control/s3_box_voice_assistant/
+ title: ESP32-S3-BOX-3 voice assistant
+ - docs: /voice_control/troubleshooting/
+ title: General troubleshooting section for Assist
+ - docs: /voice_control/troubleshooting_the_s3_box/
+ title: Troubleshooting the ESP32-S3-BOX-3
+ - docs: /common-tasks/os/#configuring-access-to-files
+ title: Access to your configuration files
+ - url: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/tree/main
+ title: Community image repository
+ - url: https://github.com/kahrendt/microWakeWord
+ title: microWakeWord
+---
+
+## Customize the S3-BOX-3 with your own illustrations
+
+This tutorial will show you how to replace the Home Assistant status illustrations on the Espressif [ESP32-S3-BOX-3](https://www.espressif.com/en/news/ESP32-S3-BOX-3) with your own images.
+
+You can either prepare your own illustrations or import some from a community repository.
+
+
+
+### ESP32-S3-BOX-3 voice assistant status illustrations
+
+The ESP32-S3-BOX-3 voice assistant has 6 illustrations to indicate its state:
+
+
+
+The chart shows the default illustrations. The next steps show you how to change those.
+
+### Prerequisites
+
+- Latest version of Home Assistant, installed with the Home Assistant Operating System
+- [Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/) or a manually configured [Assist Pipeline](/voice_control/voice_remote_local_assistant)
+- [ESP32-S3-BOX-3](https://www.aliexpress.us/item/1005005920207976.html?gatewayAdapt=4itemAdapt). The ESP32-S3-BOX-Lite or the ESP32-S3-BOX also work, but they are not currently on the market.
+- Successfully completed the [ESP32-S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/) tutorial
+
+### Adopting the device in the ESPHome add-on
+
+Before you can import new illustrations, you need to install the ESPHome add-on and adopt the device in the add-on.
+
+1. Make sure the ESP32-S3-BOX-3 is up and running and connected to your Wi-Fi.
+2. Go to **Settings** > **Add-ons** and check if you have the **ESPHome** add-on installed.
+ - If you haven't done so, go to [**Settings** > **Add-ons** > **ESPHome**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome) to install the add-on.
+3. Start the add-on and select **Open web UI**.
+4. In the ESPHome add-on dashboard, on the **ESP32-S3-BOX-3** card, select **Adopt**.
+
+ ![Adopt the ESP32-S3-BOX-3 in the ESPHome add-on](/images/assist/esp32-adopt-s3.png)
+5. If you like, give it a new name. Then, select **Adopt**.
+ - Adopting an ESPHome device allows us to customize the existing software.
+ - **Result**: The status will change to **Online**.
+6. Now that you have set up the ESPHome add-on, continue with one of the 2 different methods to add custom images:
+ - [Option 1: Using images from a community repository](#option-1-using-images-from-a-community-repository)
+ - [Option 2: Using your own images](#option-2-using-your-own-illustrations)
+
+### Option 1: Using images from a community repository
+
+If you want new images but don't want to create your own, you can use images from the community.
+If you want to use your own images, skip this procedure and go to [Option 2: Using your own imagess](#option-2-using-your-own-illustrations) instead.
+
+#### To use images from the community
+
+1. On the **ESP32-S3-BOX-3** add-on, select edit.
+ - **Result**: An editor opens, showing the configuration file.
+ ![ESP32-S3-BOX-3 config file](/images/assist/esp32-adopt-s3-01.png)
+2. For inspiration, we have prepared some images for you.
+ - Check them out in this [repository](https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/tree/main/frenck/illustrations).
+3. For this tutorial, we will use some images of Frenck.
+ - Add the following lines into the `substitutions` block.
+
+ ```yaml
+ substitutions:
+ loading_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/frenck/illustrations/loading.png
+ idle_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/frenck/illustrations/idle.png
+ listening_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/frenck/illustrations/listening.png
+ thinking_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/frenck/illustrations/thinking.png
+ replying_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/frenck/illustrations/replying.png
+ error_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/frenck/illustrations/error.png
+ ```
+
+4. Save the changes and select **Install**:
+ - Depending on your environment, the installation process can take a while.
+![ESP32-S3-BOX-3 config file](/images/assist/esp32-s3-config-05.png)
+
+5. Once the installation is complete, you can see the new image on the ESP32-S3-BOX-3.
+ - Now, speak a command to test the new setting. For example, *OK Nabu, turn off the living room lights*.
+
+### Option 2: Using your own illustrations
+
+There are 2 parts to this:
+
+- [Preparing your own illustrations](#to-prepare-your-own-images)
+- [Adding your illustrations to the configuration](#to-add-your-images-to-the-configuration)
+
+#### About the image specifications
+
+Here's what you need to know to get the best result on your ESP32-S3-BOX-3 screen.
+
+##### Using light and dark image background
+
+In the [overview diagram](#esp32-s3-box-3-voice-assistant-status-illustrations), you can see that the default images use different background colors. This is to make it easier to recognize a state change when you look at your screen.
+
+In your images, you could use 2 different background colors:
+
+- For loading and idle: use a dark background
+- For listening, thinking, and replying: use a light background
+- For error: As you like
+
+If your images have transparency, you can define the background color in the configuration. The procedure below shows how to change the background.
+
+##### Image dimensions and file format
+
+- **Dimensions**: The screen is 320 x 240 pixels. If the image you provide is not in a 4:3 ratio, the remaining area will be filled with background color.
+- **File format**: PNG, JPEG, or SVG
+
+#### To prepare your own images
+
+1. Create your own images according to the specifications defined in the section [About the image specifications](#about-the-image-specifications).
+ - You could even draw your own!
+ - There's a [template](#to-draw-your-own-images) for it.
+2. Copy all 6 images into a folder. For example: `voice_assistant_gfx`.
+3. Make sure you have [access to your configuration files](/common-tasks/os/#configuring-access-to-files).
+ - [Install the Samba add-on](/common-tasks/os/#installing-and-using-the-samba-add-on).
+ - This allows you to copy multiple files at once.
+4. Copy your image folder into the configuration folder:
+ - Open the `config` folder and open the `ESPHome` folder.
+ - Copy your image folder in there.
+ ![ESP32-S3-BOX-3 config file](/images/assist/s32-s3-add-image-folder.png)
+
+#### To add your images to the configuration
+
+1. In Home Assistant, go to [**Settings** > **Add-ons** > **ESPHome**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome), and **Open Web UI**.
+2. On the **ESP32-S3-BOX-3** add-on, select edit.
+ - **Result**: An editor opens, showing the configuration file.
+ ![ESP32-S3-BOX-3 config file](/images/assist/esp32-adopt-s3-01.png)
+
+3. To add your images, add the following lines into the `substitutions` block.
+
+ ```yaml
+ substitutions:
+ loading_illustration_file: voice_assistant_gfx/loading.png
+ idle_illustration_file: voice_assistant_gfx/idle.png
+ listening_illustration_file: voice_assistant_gfx/listening.png
+ thinking_illustration_file: voice_assistant_gfx/thinking.png
+ replying_illustration_file: voice_assistant_gfx/replying.png
+ error_illustration_file: voice_assistant_gfx/error.png
+ ```
+
+4. If you used transparency in your images and you want to change the background color, add the following lines into the `substitutions` block:
+ - The `000000` stands for black, `FFFFFF` stands for white in [hexadecimal color code](https://www.w3schools.com/html/html_colors_hex.asp).
+ - If you want to use different colors, replace the corresponding color code.
+ - To find the color code, you can use a tool like the Google color picker.
+
+ ```yaml
+ substitutions:
+ ...
+ loading_illustration_background_color: '000000'
+ idle_illustration_background_color: '000000'
+ listening_illustration_background_color: 'FFFFFF'
+ thinking_illustration_background_color: 'FFFFFF'
+ replying_illustration_background_color: 'FFFFFF'
+ error_illustration_background_color: '000000'
+ ```
+
+5. Save the changes and select **Install**.
+ ![ESP32-S3-BOX-3 config file](/images/assist/s32-s3-add-image-config-02.png)
+6. Save the changes.
+ - Depending on your environment, the installation process can take a while.
+7. Once the installation is complete, you can see the new image on the S3-BOX.
+ - Now, speak a command to test the new setting. For example, *OK Nabu, turn on the light*.
+
+## To draw your own images
+
+1. We prepared a template for you to draw your own status images.
+![ESP32-S3-BOX-3 config file](/images/assist/draw_assist.png)
+2. Download the file and start drawing!
+
+
+
+
+3. When you are done:
+ - Snap a picture of each.
+ - [Follow these steps](#to-prepare-your-own-images) to bring them onto your Voice Assistant.
+
+## Customizing on-device wake words (microWakeWord)
+
+You can change the on-device wake word (microWakeWord) that is used on your S3-BOX-3.
+
+### Prerequisites
+
+- Home Assistant 2024.2, installed with the Home Assistant Operating System. If you do not have Home Assistant installed yet, refer to the [installation page](/installation/) for instructions.
+- Successfully [installed ESPHome on the S3-BOX-3](/voice_control/s3_box_voice_assistant/)
+- ESPHome 2024.2 or later
+- Home Assistant server with at least 2 GB of RAM free
+ - The firmware needs to be compiled on the server before it is installed on the S3-BOX-3.
+ - Compiling requires a bit of RAM.
+- [On-device wake word installed](#installing-on-device-wake-words-microwakeword) on your S3-BOX-3.
+
+*(It also works on the (now discontinued) S3-BOX and S3-BOX-Lite)*
+
+### To customize the S3-BOX-3 with on-device wake words
+
+1. If you haven't done so already, [adopt the device in the ESPHome add-on](#adopting-the-device-in-the-esphome-add-on).
+2. In Home Assistant, go to [**Settings** > **Add-ons** > **ESPHome**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome), and **Open Web UI**.
+3. On the **ESP32-S3-BOX-3** entry, select edit.
+ - **Result**: An editor opens, showing the configuration file.
+ ![ESP32-S3-BOX-3 config file](/images/assist/esp32-adopt-s3-01.png)
+
+4. To change the wake word, add the following line into the `substitutions` block.
+ - Instead of `okay_nabu`, you can also use `alexa` or `hey_jarvis`.
+
+ ```yaml
+ substitutions:
+ ...
+ micro_wake_word_model: hey_jarvis
+ ```
+
+5. Save the changes and in the top right corner, select **Install**.
+ - Depending on your environment, the installation process can take a while.
+ - On Home Assistant Green, for example, it takes about 45 minutes.
+6. Select the **ESPHome** integration. Under **Devices**, you should see the **ESP32-S3-BOX** listed.
+ - On the ESP32-S3-BOX-3 entry, select **Device** to open the device page.
+ - Under **Wake word engine location**, select **On device**.
+
+ ![ESP32-S3-BOX-3 on device wake word processing](/images/assist/wake_word_engine_location.png)
+
+7. Now, speak a command to test the new setting. For example, *Hey Jarvis, turn on the light*.
+
+[microWakeWord]: https://github.com/kahrendt/microWakeWord
+[Kevin Ahrendt]: https://www.kevinahrendt.com/
\ No newline at end of file
diff --git a/source/voice_control/s3_box_voice_assistant.markdown b/source/voice_control/s3_box_voice_assistant.markdown
new file mode 100644
index 000000000000..9e76a272b29e
--- /dev/null
+++ b/source/voice_control/s3_box_voice_assistant.markdown
@@ -0,0 +1,97 @@
+---
+title: "ESP32-S3-BOX voice assistant"
+product_name: ESP32-S3-BOX
+device_name_entry: ESP32-S3-BOX
+config_link: /voice_control/s3_box_voice_assistant/#to-delete-the-configuration-from-esphome
+related:
+ - docs: /voice_control/troubleshooting/
+ title: General troubleshooting section for Assist
+ - docs: /voice_control/troubleshooting_the_s3_box/
+ title: Troubleshooting the ESP32-S3-BOX-3
+ - docs: /common-tasks/os/#configuring-access-to-files
+ title: Access to your configuration files
+ - docs: /voice_control/s3-box-customize/#customizing-on-device-wake-words-microwakeword
+ title: Customizing the S3-BOX with on-device wake words
+ - url: https://esphome.io/projects/index.html
+ title: ESPHome projects page
+---
+
+This tutorial will guide you to turn an ESP32-S3-BOX, ESP32-S3-BOX-3, or an ESP32-S3-BOX-Light into a Home Assistant voice assistant. Note, the term ESP32-S3-BOX is used to refer to any of the 3 product variants.
+
+
+
+## Prerequisites
+
+- Home Assistant 2023.12 or later, installed with the Home Assistant Operating System. If you do not have Home Assistant installed yet, refer to the [installation page](/installation/) for instructions.
+- [Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/) or a manually configured [Assist Pipeline](/voice_control/voice_remote_local_assistant)
+- The password to your 2.4 GHz Wi-Fi network
+- Chrome or Edge browser on a desktop (not Android/iOS)
+- One of the three Espressif ESP32-S3-BOX variants:
+ - [ESP32-S3-BOX-3](https://www.aliexpress.us/item/1005005920207976.html?gatewayAdapt=4itemAdapt)
+ - ESP32-S3-BOX or ESP32-S3-BOX-Lite (not currently on the market)
+- USB-C cable to connect the ESP32-S3-BOX
+
+## Installing the software onto the ESP32-S3-BOX
+
+Before you can use this device with Home Assistant, you need to install a bit of software on it.
+
+1. Make sure this page is opened in a Chromium-based browser on a **desktop**. The software installation does not work with a tablet or phone.
+
+ - If you have an ESP32-S3-BOX-3, select the **Connect** button below to display a list of available USB devices. Do not connect the ESP32-S3-BOX-3 yet. We want to see the list of available USB devices first, so that it is easier to recognize the ESP device afterwards.
+ - If your browser does not support web serial, you will see a warning message indicating this instead of a button.
+
+
+
+
+
+ - If you have an ESP32-S3-BOX or ESP32-S3-BOX-Lite, open the [ESPHome projects](https://esphome.io/projects/index.html?type=voice) page, select your variant and follow the installation instructions.
+ - **For advanced users**: The configuration files are available on GitHub:
+ - [ESP32-S3-BOX-3](https://github.com/esphome/firmware/blob/main/wake-word-voice-assistant/esp32-s3-box-3.yaml)
+
+{% include voice_assistant/install_esp_firmware.md %}
+
+9. Select the **ESPHome** integration. Under **Devices**, you should see the **ESP32-S3-BOX** listed.
+ ![ESP32-S3-BOX-3 discovered](/images/assist/s32-s3-box-3-discovered.png)
+
+ - Your ESP32-S3-BOX is connected to Home Assistant over Wi-Fi. You can now move it to any place in your home with a USB power supply.
+
+10. If you want, you can process the wake word on the ESP32-S3 device, rather than on your Home Assistant server. (The server is the device where Home Assistant is installed, for example on Home Assistant Green).
+ - Under **Devices**, on the ESP32-S3-BOX-3 entry, select **Device** to open the device page.
+ - Under **Wake word engine location**, select **On device**, if you want your wake word to be processed on the device itself, and not in Home Assistant.
+ - Local processing is faster.
+ - The wake word is now *Okay Nabu*.
+
+ ![ESP32-S3-BOX-3 on device wake word processing](/images/assist/wake_word_engine_location.png)
+
+11. If you chose on-device wake word, but you do not want to use *Okay Nabu*, you can change the on-device wake word.
+ - Currently, *Hey Jarvis* or *Alexa* are the supported alternatives.
+ - To change your wake word, follow the steps in [Customizing the S3-BOX-3 with on-device wake words](/voice_control/s3-box-customize/#customizing-on-device-wake-words-microwakeword).
+12. Congratulations! You can now voice control Home Assistant via a ESP32 device with a display. Now give some commands.
+
+## Controlling Home Assistant
+
+1. Say your wake word. For this tutorial, use "OK, Nabu".
+2. Say a [supported voice command](/voice_control/builtin_sentences/). For example, *Turn on the light*.
+ - Once the intent has been processed, the LED lights up in green and Home Assistant confirms the action.
+ - Make sure you’re using the area name exactly as you defined it in Home Assistant.
+ - You can also ask a question, such as
+ - *Is the front door locked?*
+ - *Which lights are on in the living room?*
+3. Your command is not supported? Add your own commands using [a sentence trigger](/voice_control/custom_sentences/).
+
+## Turning off microphone or screen
+
+1. If you do not want to Assist to listen for a while, you can turn off the microphone.
+ - Go to {% my integrations title="**Settings** > **Devices & Services**" %} and select the **ESPHome** integration.
+ - Under **ESP32-S3-BOX-3**, select **1 device**.
+ - Enable **Mute**.
+ - The screen of the ESP32-S3-BOX-3 will turn off, too.
+
+ ![Toggle to enable/disable Mute](/images/assist/wake_word_disable.png)
+2. If you want to just use the wake word, but do not want to use the screen, you can turn it off.
+ - Go to {% my integrations title="**Settings** > **Devices & Services**" %} and select the **ESPHome** integration.
+ - Under **ESP32-S3-BOX-3**, select **1 device**.
+ - Disable **LCD Backlight**.
+
+ ![Toggle to enable/disable wake word](/images/assist/s3-box-disable-screen.png)
diff --git a/source/voice_control/start_assist_from_dashboard.markdown b/source/voice_control/start_assist_from_dashboard.markdown
index f31b3b6f3c52..92db86f84426 100644
--- a/source/voice_control/start_assist_from_dashboard.markdown
+++ b/source/voice_control/start_assist_from_dashboard.markdown
@@ -1,9 +1,23 @@
---
title: "Starting Assist from your dashboard"
+related:
+ - docs: /voice_control/android/
+ title: Assist for Android
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Creating a local assistant
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/voice_remote_expose_devices/
+ title: Exposing devices to Assist
---
If you are using Home Assistant in kiosk mode, for example if you have a tablet mounted on the wall, the Assist icon in the top right corner is not accessible. In this case, use a dashboard button to start Assist.
+## Prerequisites
+
+- You have a [local assistant](/voice_control/voice_remote_local_assistant/) or a [Cloud assistant](/voice_control/voice_remote_cloud_assistant/) set up.
+- You have the devices you want to control via Assist [exposed to Assist](/voice_control/voice_remote_expose_devices/).
+
## To add an Assist button to the dashboard
1. On your dashboard, select **Add card** and select the **Button** card.
@@ -16,7 +30,3 @@ If you are using Home Assistant in kiosk mode, for example if you have a tablet
6. If you are using Assist with your voice, enable **Start listening**.
- If you don't want to use voice but just want to type, you do not need to enable listening.
7. **Save** your new button card.
-
-## Related topics
-
-- [Assist for Android](/voice_control/android/)
diff --git a/source/voice_control/thirteen-usd-voice-remote.markdown b/source/voice_control/thirteen-usd-voice-remote.markdown
index 2e1f77fdf80d..51dd02077192 100644
--- a/source/voice_control/thirteen-usd-voice-remote.markdown
+++ b/source/voice_control/thirteen-usd-voice-remote.markdown
@@ -1,5 +1,23 @@
---
title: "$13 voice assistant for Home Assistant"
+product_name: ATOM Echo
+device_name_entry: M5Stack Atom Echo a61920
+config_link: /voice_control/thirteen-usd-voice-remote/#to-delete-the-atom-echo-configuration-from-esphome
+related:
+ - docs: /voice_control/install_wake_word_add_on/
+ title: Enable a wake word
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake words
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/troubleshooting/
+ title: General troubleshooting section for Assist
+ - docs: /voice_control/voice_remote_local_assistant
+ title: Manually configured Assist pipeline
+ - docs: /voice_control/custom_sentences/
+ title: Using a sentence trigger
+ - docs: /common-tasks/os/#configuring-access-to-files
+ title: Access to your configuration files
---
This tutorial will guide you to turn an ATOM Echo into the
@@ -11,90 +29,30 @@ your smart home. Issue commands and get responses!
## Prerequisites
-- Home Assistant 2023.10, installed with the Home Assistant Operating System
-- [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist Pipeline](/voice_control/voice_remote_local_assistant)
+- Home Assistant 2023.10, installed with the Home Assistant Operating System. If you do not have Home Assistant installed yet, refer to the [installation page](/installation/) for instructions.
+- [Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/) or a manually configured [Assist Pipeline](/voice_control/voice_remote_local_assistant)
+- Have [enabled a wake word](/voice_control/install_wake_word_add_on/) for your voice assistant
- The password to your 2.4 GHz Wi-Fi network
- Chrome (or a Chromium-based browser like Edge) on desktop (not Android/iOS)
- [M5Stack ATOM Echo Development Kit](https://shop.m5stack.com/products/atom-echo-smart-speaker-dev-kit?ref=NabuCasa)
- USB-C cable to connect the ATOM Echo
-## Adding a wake word to your voice assistant
-
-1. Install the openWakeWord add-on:
- - Follow steps 1-3 of the procedure on [enabling a wake word](/voice_control/install_wake_word_add_on).
-2. Go to {% my voice_assistants title="**Settings** > **Voice assistants**" %} and select **Add assistant**.
-3. Give your assistant a name, for example the wake word you are going to use.
-4. Select the language you are going to use to speak to Home Assistant.
- - If the **Text-to-speech** and **Speech-to-text** sections do not provide language selectors, this means you do not have an Assist pipeline set up.
- - Set up [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist pipeline](/voice_control/voice_remote_local_assistant).
-5. Under **Text-to-speech**, select the language and voice you want Home Assistant to use when speaking to you.
-6. To define the wake word engine, under **Wake word**, select **openWakeWord**.
- - Then, select **ok nabu**.
- - If you created a new assistant, select **Create**.
- - If you edited an existing assistant, select **Update**.
- - **Result**: You now have a voice assistant that listens to a wake word.
-7. For the first run, it is recommended to use **ok nabu**, just to test the setup.
- - Once you have it all set up, you can [create your own wake words](/voice_control/create_wake_word/).
-
## Installing the software onto the ATOM Echo
-If you have used the ATOM Echo on Home Assistant before and have it installed via ESPHome add-on, you first need to remove its configuration.
-
-### To delete the ATOM Echo configuration from ESPHome
-
-1. Go to {% my integrations title="**Settings** > **Devices & Services**" %}, and select the ESPHome integration.
- - Under **Devices**, next to the **M5Stack Atom Echo a61920** entry, select the three-dots menu.
- - Select **Delete**.
-2. Make sure you have [access to the configuration files](/common-tasks/os/#configuring-access-to-files).
- - If you have never done this before, [install the file editor add-on](/common-tasks/os/#installing-and-using-the-file-editor-add-on).
-3. Access the config files and open the **esphome** folder.
-4. If there is a configuration file for the ATOM Echo, delete it.
-
-### To install the software on your ATOM Echo
-
Before you can use this device with Home Assistant, you need to install a bit of software on it.
1. Make sure this page is opened in a Chromium-based browser on a desktop. It does not work on a tablet or phone.
- Select the **Connect** button below. If your browser does not support web serial, you will see a warning instead of a button.
-
+
- **For advanced users**: The configuration file is available on [GitHub](https://github.com/esphome/firmware/blob/main/voice-assistant/m5stack-atom-echo.yaml).
-2. Connect the ATOM Echo to your computer.
- - In the pop-up window, view the available ports.
- - Plug the USB-C cable into the ATOM Echo and connect it to your computer.
- - In the pop-up window, there should now appear a new entry. Select this USB serial port and select **Connect**.
- - Depending on your computer, the entry might look different.
- ![Select USB port](/images/assist/esp32-atom-flash-select-port.png)
- - If no new port shows, your system may be missing a driver. Close the pop-up window.
- - In the dialog, select the CH342 driver, install it, then **Try again**.
- ![Open My link](/images/assist/esp32-atom-flash-no-port.png)
-3. Select **Install Voice Assistant**, then **Install**.
- - Follow the instructions provided by the installation wizard.
- - Add the ATOM Echo to your Wi-Fi:
- - When prompted, select your network from the list and enter the credentials to your 2.4 GHz Wi-Fi network.
- - Select **Connect**.
- - The ATOM Echo now joined your network. Select **Add to Home Assistant**.
-4. This opens the **My** link to Home Assistant.
- - If you have not used My Home Assistant before, you will need to configure it. If your Home Assistant URL is not accessible on `http://homeassistant.local:8123`, replace it with the URL to your Home Assistant instance.
- - Open the link.
- ![Open My link](/images/assist/esp32-atom-flash-06.png)
-5. Select **OK**.
-
- ![Set up ESPHome](/images/assist/esp32-atom-flash-07.png)
-6. If, at this stage, a dialog opens, prompting you to enter the connection settings of your ESPHome node, it means there is already a configuration set up for that ESPHome device.
- - Close the dialog and perform the procedure on [deleting the ATOM Echo configuration from ESPHome](/voice_control/thirteen-usd-voice-remote/#to-delete-the-atom-echo-configuration-from-esphome).
- - Restart Home Assistant.
- - Then, under {% my integrations title="**Settings** > **Devices & Services**" %}, your ATOM Echo should be discovered.
-7. To add the newly discovered device, select the ATOM Echo from the list.
- - Add your ATOM Echo to a room and select **Finish**.
-8. You should now see the **ESPHome** integration.
- ![New ESPHome device discovered](/images/assist/m5stack-atom-echo-discovered-33.png)
+{% include voice_assistant/install_esp_firmware.md %}
9. Select the **ESPHome** integration. Under **Devices**, you should see the **M5Stack Atom Echo** listed.
![ATOM Echo discovered](/images/assist/m5stack-atom-echo-discovered-new-03.png)
- Your ATOM Echo is connected to Home Assistant over Wi-Fi. You can now move it to any place in your home with a USB power supply.
-10. Congratulations! You can now voice control Home Assistant using a button with a built-in microphone. Now give some commands.
+10. Congratulations! You can now voice control Home Assistant using a button with a built-in microphone. Now give some commands.
## Controlling Home Assistant over the ATOM Echo
@@ -120,7 +78,7 @@ Before you can use this device with Home Assistant, you need to install a bit of
2. Go to {% my integrations title="**Settings** > **Devices & Services**" %} and select the **ESPHome** integration.
- Under **M5Stack ATOM Echo**, select **1 device**.
3. Disable **Use wake word**.
-
+
![Toggle to enable/disable wake word](/images/assist/wake_word_disable_on_atom_echo.png)
4. To start using push-to-talk, press the flat button with rounded shape on your ATOM Echo.
- The rectangular button on the side is the reset button. Do not press that one.
@@ -133,36 +91,3 @@ Before you can use this device with Home Assistant, you need to install a bit of
Are things not working as expected?
- Checkout the [general troubleshooting section for Assist](/voice_control/troubleshooting/).
-- You think there is a problem with noise or volume? Checkout the procedure below.
-
-### Tweaking the ATOM Echo configuration
-
-1. Make sure you have [access to your configuration files](/common-tasks/os/#configuring-access-to-files).
-2. Edit the general configuration:
- - Access the `config` folder and open the `configuration.yaml` file.
- - Enter the following text:
- ```yaml
- assist_pipeline:
- debug_recording_dir: /share/assist_pipeline
- ```
-3. Save the changes and restart Home Assistant.
-4. Make sure you have the [Samba add-on installed](/common-tasks/os/#configuring-access-to-files).
-5. On your computer, access your Home Assistant server via Samba.
- - Navigate to `/share/assist_pipeline`.
- - For each voice command you gave, you will find a subfolder with the audio file in `.wav` format.
-6. Listen to the audio file of interest.
-7. Adjust noise suppression and volume, if needed:
- - Access the `config` folder and open the `esphome/m5stack-atom-echo-wake-word.yaml` file.
- - Find the `voice_assistant` section.
- - If the audio is too noisy, increase the `noise_suppression_level` (max. 4).
- - If the audio is too quiet, increase either the `auto_gain` (max. 31) or the `volume_multiplier` (no maximum, but a too high value will cause distortion eventually).
-8. Collecting the debug recordings impacts your disk space.
- - Once you have found a configuration that works, delete the folder with the audio files.
- - In the `configuration.yaml` file, delete the `assist_pipeline entry` and restart Home Assistant.
-
-## Related topics
-
-- [Create your own wake words](/voice_control/create_wake_word/)
-- [General troubleshooting section for Assist](/voice_control/troubleshooting/)
-- [Access to your configuration files](/common-tasks/os/#configuring-access-to-files)
-- [Using a sentence trigger](/voice_control/custom_sentences/)
diff --git a/source/voice_control/troubleshooting.markdown b/source/voice_control/troubleshooting.markdown
index 2c1cd691de39..de34a08cb9da 100644
--- a/source/voice_control/troubleshooting.markdown
+++ b/source/voice_control/troubleshooting.markdown
@@ -26,7 +26,6 @@ If you want to test if a sentence works in a specific language without actually
- Which of the targeted entities were matched.
![Open the Assist developer tool sentence parser](/images/assist/assistant-debug-06.png)
-
## Test a sentence per assistant without voice: while executing the commands
If you want to test if a sentence works with a specific assistant while actively executing the commands, use the sentence parser in the **Debug** view.
@@ -88,3 +87,53 @@ The example below shows common pitfalls when enquiring about the weather. While
![Create alias for entity name](/images/assist/assist_create_alias.png)
5. If you just ask "What is the weather" when you have forecast entities for multiple entities, Assist always returns the data for the place that was first added. Currently, there is no way to change that.
+## Tweaking the Assist audio configuration for your device
+
+You think there is an issue with background noise or speaker volume? In some cases, it can help to tweak settings such as noise suppression and gain of your voice assistant device (such as the S32-S3-BOX-3).
+
+### To tweak the Assist audio configuration for your device
+
+1. Make sure you have the ESPHome add-on installed:
+ - Go to {% my supervisor_store title="**Settings** > **Add-ons** > **Add-on store**" %}.
+ - If you do not have the **ESPHome** add-on installed, install it.
+2. Start the ESPHome add-on, and select **Open Web UI**.
+3. Adopt your device to the ESPHome add-on:
+ - Once the ESPHome add-on is started, you see your device as **Discovered**.
+ - Select **Adopt**.
+ - When prompted, enter the Network credentials of your local 2.4 GHz Wi-Fi network and select **Adopt**.
+
+4. If you see a notification that there is an update available for this device, select **Update**.
+5. Make sure you have access to the configuration file.
+ - If you are unsure what method to use, [install the File editor](/common-tasks/os/#installing-and-using-the-file-editor-add-on) add-on.
+ - In the File Editor configuration, make sure the **Enforce basepath** option is disabled.
+6. Edit the general configuration to enable debug mode:
+ - Access the `config` folder and open the `configuration.yaml` file.
+ - Enter the following text:
+
+ ```yaml
+ assist_pipeline:
+ debug_recording_dir: /share/assist_pipeline
+ ```
+
+7. Save the changes and restart Home Assistant.
+8. Navigate to `/share/assist_pipeline`.
+ - For each voice command you gave, you will find a subfolder with the audio file in `.wav` format.
+9. Listen to the audio file of interest.
+10. Open the configuration file:
+ - In the ESPHome add-on, on your device, select **Edit**.
+ - This lets you edit the configuration file of that device.
+11. To add a section to adjust noise suppression and volume, add the following lines:
+
+ ```yaml
+ voice_assistant:
+ noise_suppression_level: 3
+ auto_gain: 31dBFS
+ volume_multiplier: 10.0
+ ```
+
+12. Adjust the settings:
+ - If the audio is too noisy, increase the `noise_suppression_level` (max. 4).
+ - If the audio is too quiet, increase either the `auto_gain` (max. 31) or the `volume_multiplier` (no maximum, but a too high value will cause distortion eventually).
+13. Note: Collecting debug recordings impacts your disk space.
+ - Once you have found a configuration that works, delete the folder with the audio files.
+ - In the `configuration.yaml` file, delete the `assist_pipeline entry` and restart Home Assistant.
diff --git a/source/voice_control/troubleshooting_the_s3_box.markdown b/source/voice_control/troubleshooting_the_s3_box.markdown
new file mode 100644
index 000000000000..470be2efe391
--- /dev/null
+++ b/source/voice_control/troubleshooting_the_s3_box.markdown
@@ -0,0 +1,84 @@
+---
+title: "Troubleshooting the ESP32-S3-BOX-3"
+related:
+ - docs: /voice_control/s3_box_voice_assistant/
+ title: Creating a ESP32-S3-BOX-3 voice assistant
+ - url: https://esphome.io/projects/index.html
+ title: ESPHome projects website
+---
+
+This section provides troubleshooting steps for the ESP32-S3-BOX-3 by Espressif.
+
+## Error: Unable to connect to Wi-Fi
+
+### Symptom
+
+The ESP32-S3-BOX-3 shows a message that it is unable to connect to Wi-Fi.
+
+### Remedy
+
+1. First, check if your network is ready in general.
+ 1. Make sure your router is on and within reach.
+ 2. Make sure you have chosen a Wi-Fi network that supports 2.4 GHz. The ESP32-S3-BOX-3 won't show up on a 5 GHz network.
+
+2. The next step is to make sure you entered the correct Wi-Fi password. Follow the steps either under **Option 1** or **Option 2**, depending on whether or not you have the ESPHome add-on installed.
+ - **Option 1**: You do not have the ESPHome add-on installed or you have the add-on but did **not** adopt the ESP32-S3-BOX-3. If the device is shown in green, it is not adopted.
+ ![ESP32-S3-BOX-3 not adopted](/images/assist/esp32-not-adopted.png)
+ 1. Make sure the USB cable is plugged into the ESP32-S3-BOX-3.
+ 2. Go to the [ESPHome projects website](https://esphome.io/projects/index.html), select the **Connect** button, then **Change Wi-Fi**.
+ - **Option 2**: You already have the ESPHome add-on installed and adopted the ESP32-S3-BOX-3 on your ESPHome dashboard.
+ 1. Make sure the USB cable is plugged into the ESP32-S3-BOX-3.
+ 2. In Home Assistant, go to [**Settings** > **Add-ons** > **ESPHome**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome), and **Open Web UI**.
+ 3. On the **ESP32-S3-BOX-3** add-on, select edit.
+ ![ESP32-S3-BOX-3 open config file](/images/assist/esps32-s3-edit-config.png)
+ - **Result**: An editor opens, showing the configuration file.
+ ![ESP32-S3-BOX-3 edit config file](/images/assist/esp32-edit-wifi-credentials.png)
+ 4. In the **wifi** section, check if it refers to the `secrets` file (contains `!secret`).
+ If it does not contain a **wifi** section, enter the section below:
+
+ ```yaml
+ wifi:
+ ssid: !secret wifi_ssid
+ password: !secret wifi_password
+ ```
+
+ 5. Close the editor and in the overview, select **Secrets**.
+ ![ESP32-S3-BOX-3 open config file](/images/assist/esp32-open-secrets.png)
+ 6. Enter your Wi-Fi credentials.
+ ![ESP32-S3-BOX-3 open config file](/images/assist/esp32-edit-secrets.png)
+
+## The Wi-Fi dialog never shows after the installation
+
+### Symptom
+
+The installation wizard never shows the dialog to connect to the Wi-Fi, but directly returns to the screen with **Install Voice Assistant**.
+
+### Remedy
+
+1. Disconnect the USB cable connecting the ESP32-S3-BOX-3 and connect it again.
+2. If this didn't help, check if you are using a USB cable that is power only and does not transfer data.
+
+## Error: No Home Assistant
+
+### Symptom
+
+The ESP32-S3-BOX-3 shows a message that there is no Home Assistant.
+
+### Description
+
+This message indicates that the device could connect to the Wi-Fi, but is unable to communicate with Home Assistant.
+
+### Remedy
+
+1. If you see this message during a restart or while an update is running, wait until the restart or update is finished.
+ - In this case, there is nothing you need to do. It is expected that the device temporarily stops communicating.
+2. Make sure your device is on the same network as Home Assistant.
+ - If you have a complex network setup with VLAN, make sure it is in the same VLAN.
+3. Go to {% my integrations title="**Settings** > **Devices & Services**" %}.
+ - If the device is shown as **Discovered**, select **Configure**.
+ ![ESP32-S3-BOX-3 open config file](/images/assist/esp32-discovered.png)
+ - If it was not discovered, select [**Add integration** > **ESPHome**](https://my.home-assistant.io/redirect/config_flow_start/?domain=esphome).
+4. If you see the screen below, but the ESP32-S3-BOX-3 is not listed, select **Setup another instance of ESPHome**.
+
+ ![ESP32-S3-BOX-3 open config file](/images/assist/esp32-s3-box-not-discovered.png)
+ - Go to your router, find the IP address or hostname of your device, and enter it.
diff --git a/source/voice_control/voice_remote_cloud_assistant.markdown b/source/voice_control/voice_remote_cloud_assistant.markdown
index 8b3691e29cf1..0a5f4b76bf9e 100644
--- a/source/voice_control/voice_remote_cloud_assistant.markdown
+++ b/source/voice_control/voice_remote_cloud_assistant.markdown
@@ -1,5 +1,14 @@
---
title: "Creating a cloud Assist pipeline"
+related:
+ - docs: /voice_control/install_wake_word_add_on/
+ title: Enabling a wake word
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake word
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/voice_remote_expose_devices/
+ title: Exposing devices to Assist
---
In Home Assistant, the Assist pipelines are made up of various components that together form a voice assistant.
@@ -42,10 +51,3 @@ To have the fastest processing voice assistant experience, follow these steps:
6. That's it. You can now speak to your device, and the device can answer in the language you defined.
7. If you haven't done so yet, [expose your devices to Assist](/voice_control/voice_remote_expose_devices/#exposing-your-devices).
- Otherwise you won't be able to control them by voice.
-
-## Related topics
-
-- [Enable Home Assistant Cloud](https://www.nabucasa.com/config/)
-- [Enabling a wake word](/voice_control/install_wake_word_add_on/)
-- [Create your own wake word](/voice_control/create_wake_word/)
-- [Expose your devices to Assist](/voice_control/voice_remote_expose_devices/#exposing-your-devices)
diff --git a/source/voice_control/voice_remote_expose_devices.markdown b/source/voice_control/voice_remote_expose_devices.markdown
index 41c7db07351e..30b9b3b38ffc 100644
--- a/source/voice_control/voice_remote_expose_devices.markdown
+++ b/source/voice_control/voice_remote_expose_devices.markdown
@@ -1,5 +1,10 @@
---
title: "Exposing devices"
+related:
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Creating a local assistant
---
To be able to control your devices over a voice command, you must expose your entities to Assist.
@@ -13,9 +18,3 @@ This is to avoid that sensitive devices, such as locks and garage doors, can ina
3. Select **Expose entities**.
1. Select all entities you want to be able to control by voice.
![Expose entities tab](/images/assist/assistant-expose-02.png)
-
-
-## Related topics
-
-- [Local assistant pipeline](/voice_control/voice_remote_local_assistant/)
-- [Cloud assistant pipeline](/voice_control/voice_remote_cloud_assistant/)
\ No newline at end of file
diff --git a/source/voice_control/voice_remote_local_assistant.markdown b/source/voice_control/voice_remote_local_assistant.markdown
index 1be6e2db80df..8112568c8b26 100644
--- a/source/voice_control/voice_remote_local_assistant.markdown
+++ b/source/voice_control/voice_remote_local_assistant.markdown
@@ -1,5 +1,14 @@
---
title: "Installing a local Assist pipeline"
+related:
+ - docs: /voice_control/voice_remote_expose_devices/#exposing-your-devices
+ title: Expose your devices to Assist
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake words
+ - url: https://github.com/openai/whisper
+ title: Whisper for speech-to-text
+ - url: https://github.com/rhasspy/piper
+ title: Piper for text-to-speech
---
In Home Assistant, the Assist pipelines are made up of various components that together form a voice assistant.
@@ -21,12 +30,13 @@ For the quickest way to get your local Assist pipeline started, follow these ste
1. Install the add-ons to convert text into speech and vice versa.
- Install the {% my supervisor_addon addon="core_whisper" title="**Whisper**" %} and the {% my supervisor_addon addon="core_piper" title="**Piper**" %} add-ons.
![Install the Whisper and Piper add-ons](/images/assist/piper-whisper-install-01.png)
- - Start both add-ons.
+ - If you want to use a wake word, also install the {% my supervisor_addon addon="core_openwakeword" title="**openWakeWord**" %} add-on.
+ - Start the add-ons.
- Once the add-ons are started, head over to the integrations under {% my integrations title="**Settings** > **Devices & Services**" %}.
- You should now see Piper and Whisper being discovered by the [Wyoming integration](/integrations/wyoming/).
![Whisper and Piper integrations](/images/assist/piper-whisper-install-new-02.png)
- - For both integrations, select **Configure**.
- - Once the setup is complete, you should see both Piper and Whisper in one integration.
+ - For each integration, select **Configure**.
+ - Once the setup is complete, you should see both Piper and Whisper (and, optionally, also openWakeword) in one integration.
![Whisper and Piper integration](/images/assist/piper-whisper-install-new-03.png)
- **Whisper** converts speech into text.
@@ -52,7 +62,7 @@ For the quickest way to get your local Assist pipeline started, follow these ste
- Depending on your language, you may be able to select different language variants.
- If you like, pick one of the predefined wake words.
![Select wake word](/images/assist/assist_predefined_wakeword.png)
- - You can even [define your own a wake word](/voice_control/create_wake_word/). This is not difficult to do, but you will need to set aside a bit of time for this.
+ - You can even [define your own wake word](/voice_control/create_wake_word/). This is not difficult to do, but you will need to set aside a bit of time for this.
- Once you defined your own wake word, it will show in this pick list.
3. That's it. You ensured your voice commands can be processed locally on your device.
@@ -68,9 +78,3 @@ View some of the options in the video below. Explained by Mike Hansen, creator o
The options are also documented in the add-on itself. Go to the {% my supervisor_addon addon="core_whisper" title="**Whisper**" %} or the {% my supervisor_addon addon="core_piper" title="**Piper**" %} add-on and open the **Documentation** page.
-## Related topics
-
-- [Create your own wake word](/voice_control/create_wake_word/)
-- [Expose your devices to Assist](/voice_control/voice_remote_expose_devices/#exposing-your-devices)
-- [Whisper for speech-to-text](https://github.com/openai/whisper)
-- [Piper for text-to-speech](https://github.com/rhasspy/piper)
diff --git a/source/voice_control/worlds-most-private-voice-assistant.markdown b/source/voice_control/worlds-most-private-voice-assistant.markdown
index 351fae4be239..a98b79de126f 100644
--- a/source/voice_control/worlds-most-private-voice-assistant.markdown
+++ b/source/voice_control/worlds-most-private-voice-assistant.markdown
@@ -1,5 +1,14 @@
---
title: "World's most private voice assistant"
+related:
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Creating a local assistant
+ - url: https://amzn.to/40k7mRa
+ title: Grandstream HT801
+ - url: https://www.nabucasa.com
+ title: Home Assistant Cloud
---
This tutorial will guide you to turn your old landline phone into the
@@ -10,7 +19,7 @@ your smart home and issue commands and get responses.
## Required material
-- Home Assistant 2023.5 or later
+- Home Assistant 2023.5 or later, installed with the Home Assistant Operating System. If you do not have Home Assistant installed yet, refer to the [installation page](/installation/) for instructions.
- An [analog phone](#about-the-analog-phone) with an RJ11 socket
- An analog telephone adapter
[Grandstream HT801](https://amzn.to/40k7mRa)
@@ -125,10 +134,3 @@ The phone shown in the video by TheFes is a *Heemaf type 1955*, which was used b
The phone used during creation of this tutorial is a 1953 [*Tischstation Mod.29 HF-TR* by Autophon AG](https://www.radiomuseum.org/r/autophon_tischstation_mod29_hf_tr.html).
![Analog phone Tischstation Mod.29 by Autophon AG](/images/assist/autophon-mod-29.jpg)
-
-## Related topics
-
-- [Grandstream HT801](https://amzn.to/40k7mRa)
-- [Home Assistant Cloud](https://www.nabucasa.com)
-- [Cloud assistant pipeline](/voice_control/voice_remote_cloud_assistant/)
-- [Local assistant pipeline](/voice_control/voice_remote_local_assistant/)
\ No newline at end of file
diff --git a/source/yellow/index.html b/source/yellow/index.html
index 200ac21627f5..c2bff3222b77 100644
--- a/source/yellow/index.html
+++ b/source/yellow/index.html
@@ -258,7 +258,7 @@
Buying a Raspberry Pi Compute Module 4 (CM4)
M.2 socket M-Key
Supports 2230, 2242, 2260, and 2280 modules
PCIe x1
-
Note: Google Coral AI Accelerator not working, details in this issue
+
Note: Google Coral AI Accelerator doesn't work in the expansion slot. For details, see this issue