Home Assistant Core 2022.5!
And, as often said: “All things seem possible in May!”. Well, possibilities
we have for you this last month of spring.
The most visible thing this release is the next iteration of the settings menu,
of which the result, to me personally, makes tons of sense. It took me a bit
to get used to, but honestly I like it! 🤩
Meanwhile, at Nabu Casa, they released annual subscriptions for Home Assistant
Cloud worldwide (except for Canada, the UK, and the EU, they will follow soon with
local currency support).
I’m also very excited to present you with a whole lot of new powerful
automations and scripts features! Some for the UI, but there are some real
game changers in there that our YAML community will love! 🤖
Enjoy the release!
../Frenck
- Reorganized settings menu
- Find entities even quicker than before
- New automation & script features
- Gauge card segment colors
- Database optimizations
- Update entity updates
- Insteon control panel
- Template selector
- Other noteworthy changes
- New Integrations
- Integrations now available to set up from the UI
- Release 2022.5.1 – May 5
- Release 2022.5.2 – May 6
- Release 2022.5.3 – May 8
- Release 2022.5.4 – May 12
- Need help? Join the community!
- Breaking Changes
- Farewell to the following
- All changes
Reorganized settings menu
A couple of releases ago, we started reorganizing the configuration menu, and
this release is bringing the next big step in that reorganization.
The goal is to have everything in a single logical place, and after user tests
and many discussions in frontend and UX channels, this is what the menu
now looks like:
Most notably, it’s been renamed from “Configuration” to “Settings”, and we have a
brand new “System” submenu (shown on the right in the above screenshot).
Are you running Home Assistant OS? The Supervisor has been fully merged into
the settings menu to provide a seamless/unified experience. It removes
weirdness like having a network section in one menu and the Supervisor section.
Blueprints moved to the automations & scenes section, and by popular request:
Helpers have moved to the devices & services page.
YAML configuration tools have a new home in the developer tools, a more
logical place for YAML configuration checks and reloading.
You might notice some of the new menu items are fairly empty. For those menus,
like “Storage” and “Hardware”, we have more content planned soon!
Just to be sure, we have added a list of changes to the breaking changes section;
please check those out in case you are missing something.
Find entities even quicker than before
Looking to access that one entity quickly? But it isn’t on your dashboard?
The Quick Bar helps with that; just press e
anywhere
you are in Home Assistant. This release adds a quick search button to the
dashboards as well, so you can look up and access any entity you need,
even when it is not on your current dashboard.
To conserve space, the search is not shown on mobile devices; but is available
via the overflow menu (the three dots in the top right).
New automation & script features
This release is packed with new automation & script features! Some have been
added to the UI, and others are advanced features that are only available when
using YAML.
One thing almost all these changes have in common: They have been requested
and voted for by the community in our Feature Requests forum.
If-then
When we introduced the Choose action,
our goal was to provide a structure that allowed for other action sequences
selectively based on conditions.
While this structure is very flexible and extensive, there was still a desire
for an if-then(-else) structure that is small, simple, compact, and clean.
This release brings you just that.
The new if-then action is available via YAML and via the UI using automations
and scripts editors.
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;
}
If YAML automations are more your thing, this is how you can use the new
if-then action in your automations and scripts.
actions:
- if:
- alias: "If no one is home"
condition: state
entity_id: zone.home
state: 0
then:
- alias: "Then start cleaning already!"
service: vacuum.start
target:
area_id: living_room
# The `else` is fully optional and can be omitted
else:
- service: notify.notify
data:
message: "Skipped cleaning, someone is home!"
Note that that if
also supports a shorthand condition template (if that
is more your style), for example:
actions:
- if: "{{ states('zone.home') == 0 }}"
then:
- alias: "Then start cleaning already!"
service: vacuum.start
target:
area_id: living_room
More information can be found in the scripts documentation.
Calendar trigger
@allenporter gave the Calendar integration (and the Google Calendars
integration) lots of love. In the process, a new Calendar trigger was added,
which is available for use in your automations.
The new calendar trigger is available in the automation editor.
This brand new trigger is slightly more flexible than the (previously only
other option) state trigger. It is available for automations in YAML as well,
and the trigger provides lots of trigger variables
you can use in your templates.
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;
}
The calendar trigger is, of course, also available in YAML. This automation
example shows the use of the trigger and some of the variables it provides.
automation:
trigger:
- platform: calendar
event: start
entity_id: calendar.personal
action:
- service: persistent_notification.create
data:
message: >-
Event {{ trigger.calendar_event.summary }} @
{{ trigger.calendar_event.start }}
More information can be found in the Calendar integration documentation.
For each
We had several options available to repeat a group of actions. For example,
repeating based on a count, while a condition passes, or until a condition
passes.
These are very powerful, but repeating a sequence for each item in a list
was also requested and voted for. This release adds: For each.
This is an advanced feature and is only available for use in automations written
manually in YAML. Here is an example that sends out two notifications in
different languages:
repeat:
for_each:
- language: English
message: Hello World
- language: Dutch
message: Hallo Wereld
sequence:
- service: notify.phone
data:
title: "Message in {{ repeat.item.language }}"
message: "{{ repeat.item.message }}!"
Each item in the list will be run against a sequence of actions, and the item
is available as a variable you can use in your templates. The items you can
provide to for_each
can be mappings, lists of just strings, and even complex
templates that provide a list as a result.
More information can be found in the scripts documentation.
Disable any trigger, condition, or action
Sometimes, you may want to disable a specific trigger, action, or condition,
whether this is for testing, a temporary workaround, or any other reason.
In YAML, you’d comment out parts of your automation, but if you wanted
to do that in the UI, the only option you have is to delete it from the
automation or script.
In this release, we added support for disabling a trigger, action, or condition;
without the need for removing it or commenting it out! A disabled trigger
won’t fire, a disabled condition always passes, and a disabled action is
skipped.
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;
}
If YAML automations are more your thing, this disabled feature is still
helpful. While, of course, you can still comment parts out easily; using
this feature will make disabled parts still show up in automation and
script debug traces.
Every trigger, condition, and action now has an enabled
parameter. Which
you can set to false
to disable that section. For example:
# Example automation with a disabled trigger
automation:
trigger:
# This trigger will not trigger, as it is disabled.
# This automation does not run when the sun is set.
- enabled: false
platform: sun
event: sunset
# This trigger will fire, as it is not disabled.
- platform: time
at: "15:32:00"
More information can be found in the disabled Triggers, Conditions,
and Actions documentation.
Continue on error
An automation runs a sequence of actions. One of the questions we
often see/read/get is: “If one of the actions fails, why does the whole
automation stop?”
Good question! To answer this, we have added: Continue on error.
It allows specific steps in an automation or script sequence to fail
without interrupting the rest of the sequence.
This advanced feature is currently only available for automations and scripts
written in YAML. The following example shows an automation action that will
always run the second action, even if the first action fails with an error:
action:
- alias: "If this one fails..."
continue_on_error: true
service: notify.super_unreliable_service_provider
data:
message: "I'm going to error out..."
- alias: "This one will still run!"
service: persistent_notification.create
data:
title: "Hi there!"
message: "I'm fine..."
More information can be found in the scripts documentation.
Stopping a script or automation
You can now stop a script or automation halfway using the Stop action.
Combined with the previously mentioned new If-then action, this can be used
to stop an automation or script conditionally.
For example, this can be helpful if you want just part of an automation to
run when you are home and run it at full when you are away.
This feature is available both via the UI and YAML.
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;
}
When writing YAML automations or scripts, this is how the Stop action looks:
action:
- stop: "Stop right here!"
# Optionally mark it as an unexpected error
error: true
More information can be found in the scripts documentation
Parallelizing actions
This release introduces a highly advanced feature that provides a way to
parallelize actions.
By default, all actions in Home Assistant run sequentially. This means the
next action is only started after the current action has been completed.
Running in serial 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 simultaneously.
automation:
- trigger:
- platform: state
entity_id: binary_sensor.motion
to: "on"
action:
- parallel:
- service: notify.person1
data:
message: "These messages are sent at the same time!"
- service: notify.person2
data:
message: "These messages are sent at the same time!"
This feature is partly available via the UI; however, as said: This is quite
a powerful and advanced feature, and it comes with caveats. Be sure to check
out the script documentation on parallelizing actions
before deciding to use it.
Using a single state trigger for multiple entities
If you write automations in YAML, you are probably already aware of the
ability to trigger on multiple entities in a single trigger; it has been
around for quite some time.
And now also available in the UI. A small addition that might help you cut
down the length of your UI-managed automations.
Trigger on not matching to/from states
This is a YAML only feature we have added to the state triggers: Triggering
on not matching to/from states. Yes, you read that correctly. When it not
matches it triggers.
Instead of from
, you can now use not_from
and instead of to
, you can now
use not_to
. This example trigger will only trigger if the state was previously
not “unavailable” or “unknown”:
trigger:
- platform: state
entity_id: light.living_room
not_from:
- "unavailable"
- "unknown"
to: "on"
More information can be found on the state condition documentation.
Shorthand notation for logical conditions
A neat little YAML feature @thomasloven added can make your YAML-based
automations and scripts looks significantly cleaner.
Logical conditions (also known as and
, or
, not
) now have a shorthand
notation. Some example pseudo code to show them all:
or:
-
- and:
-
-
- not:
-
In the above , of course, needs to be replaced with an actual
condition, but the short new syntax of or
, and
, and not
is clearly visible.
More information can be found on the condition documentation.
Gauge card segment colors
An excellent addition by @Netzwerkfehler is the ability to freely define the
number of segments, and their colors, of the gauge card!
Screenshot of the gauge card with multiple colored segments.
Helpful if you’d like to define upper and lower sensor
limits on your gauge, as shown in the example above. The configuration example
used for the above screenshot can be found in the Gauge Card documentation.
Database optimizations
The last release focused on reducing the size of the database and optimizing
the writing of data to the database.
While there are some additional optimizations in this release to further reduce
the amount of data that needs to be written, in this release, we focused on how
often data is read from the database and optimizing its scale for larger setups.
This release is for you if you have many sensors generating statistics, as
compiling statistics now takes 30-100x less time.
Are you using the History Stats integration? The number of database queries
needed for most sensors with a fixed start time is 99% less.
We have made additional improvements to the history APIs to speed up retrieving
from the database, reducing API response times by 15-35% on average.
Finally, we have reduced the memory used during database migrations to smooth
future migrations and are now automatically repacking your database once a
month to keep things tidy.
Update entity updates
In the previous release, we introduced update entities.
It was a well-received concept, and we added a couple of improvements to it.
Almost all feedback we got involved “Skipping an update”-related functionality.
Can I unskip an update? How to see which updates I have skipped?
To help with these, we added a dedicated settings menu for updates. It provides
an overview of all pending updates and provides the ability to view updates
you have previously skipped.
Skipped updates can now be “unskipped” again too! This works in the same way
as skipping an update but can also be done in automations using this new
service
.
Two new integrations have implemented update entities this release:
- Sensibo, done by @gjohansson-ST
- AVM FRITZ!Box Tools, done by @Mask3007
And finally, if you’d like to receive update notifications: The
“Update notifications” Blueprint by @mdegat01 has been
getting quite some attention in the community this month!
Insteon control panel
In case you have missed it, the US smart home company Insteon went out of
business and shut down its cloud services.
Read more about it in our dedicated blog post.
As Home Assistant works with Insteon locally, we have seen quite a few new
users joining our community; so:
👋 Hello, dear Insteon user. We have a new control panel for you!
The new Insteon control panel allows you to manage your Insteon devices.
This new control panel allows you to manage your Insteon device from
Home Assistant directly, just like you would have done previously with
the Insteon application.
Thanks for you hard work on this Tom Harris!
Template selector
A new selector is added: The Template selector.
This new selector can be used in, for example, Blueprints, scripts fields, or
in a (custom) integration. It provides a nice code editor with Jinja syntax
highlighting and entity auto-completion.
We have deployed it in the automations and scripts editor too! So, you
now get this editor when editing your template conditions or wait for template
actions in the UI.
Other noteworthy changes
There is much more juice in this release; here are some of the other
noteworthy changes this release:
- Every script now automatically gets a unique ID, which means you can edit
their name, icon and assign them to areas straight from the UI!
Thanks, @frenck! - If you run the Z-Wave JS server manually in, for example, a Docker container,
it will now be automatically discovered on your network. Thanks @raman325! - Template entities now have a
this
variable available, which is a reference
to the state of the template entity itself. Awesome work @akloeckner and
@emontnemery! - Running Home Assistant Core or Container? @frenck added the
backup.create
service to the
backup integration allowing you to create an automation to create backups
on a schedule. - @sisimomo added Markdown support to Blueprint input descriptions, allowing
you to add links to, for example, documentation in your Blueprints. - The Shelly integration now supports authentication for the second generation
devices, thanks @thecode! - State conditions with multiple entities can now also match if any of the
entities match the condition (instead of all), thanks @frenck! - Sonos now has a favorites sensor so that you can access and use your
favorites in your automations, scripts, and templates. Thanks @jjlawren! - @dmulcahey added support for configuring the power-on state of devices
that have this configuration option to ZHA. Nice! - Sensors now have a new device class available: “duration”. Thanks, @bdraco!
- The output of Media Selector can now be directly used with play media
service calls in your Blueprints. Awesome, @emontnemery! - @raman325 added frontend support for Sirens, so you can actually turn one
on from the UI. 🚨 Alarming news @raman325! - @frenck added a persons attribute to zones, which indicates who is
currently in a zone. - When customizing the device class / “Show as” of an entity in the UI, you can
now set it to nothing/empty as well. Thanks, @zsarnett! - @rdfurman Added support to the Honeywell Total Connect Comfort (US)
integration for outdoor sensors. Awesome! - Philips TV now provides a switch to turn on/off the “Ambilight+Hue” syncing
(if your TV model supports that). Thanks, @bramstroker!
New Integrations
We welcome the following new integrations this release:
- Meater, added by@Sotolotl
- QNAP QSW, added by @Noltari
- SENZ, added by @milanmeu
- SlimProto (Squeezebox Players), added by @marcelveldt
- Trafikverket Ferry, added by @gjohansson-ST
Integrations now available to set up from the UI
The following integrations are now available via the Home Assistant UI:
- SABnzbd, done by @shaiu
- SQL, done by @gjohansson-ST
- Steam, done by @tkdrob
- Tautulli, done by @tkdrob
Release 2022.5.1 – May 5
- fix reading of battery messages (@2Fake – #70659) (devolo_home_control docs)
- Only test for EncryptedBridge in Samsung J/H models (@epenet – #71291) (samsungtv docs)
- Ensure rachio retries setup later when cloud service is broken (@bdraco – #71300) (rachio docs)
- Fix lutron caseta occupancy sensors (@bdraco – #71309) (lutron_caseta docs)
- Update aioairzone to v0.4.3 (@Noltari – #71312) (airzone docs)
- Fix apple tv warning (@balloob – #71321) (apple_tv docs)
- Fix Meater (@emontnemery – #71324) (meater docs)
- Bump numpy to 1.21.6 (@pvizeli – #71325) (opencv docs) (tensorflow docs) (trend docs) (iqvia docs) (compensation docs)
- Only lookup unknown Google Cast models once (@emontnemery – #71348) (cast docs)
- Bump library version (@bieniu – #71349) (nam docs)
- Ignore loading system entity category (@balloob – #71361)
- Fix importing blueprints (@balloob – #71365) (blueprint docs)
- Add unique ids to sensors (@shaiu – #71367) (sabnzbd docs)
- Bump pychromecast to 12.1.1 (@balloob – #71377) (cast docs)
Release 2022.5.2 – May 6
- Upgrade glances_api to 0.3.5 (@difelice – #71243) (glances docs)
- Fix Canary camera stream blocking call (@0bmay – #71369) (canary docs)
- Update Zigpy attribute cache for switch devices that do not report state (@dmulcahey – #71417) (zha docs)
- Stringify enums in selectors (@balloob – #71441) (blueprint docs)
Release 2022.5.3 – May 8
- Move flexit climate to HVAC action (@balloob – #71443) (flexit docs)
- Fix display of multiline queries in sql config flow (@bdraco – #71450) (sql docs)
- Ensure sql sensors keep working after using the options flow (@bdraco – #71453) (sql docs)
- Fix rgb conversion in fibaro light (@rappenze – #71476) (fibaro docs)
- Revert usage of Fibaro Client V5 as it has too many errors (@rappenze – #71477) (fibaro docs)
- Update py-canary to 0.5.2 (@0bmay – #71489) (canary docs)
- bump total_connect_client to 2022.5 (@austinmroczek – #71493) (totalconnect docs)
- Add timeout (@bieniu – #71499) (brother docs)
- Add Ukraine Alarm integration (@PaulAnnekov – #71501) (ukraine_alarm docs) (new-integration)
- fix speed sensor wrong number (@shaiu – #71502) (sabnzbd docs)
- Bump frontend to 20220504.1 (@balloob – #71504) (frontend docs)
- Fix other enums in helpers (@balloob – #71505)
Release 2022.5.4 – May 12
- Fix timezone issue on onvif integration (@marvinroger – #70473) (onvif docs)
- Fix Insteon issue with dimmer default on level (@teharris1 – #71426) (insteon docs)
- Migrate sabnzbd sensors unique ids (@shaiu – #71455) (sabnzbd docs)
- Bump simplisafe-python to 2022.05.1 (@bachya – #71545) (simplisafe docs)
- Fix SABnzbd config check (@shaiu – #71549) (sabnzbd docs)
- Fix typer/click incompatibilty for unifiprotect (@AngellusMortis – #71555) (unifiprotect docs)
- Improve Google Cast detection of HLS playlists (@emontnemery – #71564) (cast docs)
- Correct device class for meater cook sensors (@emontnemery – #71565) (meater docs)
- Bump pychromecast to 12.1.2 (@emontnemery – #71567) (cast docs)
- Bump logi_circle to 0.2.3 (@evanjd – #71578) (logi_circle docs)
- Bump nam backend library to version 1.2.4 (@bieniu – #71584) (nam docs)
- Bump pydeconz to v92 (@Kane610 – #71613) (deconz docs)
- Fix wrong brightness level change visible in UI (@rappenze – #71655) (fibaro docs)
- Prevent history_stats from rejecting states when microseconds differ (@bdraco – #71704) (history_stats docs)
- Fix zwave_js device automation bug (@raman325 – #71715) (zwave_js docs)
- Fix merge conflict with master to dev in sabnzbd (CI fix) (@bdraco – #71605) (sabnzbd docs)
- Add use_wallclock_as_timestamps option to generic (@uvjustin – #71245) (generic docs)
- Changed API for Ukraine Alarm (@PaulAnnekov – #71754) (ukraine_alarm docs)
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 is an excellent place to be
at, and don’t forget to join our amazing forums.
Found a bug or issue? Please report it in our issue tracker,
to get it fixed! Or, check our help page for guidance for more
places you can go.
Are you more into email? Sign-up for our Building the Open Home 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.
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;
}
This release contains several changes to the configuration menu. These are the
most important changes.
-
The
Configuration
menu has been renamed toSettings
. -
Helpers
moved toDevices & Services
. -
Blueprints
moved toAutomations & Scenes
. -
Areas
is now grouped with `Zones. -
Dashboard
Resources
moved to overflow menu*. -
A brand new
System
menu housing all system-related settings:- The
Restart
button is available in theSystem
menu. - New
Updates
menu, which also now provides the ability to join or leave
the beta channel from the overflow menu*. - All logs moved to
Logs
(Supervisor, audio, etc). Backups
moved from the Supervisor/Main menu to here.Network
now has all network related settings previously in the General
settings and Supervisor.Storage
provides information about used space, eMMC Lifetime, and also
provides theMove datadisk
feature in the overflow menu*.Hardware
now has theReboot
andRestart Host
controls,
Available Hardware
is available in the overflow menu*.System Health
moved to its own menu item in the system menu.- Processor and memory usage was moved into the new
System Health
menu. - The integration list with timings, previously shown in the
About
menu, is
moved into the newSystem Health
menu.
- The
Additionally, the developers tools has a brand new YAML
tab, which contains
the buttons and tools to reload and check your YAML configuration. This was
previously known as “Server Controls”, but now moved to the developer tools.
* The overflow menu is the menu you see when you click on the three vertical
dots in the top right of your screen.
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;
}
The previously deprecated YAML configuration of the AVM FRITZ!Box Call Monitor
integration has been removed.
AVM FRITZ!Box Call Monitor 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.
(@cdce8p – #70829) (documentation)
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;
}
The binary sensor entity showing that an update is available for the FRITZ!Box
firmware has been deprecated and will be removed in Home Assistant 2022.7.
The AVM FRITZ!Box Tools integration now provides an update
entity as a
replacement.
(@Mask3007 – #70096) (documentation)
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;
}
All bmw_connected_drive.*
services are removed (deprecated since 2022.2).
Please use the new button entities with the button.press
service instead.
(@rikroe – #69808) (documentation)
The button.<your_vehicle_refresh
entity is deprecated and will be removed in
a future version. Please use the homeassistant.update_entity
service with
any BMW entity to force-refresh all platforms from the BMW API.
(@rikroe – #67003) (documentation)
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;
}
Migrating deCONZ Siren entities from switch platform to siren platform has
been removed. This only affects users upgrading from before 2021.10 to 2022.5
or later. At most, this causes lingering unavailable switch entities; which
can be manually removed.
(@Kane610 – #70600) (documentation)
Migrated deCONZ light entities of type “On/Off Output” to switch
from light platform as they are binary devices (only on/off).
(@Kane610 – #70598) (documentation)
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;
}
The internal cost and compensation sensor entities, used by the energy
dashboard of Home Assistant, are now hidden by default.
(@frenck – #70378) (documentation)
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;
}
Fibaro lights no longer support deprecated white_value
,
use rgbw_color
instead.
(@rappenze – #69189) (documentation)
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;
}
Units changed from cents
to ¢/kWh
. This more accurately represents the type
of value, and makes the sensor work when used in the Energy dashboards.
If you relied on this unit of measurement format in your automations, scripts,
or have been recording it in an external time metrics database, you may need
to adapt to this change.
(@ZephireNZ – #69396) (documentation)
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;
}
The pretty formatted value attribute has been removed in favor of using the
new duration state class, which is formatted by the frontend.
This change significantly reduces the number of rows stored in the database.
(@bdraco – #70720) (documentation)
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;
}
The device class carbon_dioxide
is no longer admitted as a binary_sensor
device class; as it is not a valid device class for a binary sensor. If you have
overridden the device class with customize you need to adjust your configuration.
(@epenet – #69239) (documentation)
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;
}
The native IKEA TRÅDFRI groups are now removed. We propose using
light groups instead.
Additionally, the previously deprecated YAML configuration of the IKEA TRÅDFRI
integration has been removed.
IKEA TRÅDFRI 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.
(@ggravlingen – #68033) (documentation)
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;
}
The Integration sensor unit
configuration parameter was deprecated in
Home Assistant Core release 2021.10 and is now removed as it did not
take unit_prefix
and unit_time
into account.
Example:
sensor:
- platform: integration
source: sensor.current_power
name: energy_spent
unit_prefix: k
unit_time: h
unit: MWs
round: 2
The configuration in the example would cause the source sensor’s unit
(e.g., W
) to be overruled and the integration sensor’s unit_of_measurement
would be set to MWs
(MegaWatt-Second) even though the integral calculation
was performed with k
(kilo) and h
(hour), i.e., the value of the integration
sensor is in kWh
, not MWs
.
(@dgomes – #69157) (documentation)
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;
}
The LIFX integration changed the network adapters used to discover LIFX devices.
Instead of enabling all adapters on which LIFX devices appear, it now only
uses the adapter(s) enabled in Home Assistant.
This makes the discovery of LIFX faster and more reliable.
(@Djelibeybi – #70458) (documentation)
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;
}
Filenames and directories starting with a .
will no longer appear in the
Media Browser.
If the file or directory name starts with a .
, it means they are marked
hidden; thus, the media browser will now respect that.
(@DDanii – #69820) (documentation)
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;
}
min_max
sensors generated a significant amount of database rows because they
included all attributes regardless of the configured type. For active sensors,
these attributes added up to multiple megabytes per day for each sensor.
Reference issue report.
min_max
sensors now only set attributes based on the configured type of sensor
as below:
min
:min_entity_id
max
:max_entity_id
last
:last_entity_id
The following attributes are no longer present: min
, max
, mean
, median
,
last
, count_sensors
If access to the data previously provided by the attributes is needed,
create a separate min_max
sensor for that required type instead.
(@bdraco – #70142) (documentation)
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;
}
The previously deprecated YAML configuration of the MJPEG IP Camera
integration has been removed.
MJPEG IP Camera 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.
(@frenck – #68033) (documentation)
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;
}
The previously deprecated YAML configuration of the ONVIF
integration has been removed.
ONVIF 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.
(@hunterjm – #70395) (documentation)
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;
}
The original orp_supply_level
and ph_supply_level
sensors will become
unavailable. Two new sensors will be automatically created, but the originals
will have to be removed and the new ones manually renamed to match the originals.
This should only affect those with IntelliChem.
(@dieselrabbit – #69937) (documentation)
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;
}
The previously deprecated modem_callerid.reject_call
service has now been
removed. A button entity has previously been made available as a replacement.
(@frenck – #69019) (documentation)
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;
}
The previously deprecated “Wanted” sensor in the Radarr integration has been
removed. If you have this sensor still configured in your YAML configuration,
you should remove it before updating.
(@tkdrob – #69500) (documentation)
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;
}
RainMachine zone switches no longer have the time_remaining
attribute;
instead, each zone now has a separate sensor entity (device class of timestamp
,
entity category of diagnostic
) that shows the datetime at which the zone will
finish (or last finished if the zone isn’t running).
(@bachya – #69206) (documentation)
RainMachine switch attributes that are floats
are now rounded to two decimals
of precision.
(@bachya – #70006) (documentation)
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;
}
Home Assistant will now automatically repack your database once a month, on
the second Sunday of the month.
Repacking allows shrinking the database in file size, resulting in smaller
backups. It also frees up the space that has been freed up by the database
optimizations made in 2022.4.
Some notes:
- It is only done once a month to minimize I/O.
- The second Sunday was chosen as it would be out of sync with Home Assistant
releases. - This automatic repacking can be disabled by setting
auto_repack
tofalse
in the recorder configuration.
(@bdraco – #69314) (documentation)
It’s no longer possible to configure the recorder to use an in-memory database.
(@emontnemery – #69616) (documentation)
Integrations and platforms can provide hints to the recorder to exclude specific
entity state attributes from being recorded.
This excludes attributes that hold little to no historical value or are a
static value. This significantly reduces the amount of data stored.
The following attributes are no longer recorded:
- Automation:
current
,id
,last_action
,last_triggered
,max
andmode
. - Input Boolean:
editable
. - Input Button:
editable
. - Input Datetime:
editable
,has_date
, andhas_datetime
. - Input Number:
editable
,max
,min
,mode
, andstep
. - Input Text:
editable
,max
,min
,mode
, andpattern
. - Input Select:
editable
.
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;
}
The SABnzbd integration migrated to configuration
via the UI. Configuring SABnzbd 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.
(@shaiu – #68138) (documentation)
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;
}
The binary sensor for the update available has been removed.
Use the new update
entities to monitor available updates instead.
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;
}
The sonos_group
attribute on Sonos media players has been renamed
to group_members
to align with other integrations.
(@jjlawren – #70924) (documentation)
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;
}
The SQL integration migrated to configuration
via the UI. Configuring SQL 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.
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;
}
The Steam integration migrated to configuration
via the UI. Configuring Steam 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.
The first account listed in the YAML configuration will be considered as your
Steam ID as there is no way to identify your Steam ID from your API key. You
can put your Steam ID as the first entry in accounts before updating, or set up
the integration from scratch.
(@tkdrob – #67261) (documentation)
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;
}
The naming of entities and devices has been aligned, so that the device name
is now part of the entity name.
(@mib1185 – #69754) (documentation)
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;
}
The Tautulli integration migrated to configuration
via the UI. Configuring Tautulli 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 – #57450) (documentation)
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;
}
Trigger-based template sensors are now initialized to the last known state at
Home Assistant startup, instead of to “unknown”.
(@emontnemery – #69344) (documentation)
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;
}
The TTS base_url
option is deprecated. Please, configure internal/external
URL instead.
(@balloob – #70382) (documentation)
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;
}
The UPnP/IGD integration options have been removed. This includes the
ability to configure a custom update/scan interval.
As an alternative, the more generic and more flexible
homeassistant.update_entity
service can be used to create an automation that
updates the entities on your desired intervals or schedule.
(@StevenLooman – #69134) (documentation)
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;
}
Vera power meter sensor is now using the (correct) symbol W
for watt instead
of watts
.
If you relied on this unit of measurement format in your automations, scripts,
or have been recording it in an external time metrics database, you may need
to adapt to this change.
(@emontnemery – #69285) (documentation)
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;
}
With this release, you will need to update your zwave-js-server instance.
- If you use the zwave_js add-on, you need to have at least version
0.1.56
. - If you use the Z-Wave JS 2 MQTT add-on, you need to have at least version
0.38.0
. - If you use the zwavejs2mqtt Docker container, you need to have at least version
6.7.0
. - If you run your own Docker container, or some other installation method,
you will need to update your zwave-js-server instance to at least1.16.0
.
(@raman325 – #70464) (documentation)
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;
}
Zengge lights no longer support white_value
, please use white
instead.
(@emontnemery – #55260) (documentation)
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. The following are the most notable for this release:
- Calendar Data Model improvements and deprecations
- Deprecating all SUPPORT_* constants
- Local OAuth2 Updates
- Saying goodbye to the time_changed event
- Constant deprecations for 2022.5
Farewell to the following
The following integrations are also no longer available as of this release:
- Arlo has been removed. It was in a broken state for a long time caused
by authentication changes upstream. (@anaisbetts – #70330) - Digital Loggers has been removed. It relied on web scraping, which is
not allowed for a Home Assistant Core integration.
(@tkdrob – #69939) - Updater was previously deprecated and has been removed. Use the Version
and Analytics integrations as a replacement.
(@frenck – #68981)
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 2022.5