2022.3: Select and play media

Did you know that today – March 2nd – in 1949, the first automatic street
light was lit in New Milford, Connecticut, USA? Seventy-three years later, we
automate our entire homes 😎

Home Assistant Core 2022.3! And this release has a different and fresh “tune”
to it! Yes, pun intended as this release brings tons of improvements
involving media.

And what is so cool about it? It is not just about browsing media,
it is even more about using it! Using media allows us to make the automations
in our home more “personal”.

For example, having our favorite radio station playing when we get home
or broadcasting announcements and sound bites to our speakers to notify
us of stuff happening in and around our home. (I really need to install that
camera at the front door now 😅.)

What are you using media for?

Enjoy the release!

../Frenck

The Home Assistant Newsletter

We realize you might like email more than watching this blog, our Twitter,
or notifications in our Discord chat to stay on top of the latest Home Assistant news.

In that case, you might like to sign-up for our newsletter instead! We’ll
send you a new email once a month when a new release drops with the release’s highlights
and interesting things we found in our community.

Our newsletter is free of any analytics and tracking. The
sign-up is below, and we have enabled double opt-in to ensure no emails
are sent if users don’t want them.

Sign up for the Home Assistant newsletter

Media Selector and the new “Play media” action

This release brings a new media selector and a “Play media” action.
These make it super easy to use media in your automations and scripts.

Choose the “Play media” action when creating an automation, select the media
player you’d like to play something on, and next… just browse and pick the
media that you want it to play! Done! 🚀

Screenshot showing the new media selector and play media action

Have you ever wanted to play your front door camera stream on your television
when the doorbell rings? Well, this is now very possible with this update.
Check out this video on how to set that up in only 1.5 minutes. 🤯

More media sources!

Of course, the above-shown “Play media” action and selector is incredible. But,
you’d need some media to select! We already supported local media
and things like Spotify, but wouldn’t it be cool if we had more!?

So, this release will bring in a bunch of new media sources.

Your Cameras! Your Lovelace Dashboards! You can just pick one of your cameras
or Lovelace dashboards and “Play” them on a supported device
(like a Google Nest Hub or television). But also text to speech!

Screenshot showing playing TTS as a media action

But that’s not it; we also have new integrations adding new media sources.
This release adds the DLNA Digital Media Server and Radio Browser
integrations that allow the use of their sources with your media players.

Screenshot showing the Radio Browser

You can browse and listen to thirty thousand radio stations from all
around the world. But what is even cooler is that with the new “Play media”
action in automations, you can just select your favorite radio station to be
playing when, for example, you arrive home!

Adding the Radio Browser to your Home Assistant instance is as easy as clicking
the My Home Assistant button below. No other setup prerequisites, logins, or API
keys are need.

Upload your media straight from the browser

Getting your media files (pictures, images, soundbites, music) into your
local media folder required you to use the
Samba add-on (or something
similar).

Can we improve this experience? Sure we can!

This release adds initial support for local media management straight from the
Home Assistant frontend, allowing you to upload and remove files directly.

Screenshot showing media management

UI Upgrades

We have been working hard on upgrading the Home Assistant frontend to use
Material Web Components (MWC) everywhere, saying goodbye to our old
(and deprecated) paper style.

This allows our frontend to be up-to-date with the latest features and the
latest style. As you’ll notice, these elements have a different look from the
older style, so don’t be alarmed if your inputs look slightly different.

Updating to MWC gives us many new opportunities for the future and makes
Home Assistant more accessible, for example, when using a screen reader.

Screenshot showing the styling difference between MWC and paper style

The screenshot above shows the new MWC styling on the left and the previous
paper styling from an older Home Assistant version on the right. The styling
change mainly impacts input fields look and feel.

Triggered!

When working an automation, triggers now show live in the UI when they are
triggering, allowing you to validate you set it up correctly.

In this little animation below, the remote is pressed a couple of times.
The automation editor will show the “TRIGGERED” bar.

Screen recording showing automation triggers triggering showing in the UI
Each time the trigger triggers it will be indicated in the UI.

Additionally, you can now also trigger each individual action in your automation
to test if the action you are creating runs as expected:

Screenshot showing how to run an individual action from the automation editor

Entity ID autocompletion

Our YAML configuration and Jinja templates used in, for example, automations,
scripts, and frontend dashboards can be a really powerful customization
tool. You can definitely appreciate this feature if you use our code editor
in the frontend at times.

Thanks to @kubawolanin, we now have entity ID autocompletion when using
the built-in code editor in the Home Assistant frontend 😎.

Just start typing an entity ID, and the code editor will try to suggest an
entity ID and show the selected entity’s current state.

Screenshot showing the code editor with entity ID autocompletion

Theme: Waves by Tim Cowell.

This works when you are configuring your Lovelace cards,
creating advanced template conditions in your Automations,
and even if you are testing out your Jinja-template in the
template developer tools.

Click the My button below to test it out on your Home Assistant instance:

Other noteworthy changes

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

  • ESPHome added support for locks! Thanks, @kbickar
  • The HomeKit Controller integration has improved support for the Ecobee
    thermostats. Thanks, @Jc2k!
  • When playing media in the media browser, the media player bar in the bottom
    will now have a volume control, thanks @balloob!
  • Thanks to @kubawolanin, you can now filter and search the
    Home Assistant logs!
  • When selecting a date in the frontend, a beautiful new date picker is shown.
    Thanks, @bramkragten!
  • The IKEA TRÅDFRI integration has been worked on by @ggravlingen and
    @martinhjelmare. Lots of stability issues have been resolved, battery
    sensors for blinds have been added, and also support for the air purifier
    has been extended with sensors for air quality and filter time left.
  • @rfleming71 added button entities to the OctoPrint integration, allowing
    you to control to resume, pause or stop a 3D print.
  • The following integrations have added an option to set a unique_id in their
    YAML configuration; If set, you can customize those entities in the UI.

  • @starkillerOG has been chewing on NETGEAR, adding traffic sensors,
    a reboot button, but also switch to allow/block devices. Awesome!
  • Don’t be alarmed now, but @jbouwh added support for Sirens to MQTT!
  • @rubenverhoef also dove into MQTT and added additional command templates
    for MQTT lights.
  • The Renault integration added HVAC, door, and lock sensors, thanks @epenet
  • @bdraco added support to HomeKit for controlling the fan and oscillating
    of fans in climate entities. Nice!
  • The GitHub integration became much more efficient and now has many more
    sensors available! Thanks @ludeeus and @timmo001, that is just amazing!
  • @kbickar hasn’t been sleeping much as he modernized the SleepIQ integration,
    adding a bunch of new entities in the process.
  • If you have a Samsung Smart TV, @epenet added support for showing your
    installed TV apps as media sources!
  • Thanks to @chemelli74, you can now control the valves of those brand new
    Shelly TRVs!

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 2022.3.1 – March 3

  • Bump soco to 0.26.4 (@jjlawren – #67498) (sonos docs)
  • Check if UPnP is enabled on Fritz device (@chemelli74 – #67512) (fritz docs)
  • Fix MQTT config flow with advanced parameters (@jbouwh – #67556) (mqtt docs)
  • Highlight in logs it is a custom component when setup fails (@balloob – #67559)
  • Bump pyobihai (@ejpenney – #67571) (obihai docs)
  • Fix data type for growatt lastdataupdate (#67511) (@muppet3000 – #67582) (growatt_server docs)
  • Add guards for HomeKit version/names that break apple watches (@bdraco#67585) (homekit docs)

Release 2022.3.2 – March 6

  • Add unique_id to Fritz diagnostics (@chemelli74 – #67384) (fritz docs)
  • Suppress roku power off timeout errors (@ctalkington – #67414) (roku docs)
  • rfxtrx: bump to 0.28 (@elupus – #67530) (rfxtrx docs)
  • Remove use of deprecated xiaomi_miio classes (@rytilahti – #67590) (xiaomi_miio docs)
  • Downgrade Renault warning (@epenet – #67601) (renault docs)
  • Handle elkm1 login case with username and insecure login (@bdraco – #67602) (elkm1 docs)
  • Fix sql false warning (@gjohansson-ST – #67614) (sql docs)
  • Allign logic for Fritz sensors and binary_sensors (@chemelli74 – #67623) (fritz docs)
  • Improve logging for Fritz switches creation (@chemelli74 – #67640) (fritz docs)
  • Fix Fan template loosing percentage/preset (@frenck – #67648) (template docs)
  • Fix reload of media player groups (@emontnemery – #67653) (group docs)
  • Bump pydroid-ipcam to 1.3.1 (@MartinHjelmare – #67655) (android_ip_webcam docs)
  • Ensure elkm1 can be manually configured when discovered instance is not used (@bdraco – #67712) (elkm1 docs)
  • Add missing disconnect in elkm1 config flow validation (@bdraco – #67716) (elkm1 docs)
  • Update aiolifx dependency to resolve log flood (@Djelibeybi – #67721) (lifx docs)
  • Fix regression with homekit_controller + Aqara motion/vibration sensors (@Jc2k#67740) (homekit_controller docs)

Release 2022.3.3 – March 7

  • Fix false positive MQTT climate deprecation warnings for defaults (@jbouwh – #67661) (mqtt docs)
  • Fix timezone for growatt lastdataupdate (@muppet3000 – #67684) (growatt_server docs)
  • Fix temperature stepping in Sensibo (@gjohansson-ST – #67737) (sensibo docs)
  • Prevent polling from recreating an entity after removal (@bdraco – #67750)
  • Fix internet access switch for old discovery (@chemelli74 – #67777) (fritz docs)
  • Fix profile name update for Shelly Valve (@chemelli74 – #67778) (shelly docs)
  • Handle fan_modes being set to None in homekit (@bdraco – #67790) (homekit docs)
  • Catch Elgato connection errors (@frenck – #67799) (elgato docs)
  • Update frontend to 20220301.1 (@bramkragten – #67812) (frontend docs)
  • Bump python-miio version to 0.5.11 (@rytilahti – #67824) (xiaomi_miio docs)
  • Prevent scene from restoring unavailable states (@bdraco#67836) (scene docs)

Release 2022.3.4 – March 11

  • Fix discord embed class initialization (@cheng2wei – #67831) (discord docs)
  • Support playing local “file” media on Kodi (@rigrig – #67832) (kodi docs)
  • Bump zwave-js-server-python to 0.35.2 (@raman325 – #67839) (zwave_js docs)
  • Add missing callback decorator to sun (@bdraco – #67840) (sun docs)
  • Fix shelly duo scene restore (@thecode – #67871) (shelly docs)
  • Make sure blueprint cache is flushed on script reload (@elupus – #67899) (script docs)
  • Update radios to 0.1.1 (@frenck – #67902) (radio_browser docs)
  • Correct local import of paho-mqtt (@emontnemery – #67944) (mqtt docs)
  • Rollback pyinsteon (@teharris1 – #67956) (insteon docs)
  • Bump pysabnzbd to 1.1.1 (@Shutgun – #67971) (sabnzbd docs)
  • Bump pymediaroom (@dgomes#68016) (mediaroom docs)

Release 2022.3.5 – March 15

  • Fix WebSocketTimeoutException in SamsungTV (@epenet – #68114) (samsungtv docs)
  • 20220301.2 (@zsarnett – #68130) (frontend docs)
  • Filter IPv6 addresses from doorbird discovery (@bdraco – #68031) (doorbird docs)
  • Fix turning amcrest camera on and off (@flacjacket – #68050) (amcrest docs)
  • Fix Shelly EM/3EM invalid energy value after reboot (@thecode – #68052) (shelly docs)
  • Default somfy_mylink shade’s _attr_is_closed to None (@cthornton – #68053) (somfy_mylink docs)
  • Bump amcrest version to 1.9.7 (@flacjacket – #68055) (amcrest docs)
  • Bump pyisy to 3.0.5 (@bdraco – #68069) (isy994 docs)
  • Update home_connect to 0.7.0 (@BraveChicken1 – #68089) (home_connect docs)
  • Fix MQTT false positive deprecation warnings (@jbouwh – #68117) (mqtt docs)

Release 2022.3.6 – March 21

  • Fix TypeError in SamsungTV (@epenet – #68235) (samsungtv docs)
  • Fix lyric climate (@nprez83 – #67018) (lyric docs)
  • Fix finding matrix room that is already joined (@antlarr – #67967) (matrix docs)
  • Respect disable_new_entities for new device_tracker entities (@mib1185 – #68148) (device_tracker docs)
  • Add missing await [velbus] (@cdce8p – #68153) (velbus docs)
  • Fix point by adding authlib constraint (@cdce8p – #68176) (point docs)
  • Update opensensemap-api to 0.2.0 (@frenck – #68193) (opensensemap docs)
  • Bump renault-api to 0.1.10 (@epenet – #68260) (renault docs)
  • Hue integration: update errors that should be supressed (@marcelveldt – #68337) (hue docs)
  • Filter IPv6 addreses from enphase_envoy discovery (@bdraco – #68362) (enphase_envoy docs)
  • Handle Hue discovery errors (@balloob – #68392) (hue docs)
  • Fix tplink color temp conversion (@bdraco#68484) (tplink docs)

Release 2022.3.7 – March 23

  • Fix targeting all or none entities in service calls (@emontnemery – #68513)
  • Add support for general API exception in Sense integration (@kbickar – #68517) (sense docs) (emulated_kasa docs)
  • Add cooldown timer before Sonos resubscriptions (@jjlawren – #68521) (sonos docs)
  • Hue handle HTTP errors (@balloob – #68396) (hue docs)
  • Simplify Hue error handling a bit (@marcelveldt – #68529) (hue docs)
  • Filter IPv6 addresses from AppleTV zeroconf discovery (@bdraco – #68530) (apple_tv docs)
  • Bump aiohue to 4.4.0 (@marcelveldt – #68556) (hue docs)
  • Bump aiohue to version 4.4.1 (@marcelveldt – #68579) (hue docs)
  • Bump py-synologydsm-api to 1.0.7 (@mib1185#68584) (synology_dsm docs)

Release 2022.3.8 – March 29

  • Revert “Take Abode camera snapshot before fetching latest image” (@kevdliu – #68626) (abode docs)
  • Fix screenlogic to get the macaddress from discovery (@bdraco – #68687) (screenlogic docs)
  • Ensure solaredge can still be setup with an ignored entry (@bdraco – #68688) (solaredge docs)
  • Add option to connect to elkm1 non-secure when secure is discovered (@bdraco – #68735) (elkm1 docs)
  • Increase zwave_js add-on start attempts before timeout (@MartinHjelmare – #68736) (zwave_js docs)
  • Fix ignoring elkm1 discovery (@bdraco – #68750) (elkm1 docs)
  • Update sense library to 0.10.4 (@kbickar – #68816) (sense docs) (emulated_kasa docs) (dependency)
  • Pin click to fix typer issue (@epenet – #68808)
  • Cleanup package constraints (@epenet#68833)

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 newsletter to get
the latest news about features and things happening in our community 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;
}

Z-Wave / OpenZWave

This breaking change does NOT apply to users of the Z-Wave JS integration.

This is a breaking change notice regarding the older Z-Wave and OpenZWave
integrations, which both have been previously deprecated.

This release of Home Assistant Core 2022.3 will be the final release that
provides these integrations. Both the old zwave and ozw integrations
are pending removal for Home Assistant Core 2022.4.

The ozw integration has been deprecated before as the upstream
projects we depends on, for e.g., libraries and add-on containers,
are no longer maintained.

As Home Assistant is moving towards support for Python 3.10, it became clear
that the old zwave integration isn’t compatible and thus is going to
be removed for that reason.

If you are still running your Z-Wave network on either of those deprecated
integrations, we highly recommend migrating
to the newer Z-Wave JS integration after upgrading to this release.

The new Z-Wave JS will provide you with a modern, more feature-rich,
maintained, and stable Z-Wave stack for the future.

See our documentation for a guide on
Migrating from previous Z-Wave implementations.

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;
}

ASUSWRT

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

ASUSWRT 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.

(@ollo69#65904) (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;
}

AVM FRITZ!Box Call Monitor

The AVM FRITZ!Box Call Monitor integration previously migrated to configuration
via the UI. Therefore, configuring the AVM FRITZ!Box Call Monitor integration
via YAML configuration has now been deprecated and will be removed
in a future Home Assistant release.

Your existing YAML configuration has been automatically imported and
can be safely removed from your YAML configuration.

(@tkdrob#61762) (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;
}

ebusd

A typo was fixed in the ebusd integration for monitored condition
WaterPressure. It is incorrectly named “WaterPreasure” in the code.

The documentation represents the correct value.

(@nklebedev#66355) (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;
}

Elexa Guardian

Elexa Guardian no longer accepts the previously deprecated entity_id parameter
in service calls; automations and scripts calling those services now require
a device_id parameter.

(@bachya#65484) (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;
}

Freebox

The freebox.reboot service is now deprecated and replaced by a dedicated
reboot button entity; please use that entity to reboot the Freebox instead.

(@epenet#65501) (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;
}

IKEA TRÅDFRI

The native IKEA Tradfri groups are now deprecated, and this feature will be
removed from the integration in a future release.

Tradfri groups rely on sending frequent requests (polling) to the gateway to
check the states of the groups. Continuously polling the gateway causes
stability issues of the gateway, sometimes causing it to crash and requiring
a restart. We propose using light groups instead.

Configuring IKEA Tradfri via YAML configuration has been deprecated and will
be removed in a future Home Assistant release. Any remaining YAML configuration
has been automatically imported for a long time and thus can be safely
removed from your YAML configuration.

(@ggravlingen#65226) (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;
}

International Space Station (ISS)

The International Space Station (ISS) integration migrated to configuration
via the UI. Configuring International Space Station (ISS) 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.

(@DurgNomis-drol#64987) (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;
}

MQTT

MQTT binary sensors, lights, fans, humidifiers, and switches can now have
an unknown state in case the state is unknown.

This change was made to make the MQTT entities more consistent with
how these entities behave in other parts of Home Assistant. You may need
to adapt your script and automations to this change.

(@jbouwh#65183 #65308 #65301 #65302 #65294) (documentation)


An MQTT configuration in configuration.yaml no longer results in an
imported integration entry, MQTT must now be set up from the frontend.

Please note that:

  • Any previously imported configuration is still valid, this PR does not
    remove or modify imported configurations.
  • It’s still possible to configure MQTT entities and advanced broker
    configurations, such as SSL certificates, via YAML.

(@emontnemery#66160) (documentation)


The MQTT climate hold and away mode configuration settings are now
deprecated and removed in Home Assistant Core 2022.9.0.

Please use the new preset_mode configuration options instead.

(@jbouwh#66062) (documentation)


Configuring basic MQTT broker options with YAML is now deprecated,
this affects the following configuration variables:

  • birth_message
  • broker
  • discovery
  • password
  • port
  • username
  • will_message

Configuring those options can instead be done via the UI.

(@emontnemery#66247) (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;
}

Nest

Older Nest cameras no longer use thumbnail images from events, and instead
always use the live stream.

You should use the newer Nest Media Source APIs
to fetch media for events.

(@allenporter#66427) (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;
}

NINA

Districts of Hamburg and Berlin have been removed.
Alternatively, Hamburg, Freie und Hansestadt and Berlin, Stadt can be used.

(@DeerMaximum#65914) (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;
}

Overkiz (by Somfy)

Previously, a Myfox Camera Shutter was mapped to a (non-functional) cover
entity. This is now changed to be a functional switch entity instead.

(@iMicknl#66088) (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;
}

Phone Modem

The modem_callerid.reject_call has been deprecated and will be removed in
Home Assistant 2022.4.

The integration now provides a button entity that can be used instead.

If you have been using the reject_call service in your automation or scripts,
you will need to adopt those to this change.

(@tkdrob#66742) (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;
}

Picnic

The sensors for the “last order ETA start/end” have been renamed to
“next delivery ETA start/end” and will now contain the ETA of the first
upcoming delivery.

If multiple deliveries are planned, the next_delivery_* sensors
contain information about the first upcoming delivery,
while the last_order_* sensors contain information
about the last-placed order.

(@corneyl#66474) (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;
}

Plugwise

Changing the scan interval option of Plugwise devices in the integration
configuration has been removed. Home Assistant will, by default, use a sane
and safe interval.

If you, however, still need to customize the interval, you can do so by
disabling automatic updates for the integration and using an automation
to trigger on your preferred interval and call homeassistant.update_entity
service.

(@frenck#65808) (documentation)


The Plugwise Auxiliary sensor entities for heating and cooling have been
removed and replaced by equivalent binary_sensor entities.

(@frenck#66259) (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;
}

Radarr

The “Wanted” option for the Radarr integration has been removed, as this
was an invalid endpoint.

If you have this option configured in your YAML configuration, you will need
to remove it.

(@tkdrob#63818) (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;
}

Renault

Previously, Renault binary_sensor entities could have the
state on or off, and in case the endpoint was unreachable: unavailable.

However, it wasn’t able to have the unknown state, which has been added.

So, a binary_sensor entity can now have the on, off, unavailable,
or unknown state.

You might need to adapt your automations or scripts to account this new
unknown state.

(@epenet#65997) (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;
}

Sensibo

The optional battery voltage attribute has been removed from the climate entity.
If you used this attribute in your automations or scripts, you’ll need
to adjust them to handle this change.

(@gjohansson-ST#64753) (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;
}

SimpliSafe

SimpliSafe no longer accepts the, previously deprecated, system_id parameter
in service calls; automations and scripts calling those services now require a
device_id parameter instead.

(@bachya#65483) (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;
}

Sonarr

Sonarr v2 is no longer supported and has been deemed End of Life by its
developers since early 2021. Please upgrade to Sonarr v3 to continue
using the Sonarr integration.

The attribute date format of the Wanted sensor is now isoformated
with a time of airing.

(@ctalkington#65349) (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;
}

Synology DSM

The Home-Mode switch of the Surveillance Station is no longer categorized to be
a configuration entity since it is part of the primary functionality.

(@mib1185#65949) (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;
}

Twitch

The old Twitch API, this integration previously relied on, is shutting down soon.

Therefore, this release updated the Twitch integration to support the new API,
and now requires a client_secret as well as a client_id, and new OAuth
tokens need to be issued with the user:read:subscriptions scope.

(@Doridian#67153) (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;
}

Updater

The Updater integration has been deprecated; other integrations have replaced
all its functionality. It is no longer a part of default_config,
and if you have the updater integration defined directly in your YAML
configuration, please remove it.

  • For the binary_sensor.updater entity, you can set up the
    Version integration with the
    “Home Assistant Website” source to get the same functionality back.
  • The configuration options reporting and include_used_components for
    the updater: configuration entry was deprecated in 2021.4.
    If you still want to share that,
    please use the new Analytics integration.

(@ludeeus#67038) (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;
}

Vallox

The previously deprecated vallox.set_profile service has now been removed.
Please use the standard fan.set_preset_mode service as a replacement.

(@andre-richter#66655) (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;
}

Viessmann ViCare

The sensor solar power production has been removed. This sensor was
a collection of multiple values.

Instead, we now provide four new sensors that each provides the data as single
value:

  • solar power production today
  • solar power production this week
  • solar power production this month
  • solar power production this year

You might need to adapt your automations or scripts to this change.
The stale restored sensor can be safely removed.

(@tschnilo#63339) (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;
}

Workday

Workday now requires a 2-character ISO 3166-1 country code instead of the country’s name. States, provinces and constituent countries must now be listed using the province setting. Please see the documentation for examples.

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;
}

XBee

The Xbee integration has been disabled due to the third-party library
we depend on not being compatible with Python 3.10.

Home Assistant is working towards adding support for Python 3.10, and
we had to disable this integration now to be able to get our development and
testing environments upgraded.

(@frenck#59729)

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;
}

Z-Wave JS

The zwave_js.ping service is now deprecated in favor of a new ping button
entity. You can replace any zwave_js.ping service calls in your automation
with a button.press call against the new entity with no change in
functionality.

The zwave_js.ping service will be removed in a future release of Home Assistant.

(@raman325#66129) (documentation)


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.54..
  • If you use the Z-Wave JS 2 MQTT add-on, you need to have at least version 0.35.2.
  • If you use the zwavejs2mqtt Docker container, you need to have at least version 6.5.2.
  • If you run your own Docker container, or some other installation method,
    you will need to update your zwave-js-server instance to at least 1.15.0.

(@raman325#66785) (documentation)


Your Z-Wave controllers will no longer get a node status sensor. While this is
technically a breaking change, in practice it should not be because the
controller is always alive.

(@raman325#67209) (documentation)

Updates for custom integration developers

If you are a custom integration developer, we have some updates in this
release that you may want to take into account for your integration.

Below is a listing of the breaking change for this release, per subject.
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;
}

Integration dependencies and Python pip

In November 2020, with the release of Python pip 20.3, a new dependency
resolver was introduced in pip, which is more strict.

Home Assistant held back supporting the new pip version because of the
large number of dependencies we have, it took time for us to adjust to this
change. Meanwhile, Python pip would only warn for conflicts.

As we have resolved almost all dependency conflicts, we have now lifted
the pip version pinning, and thus now use the newer and stricter pip version.

If you use external dependencies in your custom integration, you might be
impacted by the new pip resolver. Your dependencies (and their version ranges)
must be compatible with the dependencies Home Assistant has; otherwise,
the installation of your custom integration will not succeed.

You can find more information on the new dependency resolver in Python pip here:

https://pip.pypa.io/en/latest/user_guide/#changes-to-the-pip-dependency-resolver-in-20-3-2020

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;
}

async_timeout()

We now use version 3.8+ of aiohttp, which requires async_timeout 4.0+
which has multiple breaking changes:

  • async_timeout.timeout drops the loop= keyword arg.
  • async_timeout.current_task has been removed.
  • The timeout.remaining property has been removed.
  • The timeout.timeout property has been removed.

Previously we had a backward-compatible layer in Home Assistant to
ease this change, which has now been removed.

(@frenck#65732)

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;
}

Helper: get_url()

If a user has the http integration configured to use SSL,
it only accepts HTTPS traffic. This means that the internal URL needs
to be set to use HTTPS too, and for the certificate to be valid,
this needs to be a domain name.

A lot of integrations that we send the URL to will fail if the
certificate is not valid (ie. Sonos, Cast).

To help the user get this right, the default for the get_url helper
will now prefer the external address if SSL is configured.

This has a higher chance of being correct, delivering a better out-of-the-box
experience to a larger group of users.

(@balloob#66039)

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;
}

Helper: split_entity_id()

split_entity_id will now raise a ValueError if the passed value
does not follow the basic entity ID format
(.).

Previously it could return a list with a single item.

(@balloob#66835)

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;
}

Sensors with date/time

When using datetime and date device classes in sensors, the returned
native value must (respectively) be a datetime or date Python object.

Returning an iso formatted date(time) string in these cases was
previously deprecated and the fallback/backward compatibility has now
been removed.

(@frenck#65734)

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;
}

Zero-configuration networking (zeroconf)

Currently, zeroconf returns IPv4 addresses in the host field. If there were
no advertised IPv4 addresses, the discovery would fail. For example,
a specific manufacturer’s Thread Border Router advertised devices as
IPv6-only zeroconf services.

IPv6-only devices can now be discovered and an IPv6 address will
be present in the host property for those devices.

Developers who need to filter discovered devices by IP address version
should use homeassistant.util.network.is_ipv4_address or
homeassistant.util.network.is_ipv6_address to reject zeroconf
discoveries they do not want.

(@roysjosh#66455)

Farewell to the following

The following integration is no longer available as of this release:

  • Growl (GnGNTP) has been removed. The Growl project
    has retired.
    (@frenck#65741)

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.3

Scroll to Top