October! I love this month!

For most of you (just like me), it means winter is coming. We all go back
inside. An excellent excuse to spent a bit more time on our smart homes, right? 😃

It is also the month of celebrating open source by joining
Hacktoberfest! If you make 4 contributions to any open-source
project (Home Assistant, for example 😘), you’ll receive a free t-shirt!

For the Home Assistant project, this means a busy month. However, that doesn’t
matter. It is always great to see new people contributing!

Meanwhile, Home Assistant turned 8 years old already! Wild! And the birthday
announcement was even wilder (more about that below).

Anyways, about this release: Z-Wave JS is stepping up its game! If you have
a Z-Wave network and are not using Z-Wave JS yet… well… it might be time
to bite the bullet and go for it. You won’t regret it.

This release also brings the new much-talked-about, Tuya integration
supported by Tuya themselves! I’m looking forward to how that evolves!

Oh, and of course, we will be live streaming the 2021.10 release party later today!
Join us at https://youtu.be/QWy4jWzKUEw @ 21:00 CEST.

Enjoy the release!

../Frenck

Home Assistant Amber

In case you’ve missed it: Home Assistant turned 8 years old! 🥳
And to celebrate that, we’ve revealed the Home Assistant Amber!

Home Assistant Amber was launched using a crowdfunding campaign, which already
reached its funding goal! This is absolutely fantastic!

And… You can still back the campaign to get your own Home Assistant Amber!

Go to campaign on CrowdSupply »

Z-Wave JS updates!

We have two awesome Z-Wave JS updates to share with you this release.

S2 is now supported

Security is something we all care about; We don’t want devices to be tampered
with, when using things like door locks or motion sensors that trip the alarm
system. For our Z-Wave devices, this is no different!

As of this release, Home Assistant’s Z-Wave JS integration supports S2!

S2 is short for Security 2, a new security standard for Z-Wave devices,
providing different keys for each device in the network. It is
the more secure upgrade of the previous S0 version.

Besides improved security, S2 capable devices (in general) are more reliable,
provide greater battery life and have less latency compared to S0.

The Z-Wave JS integration will automatically pick the best and most optimal
security method available.

Screenshot of Z-Wave JS pairing a new device with S2 security
Automatically uses the best possible security method when adding a new Z-Wave device.

If you have existing Z-Wave devices capable of using S2 already paired with
Home Assistant before this update, you will need to repair those to let them
use the new S2 feature.

Migration wizard from the old Z-Wave integration

Are you still using the old (and deprecated) zwave integration? If so, it
might be that you have been holding back on the Z-Wave JS upgrade because of
the work involved in migrating. Time to reconsider…

Home Assistant now provides a migration wizard for users of the old Z-Wave
integration to migrate more easily to the new Z-Wave JS integration.

To avoid surprises, the wizard will exactly show what it will do,
what it can and cannot migrate.

The old and deprecated Z-Wave integration will continue to work as long
as technically possible, but will no longer receive updates.

New Tuya integration

Oh yeah! The Tuya integration has been updated to the latest greatest version:
developed and maintained by a team of developers at Tuya themselves!

Right now, we have support for lights, switches, scenes, fans and climate
devices. Compared to the old integration, support for covers is currently
missing, which we hope to add in a future release. Additionally,
the new integration now pushes updates to Home Assistant!

If you ran the Tuya integration previously, you need to set it up from scratch,
as the integration has been entirely re-written and uses a different API.

For more information, please see the Tuya integration documentation.

Updated Material Design Icons

The Material Design Icons have been updated to v6!

This new version of MDI is packed with nearly 400 new icons (and over 75+ icons
have been specifically marked for Home Assistant) ❤️

Sample image showing some of the new Material Design Icons available
Some really useful new MDI icons have been added in this release!

Several icons have been removed or renamed in v6, but we have ensured
they will keep working for the upcoming two releases. Home Assistant will
write warnings in the logs in case you are using one of the affected icons.
The breaking changes section has more information about this.

Encrypted communications support for ESPHome

ESPHome and the ESPHome integration now have support for communicating
encrypted with each other. @OttoWinter has been working hard to add
this layer of encryption to the ESPHome API,
which utilizes the noise protocol.

Besides this version of Home Assistant, you’ll need at least
ESPHome 2021.9.0, and configure your ESPHome device to enable
encrypted communications.

Awesome job @OttoWinter!

For more information on how to do that, check out the
ESPHome documentation.

Other noteworthy changes

There is much more juice in this release; here are some of the other
noteworthy changes this release:

  • The energy dashboard now supports gas sensors that use kWh as the unit of
    measurement.
  • We have a new dev tool available for long-term statistics. This tool
    can be helpful when you need to resolve issues or warnings with the statistics.
  • The Shelly team has been busy and added support for the new, next-generation,
    Shelly devices. Also known as Gen2 or Plus devices (which are WebSocket RPC
    based).
  • The TP-Link Kasa Smart integration had a lot of love and improvements: support
    for new devices, configurable via the UI and device discovery. It fixes the
    famous and disliked “unavailable” bug! Thanks @rytilahti!
  • @Aohzan adjusted the Logitech Harmony integration to have a select
    entity to change the activity. Very handy!
  • HomeKit now supports the select and input_select entities, thanks to @ha0y!
  • @Kane610 added support to deCONZ for the Siren entity.
  • The manual alarm control panel now supports vacation mode, thanks @mbo18!
  • @koying added a new template method: regex_findall, that can return
    a list of all matches of a regular expression.
  • @emontnemery added more template goodness by adding the is_number
    function and filter that can be used to quickly determine if a value is
    a number or not.
  • The Lovelace entity card now supports setting the icon to change color when
    the entity is active (state_color). Thanks, @spacegaier
  • The SwitchBot integration is receiving a lot of love from @RenierM26!
    A bunch of new platforms, configuration via the UI, nice work!

New Integrations

We welcome the following new integrations this release:

Integrations now available to set up from the UI

The following integrations are now available via the Home Assistant UI:

Release 2021.10.1 – October 7

Release 2021.10.2 – October 8

Release 2021.10.3 – October 10

Release 2021.10.4 – October 11

Release 2021.10.5 – October 15

Release 2021.10.6 – October 18

If you need help…

…don’t hesitate to use our very active forums or join us for a little chat.

Experiencing issues introduced by this release? Please report them in our issue tracker. Make sure to fill in all fields of the issue template.

Breaking Changes

Below is a listing of the breaking change for this release, per subject or
integration. Click on one of those to read more about the breaking change
for that specific item.

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Templates

The following template filters and functions will now log a warning instead of
silently returning the input if the input is invalid and no default value is specified:

  • acos
  • as_timestamp
  • asin
  • atan
  • atan2
  • cos
  • float
  • log
  • multiply
  • round
  • sin
  • sqrt
  • strptime
  • tan
  • timestamp_custom
  • timestamp_local
  • timestamp_utc

The float filter will now log a warning instead of silently returning 0 if
the input is invalid and no default value is specified.

In Home Assistant Core 2021.12 the template will fail to render if no default
value is specified. You can specify a default value by passing to the filter like
this: {{ "abc" | float(default=0) }}.

(@emontnemery#56453)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Material Design Icons (MDI)

The Material Design Icons have been upgraded to v6, which brings in around
400 new icons and removes and renames some others.

The removed and renamed icons will keep working for this and the next release,
Home Assistant will write a warning to the logs in case
you are using one of the removed or renamed icons.

The following icons have been removed:

  • adobe-acrobat
  • adobe
  • amazon-alexa
  • amazon
  • android-auto
  • android-debug-bridge
  • bandcamp
  • battlenet
  • blogger
  • buffer
  • cash-usd-outline
  • cash-usd
  • cellphone-android (alternative: cellphone)
  • cellphone-iphone (alternative: cellphone)
  • concourse-ci
  • currency-usd-circle
  • currency-usd-circle-outline
  • do-not-disturb-off (alternative: minus-circle-off)
  • do-not-disturb (alternative: minus-circle)
  • douban
  • file-pdf (alternative: file-pdf-box)
  • file-pdf-outline (alternative: file-pdf-box)
  • file-pdf-box-outline (alternative: file-pdf-box)
  • google-photos
  • home-currency-usd
  • laptop-chromebook (alternative: laptop)
  • laptop-mac (alternative: laptop)
  • laptop-windows (alternative: laptop)
  • microsoft-edge-legacy
  • microsoft-yammer
  • pdf-box (alternative: file-pdf-box)
  • plus-one (alternative: numeric-positive-1)
  • poll-box (alternative: chart-box)
  • poll-box-outline (alternative: chart-box-outline)
  • tablet-ipad (alternative: tablet)
  • telegram
  • untappd
  • vk
  • xamarian-outline
  • xing
  • y-combinator

The following icons have been renamed:

  • apple-airplay to cast-variant
  • application to application-outline
  • application-cog to application-cog-outline
  • application-settings to application-settings-outline
  • bolnisi-cross to cross-bolnisi
  • boom-gate-up to boom-gate-arrow-up
  • boom-gate-up-outline to boom-gate-arrow-up-outline
  • boom-gate-down to boom-gate-arrow-down
  • boom-gate-down-outline to boom-gate-arrow-down-outline
  • buddhism to dharmachakra
  • cellphone-erase to cellphone-remove
  • celtic-cross to cross-celtic
  • christianity to cross
  • christianity-outline to cross-outline
  • face to face-man
  • face-outline to face-man-outline
  • face-profile-woman to face-woman-profile
  • face-shimmer to face-man-shimmer
  • face-shimmer-outline to face-man-shimmer-outline
  • flash-circle to lightning-bolt-circle
  • floor-lamp-variant to floor-lamp-torchiere-variant
  • gif to file-gif-box
  • gradient to gradient-vertical
  • hand to hand-front-right
  • hand-left to hand-back-left
  • hand-right to hand-back-right
  • hinduism to om
  • human-greeting to human-greeting-variant
  • iframe to application-brackets
  • iframe-outline to application-brackets-outline
  • iframe-array to application-array
  • iframe-array-outline to application-array-outline
  • iframe-braces to application-braces
  • iframe-braces-outline to application-braces-outline
  • iframe-parentheses to application-parentheses
  • iframe-parentheses-outline to application-parentheses-outline
  • iframe-variable to application-variable
  • iframe-variable-outline to application-variable-outline
  • islam to star-crescent
  • judaism to star-david
  • monitor-clean to monitor-shimmer
  • pharmacy to mortar-pestle-plus
  • sparkles to shimmer
  • teach to human-male-board
  • television-clean to television-shimmer
  • text-subject to text-long
  • twitter-retweet to repeat-variant
  • voice-off to account-voice-off

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Alexa

Removes the support for legacy fan speeds.

Using speeds (‘off’, ‘low’, ‘medium’ or ‘high’) for the fan platform became
deprecated with Home Assistant Core 2021.07, while preset modes and percentage
support was added.

(@jbouwh#55174) (alexa docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

AVM FRITZ!Box Tools

In order to introduce the new link status binary sensor, the previous
connectivity sensor has been renamed to connection.

Please check both your Lovelace configuration and your automations to reflect this change.

(@chemelli74#55446) (fritz docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Discovery API

The API endpoint /api/discovery_info now only return blank values.
This endpoint is scheduled to be removed in Home Assistant Core 2022.1.

As a regular user of Home Assistant, this change should not affect you.

(@ludeeus#56097) (api docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

DLNA Digital Media Renderer

The DLNA Digital Media Renderer integration migrated to configuration via the UI. Configuring
DLNA Digital Media Renderer via YAML configuration has been deprecated and will be removed in a
future Home Assistant release.

Your existing YAML configuration is automatically imported on upgrade to this release;
and thus can be safely removed from your YAML configuration after upgrading.

(@chishm#55267) (dlna_dmr docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

HomeKit

When an iOS device wakes up it has to refresh all the A records
for each paired accessory. When there are many paired accessories
this can result in HomeKit timing out before it can refresh
all the records and declaring some accessories unavailable.

We now use the same server name for all HomeKit bridges and accessories
on a single Home Assistant instance. This allows the system to avoid
doing multiple lookups since it only needs to find one A record when
waking from sleep.

iOS devices and Home Hubs (Apple TVs / HomePods / iPads) may cache
the server name even if it expires and may require
a reboot to see the new name. If this is the case, accessories may
show unavailable when outside the home until ALL home hubs are rebooted.

(@bdraco#55860)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Honeywell Lyric

The polling interval of the Honeywell Lyric integration has been decreased to
300 seconds to reduce chances of hitting API limit.

(@timmo001#56393) (lyric docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Minut Point

The (non-working) pressure sensor has been removed.

(@fredrike#56934) (point docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Modem Caller ID

The Modem Caller ID integration migrated to configuration via the UI. Configuring
Modem Caller ID via YAML configuration has been deprecated and will be removed in a
future Home Assistant release.

Your existing YAML configuration is automatically imported on upgrade to this release;
and thus can be safely removed from your YAML configuration after upgrading.

(@tkdrob#46677) (modem_callerid docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Moon

The Moon entity would never have a primary moon phase state. So the state of
the moon would go from Waxing gibbous directly to Waning gibbous,
without being Full Moon in between.

Now the Moon entity will correctly have the primary moon phases: New Moon,
First Quarter, Full Moon and Third Quarter.

If you have automations relying on the state of the moon, please review them
to check if they still behave as intended.

(@stefanroelofs#55518) (moon docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

NETGEAR

The NETGEAR integration migrated to configuration via the UI. Configuring
NETGEAR via YAML configuration has been deprecated and will be removed in a
future Home Assistant release.

Your existing YAML configuration is automatically imported on upgrade to this release;
and thus can be safely removed from your YAML configuration after upgrading.

(@starkillerOG#54479) (netgear docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Network UPS Tools (NUT)

The extra attribute state is removed from all sensors, since it is already exposed as an own sensor.

If you relied on this attribute for your automations or script, you might need to adjust to this change.

(@mib1185#56078) (nut docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

OpenGarage

The OpenGarage integration has previously been migrated to configuration via the UI.
Configuring OpenGarage via YAML configuration has now been deprecated and will be
removed in a future Home Assistant release.

Your existing YAML configuration is automatically imported on upgrade to this release;
and thus can be safely removed from your YAML configuration after upgrading.

(@Danielhiversen#56829) (opengarage docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Pi-hole

The extra attribute domains_blocked is removed from all sensors, since it is already exposed as an own sensor.

If you relied on this attribute in your automations or script, you need to adjust those to match this change.

(@mib1185#56076) (pi_hole docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

ReCollect Waste

The previously deprecated YAML configuration of the ReCollect Waste integration has been removed.

ReCollect Waste is now configured via the UI, any existing YAML configuration has been imported
in previous releases and can now be safely removed from your YAML configuration files.

(@bachya#55426) (recollect_waste docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Renault

The extra state attribute last_update has been normalized to the UTC timezone.

If you have any automation or scripts that relied on this, you might need
to adjust those to take this into account.

(@epenet#54745) (renault docs)


sensor.charge_mode has been moved to select.charge_mode (note: unique_id is unchanged).

(@epenet#55494) (renault docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

RFXCOM RFXtrx

The previously deprecated YAML configuration of the RFXCOM RFXtrx integration has been removed.

RFXCOM RFXtrx is now configured via the UI, any existing YAML configuration has been imported
in previous releases and can now be safely removed from your YAML configuration files.

(@elupus#54173) (rfxtrx docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Speedtest.net

The previously deprecated YAML configuration of the Speedtest.net integration has been removed.

Speedtest.net is now configured via the UI, any existing YAML configuration has been imported
in previous releases and can now be safely removed from your YAML configuration files.

(@engrbm87#55642) (speedtestdotnet docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Sure Petcare

The Sure Petcare integration has previously been migrated to configuration via the UI.
Configuring Sure Petcare via YAML configuration has now been deprecated and will be
removed in a future Home Assistant release.

Your existing YAML configuration is automatically imported on upgrade to this release;
and thus can be safely removed from your YAML configuration after upgrading.

(@Danielhiversen#56209) (surepetcare docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

System Bridge

The following additional state attributes have been removed from the existing
sensors:

  • available
  • filesystem
  • load_average
  • load_idle
  • load_system
  • load_user
  • mount
  • size
  • type
  • used

You should update any automations and scripts that depend on these state
attribute to use the separate sensors available for these states.

(@timmo001#53892) (system_bridge docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

TP-Link Kasa Smart

The TP-Link Kasa Smart integration migrated to configuration via the UI. Configuring
TP-Link Kasa Smart via YAML configuration has been deprecated and will be removed in a
future Home Assistant release.

Your existing YAML configuration is automatically imported on upgrade to this release;
and thus can be safely removed from your YAML configuration after upgrading.

(@rytilahti#56701) (tplink docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Tuya

The previous Tuya API is no longer maintained by Tuya officially and the
new integration will be officially maintained by the Tuya Developer Team.

If you used the integration before this release, you’d need to set it up
again from scratch. To do that, remove any existing instances
from the integration dashboard. After that, use our documentation
for guidance on setting up the new integration.

The cover platform is not ready for this release but will be included later.
If you have cover devices, they will not available for control at the moment.

(@zlinoliver#56820) (tuya docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

UPnP/IGD

UPnP/IGD integration no longer supports the local_ip configuration option.
If you still have this configured in your YAML configuration, please remove it.

(@StevenLooman#55540) (upnp docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Velbus

The Velbus integration migrated to configuration via the UI. Configuring
Velbus via YAML configuration has been deprecated and will be removed in a
future Home Assistant release.

The Velbus services calls will now need an interface parameter,
this is to allow support for multiple Velbus connections. If you are using
Velbus services in your automations or scripts, you may been to adjust
those to this change.

(@Cereal2nd#54032) (velbus docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Xiaomi Miio

The model and mode attributes have been removed.
The preset_mode attribute is available in place of the mode attribute.

The device model is available in the Device info window.

(@bieniu#55846) (xiaomi_miio docs)

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Custom integrations: ruamel.yaml

The unused ruamel.yaml utility functions have been removed. They were never
in use nor documented. If your custom integration relied on ruamel.yaml being
installed, make sure it’s part of your manifest.

(@balloob#55672)

Farewell to the following

The following integrations are no longer available as of this release:

  • Trackr has been removed. The API is no longer available and
    has therefore been removed. (@FuzzyMistborn#55917)
  • Tesla has been removed due to increased Tesla login security preventing
    third-parties to log in. (@alandtse#55988)

All changes

function showDetails(el) {
const content = el.parentElement.querySelector(“.details-block-content”);
const up = el.querySelector(“svg#up”);
const down = el.querySelector(“svg#down”);
up.style.display = up.style.display === “none” ? “block” : “none”;
down.style.display = down.style.display === “none” ? “block” : “none”;
content.hidden = !content.hidden;
}

Click to see all changes!