2021.12: New configuration menu, the button entity, and gorgeous area cards!

Home Assistant Core 2021.12, the final release of the year 2021; And I really think this release will contain a holiday gift for everyone!

With the holiday season coming, it is time to slow down a bit for the project, and enjoy time with our family. In a couple of weeks, 2022 will be here!

All I want to add to these last release notes of 2021 is: Thank you.

Thank you for hanging out with the project. Thank you for contributing, and thank you for reporting an issue. Thank you for helping out a fellow Home Assistant user on the forum, chat, Reddit, or anywhere else. Thank you for sharing your experiences, ideas, automations, scripts, YouTube videos, and blogs; and above all: Thank you for using Home Assistant ❤️

Happy holidays and for the last time in 2021: Enjoy the release!


PS: We are skipping the January release because of the holidays. So, the first release in 2022, will be Wednesday, 2 February 2022.

Brand new configuration panel

The configuration panel has been revamped. Everything is more compact and categorized. A bit of added color so you can recognize the item you need more quickly.

The Supervisor panel and its sidebar item have been removed, and the panel has been merged into the configuration panel. All OS, Core & Add-on updates are now shown in the top of the configuration panel.

If you are using our Android, iOS, or macOS Companion apps, the sidebar menu to configure those has also been moved into the configuration panel.

All configuration related items, neatly organized in a single place 🤘


The button entity

Introducing a new entity: the button entity. Yes, it’s a button. What can you do with it? Press it!

We already have a switch entity in Home Assistant, but a switch has a state; switches are either on or off. A button, however, is a push-button, like a stateless or momentary switch.

Button entities can be provided by integrations and can be used for things like:

Examples use cases of button entities.

These are all things that can be triggered from Home Assistant but do not really have explicit on or off states.

We have added support for this button entity to Google Assistant, Alexa and HomeKit; allowing you to “press” those buttons from your favorite voice assistant.

For this release, MQTT & KNX added support for providing buttons. The Shelly, WLED, Elgato, Litter-Robot, TOLO Sauna, Tuya, Renault, and NAM integrations have added button entities.

Additionally, ESPHome 2021.12 has added full support for buttons too! Besides adding a restart button, you can now create button entities from ESPHome to trigger something on your DIY project from Home Assistant.

Redesigned area panel and the area Lovelace card

The area panel has been redesigned. Instead of a list of areas, it now shows a card for each area. The card shows a picture of the area.

Wait, a picture? Yes! You can now upload a picture for your area straight from the Home Assistant frontend. So, you can make it look something like this:


But that is not all, @zsarnett created a brand new area Lovelace card. This card will use the picture you’ve uploaded for your area, and it automatically populates with entities of devices you have assigned to that specific area.

Screenshot of a new area Lovelace card.

Users that can only log in from the local network

This new feature allows you to make users that are only allowed to log in from the local network and not from the internet or cloud.

This can be useful if you have users that are not always at your home or a dedicated user for a wall tablet that never needs to log in remotely.


Z-Wave JS SmartStart and entity categories

Setting up your Z-Wave device with Home Assistant is now easier than ever, as Z-Wave JS now supports Z-Wave SmartStart!

When you have a SmartStart capable Z-Wave stick and device, you can now set up the device by simply scanning the QR code on the device, using your webcam, or using your mobile phone with the Home Assistant Companion app.

Including devices to your Z-Wave network has never been easier.

Additionally, Z-Wave JS had added support for entity categories, so all your Z-Wave sensors are now neatly organized.

Blueprint scripts

This was actually in Home Assistant Core 2021.11 release, but we forgot to mention it completely… Shame on us… Retry!

You can now create, provide, share Blueprints for scripts! This works the same as with automations, except… well, it provides a script instead.

Script blueprints can be shared and imported, exactly like we do with automations now. These can be really helpful to provide to other Home Assistant users, as these scripts can be re-used in, e.g., other automations.

Triggering on any, but only state changes

Until now, writing automations that trigger on any state change of an entity, but not on any attribute changes, was nearly impossible without adding additional conditions.

We have now added a way to trigger on any state change, regardless of the state, without triggering on attribute changes. If you set from or to, and leave it empty, it will match any state but ignore attributes.

    - platform: state
      entity_id: media_player.living_room
      to: ~

The above example will only trigger if the state of the living room media player changes, but not if any of its attributes change.

The same syntax is also supported for attributes. To trigger on all changes of a specific attribute, you can use a similar syntax:

    - platform: state
      entity_id: media_player.living_room
      attribute: volume_level
      to: ~

The above example will only trigger if the volume level of the living room media player changes.

Cast issues resolved

You might be aware of issues with using the Google Cast features in Home Assistant. For example, casting a Lovelace dashboard didn’t work as reliably as it should have been.

We have some good news, these casting issues have been resolved!

Although a bugfix, we think the impact was significant enough to warrant its mention in the release notes.

Other noteworthy changes

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

  • The Hue integration now only uses the v2 API when talking to compatible hubs. This means that all light updates and remote presses are instantly available in Home Assistant, and scenes are now also natively supported. Amazing job, thanks @marcelveldt!
  • @farmio completely rewrote the Fronius integration adding support for all the latest, and greatest Home Assistant offers. Nice!
  • Besides supporting the new button entity, ESPHome now also supports setting the mode and unit of measurement on number entities. Thanks, @jesserockz!
  • Magic Home (Flux LED) got lots of love from @bdraco, adding support for new devices and features along the way.
  • @jbouwh improved the as_datetime template method, which now supports the UNIX timestamp.
  • The motionEye integration added sensors and service, thank you @dermotduffy.
  • WLED devices can now be restarted and upgraded from Home Assistant.
  • @chemelli74 added the climate platform support for Shelly, and @mib1185 added support for rebooting and upgrading Shelly devices.
  • Entities provided by the Vallox integration now have unique IDs and can be adjusted from the UI. Thanks @viiru-!
  • The Pi-hole integration now has a binary sensor to indicate an update is available, added by @andreasbrett.
  • System Bridge has two new services for sending keyboard events to the remote machine, added by @timmo001.
  • @klada added support for media player groups to Denon HEOS.
  • The REST platform now supports templates for its headers and query parameters. Thanks, @koying.
  • Mill now supports its 3rd generation heaters, thanks @Danielhiversen
  • @hmmbob added support for ms-MY, nl-BE, pa-IN to Google TTS.
  • Nanoleaf now pushes updates into Home Assistant, thanks @milanmeu.
  • @micha91 extended Yamaha MusicCast with number entities for controlling equalizers, dialogue volume/lift, and the display brightness.
  • The Levoit Core 400S air purifier is now supported by the VeSync integration, thanks for that @jparchem.
  • The state of number helpers is now exposed to Prometheus. Nice, @alim4r!
  • @tschamm added support for shutter controls to Bosch SHC.
  • Notifications for Android TV can now send a notification with custom icons; Awesome adding @redahb!
  • MQTT has seen multiple improvements in this release:
    • The select and number platforms now have command_template support (@jbouwh)
    • Switches now support device_class (@koying)
    • MQTT platforms can now set the object_id option (@Smeagolworms4)
    • Selects can now have a single or no options (@emontnemery)
    • Added ‘trigger’ support for Alarm Control Panels (@XaF)
    • Added lock.open support (@Hypnos3)

This release adds support for long-term statistics to the following integrations:

And the following integrations now have entity categories:

New Integrations

We welcome the following new integration this release:

This is a companion discussion topic for the original entry at https://www.home-assistant.io/blog/2021/12/11/release-202112/


@frenck and contributors: thanks for this amazing release!


Thank you for this new release!

I am terrified on this breaking change: “The customization UI/frontend has been removed.”

What exactly does this mean? It means that I cannot longer use the “Show code editor” button when editing a card anymore?
Or it means that the “frontend” integration disappears?
Or any of them?

I am very lost on that… But thank you again for all the work!

1 Like

The customization UI is the very bottom button on the Configuration page.


Thanks god… I was terrified, but it results that I am just stupid :sweat_smile:

1 Like

You beautiful people, thank you!

Looks great!

I get a spinning forever wheel when doing configuration validation now:

and I can’t restart:

just me :frowning: ?

Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/alexa_media/__init__.py:16
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 21:30:06 (2 occurrences)
Last logged: 21:30:13

[140262684471056] function() argument 'code' must be code, not str
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 185, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1495, in async_call
  File "/usr/src/homeassistant/homeassistant/core.py", line 1530, in _execute_service
    await handler.job.target(service_call)
  File "/usr/src/homeassistant/homeassistant/components/hassio/__init__.py", line 586, in async_handle_core_service
    errors = await conf_util.async_check_ha_config_file(hass)
  File "/usr/src/homeassistant/homeassistant/config.py", line 938, in async_check_ha_config_file
    res = await check_config.async_check_ha_config_file(hass)
  File "/usr/src/homeassistant/homeassistant/helpers/check_config.py", line 218, in async_check_ha_config_file
    platform = p_integration.get_platform(domain)
  File "/usr/src/homeassistant/homeassistant/loader.py", line 530, in get_platform
    cache[full_name] = self._import_platform(platform_name)
  File "/usr/src/homeassistant/homeassistant/loader.py", line 535, in _import_platform
    return importlib.import_module(f"{self.pkg_path}.{platform_name}")
  File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/config/custom_components/alexa_media/__init__.py", line 16, in <module>
    from alexapy import (
  File "/usr/local/lib/python3.9/site-packages/alexapy/__init__.py", line 16, in <module>
    from .alexaapi import AlexaAPI
  File "/usr/local/lib/python3.9/site-packages/alexapy/alexaapi.py", line 21, in <module>
    from alexapy.aiohttp import ClientConnectionError, ClientResponse
  File "/usr/local/lib/python3.9/site-packages/alexapy/aiohttp/__init__.py", line 6, in <module>
    from .client import (
  File "/usr/local/lib/python3.9/site-packages/alexapy/aiohttp/client.py", line 35, in <module>
    from . import hdrs, http, payload
  File "/usr/local/lib/python3.9/site-packages/alexapy/aiohttp/http.py", line 7, in <module>
    from .http_parser import (
  File "/usr/local/lib/python3.9/site-packages/alexapy/aiohttp/http_parser.py", line 15, in <module>
    from .helpers import NO_EXTENSIONS, BaseTimerContext
  File "/usr/local/lib/python3.9/site-packages/alexapy/aiohttp/helpers.py", line 667, in <module>
    class CeilTimeout(async_timeout.timeout):
TypeError: function() argument 'code' must be code, not str

Anyone having problems with 2021.12.0 and webrtc? Mine won’t load and nothing in logs.

They’re imported as disabled entities by default. You can enable the ones you want from settings.

1 Like

I believe need to update the Alexa Media custom integration to the latest version to fix this.

I do not want to hijack this marvelous release thread so I’ll stop about this topic here and create a separate one.

Be aware… anyone having alexa media player custom component installed might face this issue.

It seems to be the alexa media plugin disabling the option to restart/check config. Although there is some mentioning in the release notes, it does not solve my restart problem.

All beta’s versions in HACS, do not work including latest 3.10.15. Have submitted a bug report there.

There is some “mentioning” of this in the custom_component section on github however, but if installed I cannot restart homeassistant.

EDIT: complete reboot of the OS “solved” it


It looks like the version of Alexa Media which fixes this is a beta release, so you will need to enable beta releases for it in HACS to see it.

1 Like

Thanks a lot to everyone who has contributed!
Upgrade went smooth, nice xmas gift.

Happy Holidays

Yes, I’m having a problem with webrtc too:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/setup.py", line 229, in _async_setup_component
    result = await task
  File "/config/custom_components/webrtc/__init__.py", line 75, in async_setup
    utils.register_static_path(hass.http.app, url_path, path)
  File "/config/custom_components/webrtc/utils.py", line 74, in register_static_path
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py", line 186, in __getitem__
    return self._state[key]
KeyError: 'allow_cors'

Looks like someone already entered a ticket for this…

You are not stupid. It was not well described in the release note. I also wondered what it was all about

1 Like

Also having problems with Frigate, it won’t start and this is found in the logs:

Setup failed for frigate: Unable to import component: cannot import name 'HTTP_BAD_REQUEST' from 'homeassistant.const' (/usr/src/homeassistant/homeassistant/const.py)



Looks like there’s a HACS update to fix Frigate. :exploding_head:

That was a VERY BAD idea to move from this menu:

to this menu:

Now I spend a lot of time to get to a section I need:

  • because of MORE clicks
  • because I simple do not keep in mind where some section is located

If you really need to make a menu compact:

  • add an “expand-collapse” for top items;
  • memorize these states locally.

With my all due respect…


Is it me or is the documentation for 2021.12 somewhat unclear and confusing?

For example, I have re-read the secion on removal of the Customization UI and I still have no idea what it’s saying. As I understand, some of that should be a part of the Entities UI (but it’s not, for me anyway). Same for Button entities - I see I can’t create those myself, but what does it mean? Where can I see these? How do I know an integration creates these or not? I’d expect a couple of examples, maybe a “Restart HA” button. Also, the documentation says they can be customized in Customization section, but that no longer exists…

I usually don’t have too much problems reading HA documentation and I’m using it for almost three years, but this particular release docs just seem rushed and unpolished.


As I understand it, it is as simple as “there is no customization ui any more, you have to do it in yaml.”