0.114: Dark mode, Open Z-Wave progress and more automation & scripts


Ooh boy, time flew this release cycle; it is time for 0.114 already!

Personally, I’m hardly even done implementing all automation features added in the previous release. 😅

Ever since our Lovelace UI started as a beta, back in 2018, one of the most requested features - arguably - is a dark mode. No wonder, as a dark mode is added to software everywhere nowadays.

This release adds dark mode! @bramkragten didn’t stop there and added color pickers for the main theme colors as well. I looked forward having it, an easy way of having a bit of theming, without the need for themes.

This is by far the most noticeable feature of this release, mainly because it is immediately apparent after the upgrade.

Meanwhile, the beta Open Z-Wave integration picks up speed in terms of contributions, reports, fixes and improvements. I’ve been using it already, and I love it. My Z-Wave network has never been better and more stable. If you haven’t tried it yet, I would highly recommend doing so. There is a nice community guide on how to test it without switching over.

Besides the listing below, 0.114 may feel a bit “empty”, however, it isn’t. It is packed with little things and fixes. The “All changes” section is definitely worth a look this release.

Enjoy the release.


Dark mode and theme color pickers

We now have official support for dark mode. 🎉

We detect if your device is in dark mode; if that is the case, our default theme will go dark. You can override the automatic switching between dark and light theme in your profile.

Furthermore, you can now also select the primary and accent color for the default theme. We calculate all other colors to make sure everything matches and is readable.

Screenshot of the new dark mode theme settings Screenshot of the new dark mode and theme settings.

So if you upgrade to Home Assistant 0.114, you are using the default theme and your device is set to a dark mode; Please be aware that after upgrading, you will get a dark theme by default in that case.

Also, when picking colors, make sure you choose a primary color that is readable on both a light and dark background. For now, this is just a local setting and has to be applied to every device.

For custom themes, there is a new option on the set_theme service call, mode: 'dark'; this allows to set a theme that will be used when your device is in dark mode.

Lastly, when using the set_theme service, the settings are now persistent across restarts. So if you have an automation that calls set_theme on startup, you don’t need it anymore. 😉

Automation & Scripts updates

In Home Assistant 0.113 we added tons of new features to automations and scripts. This release contains some fixes for issues discovered and reported, but also adds some smaller new features to extend it even more.

First of all, the repeat and choose actions are now available when creating automations or scripts via the UI.

Screenshot of the new automation features available in the UI Screenshot of the new automation features available in the UI.

Sub-second precision has been extended and is now available in all time-related notations. For example, you can now use 2.5 seconds/hours/minutes or even use it in full time notations: 23:59:59.999.

The automation.turn_off service now accepts a stop_actions data parameter. By default, when turning off an automation, any currently running automation will be stopped. This new option allows you to turn off an automation and optionally leave any currently active actions running.

Lastly, a small shortcut has been added to the time trigger, which now accepts multiple time values.

  - alias: "Example with multiple time values in a single time trigger"
      - platform: time
          - "05:00:00"
          - "06:00:00"
          - "10:00:00"
      choose: ...

Open Z-Wave (beta)

The Open Z-Wave (beta) integration is coming along nicely and others are started helping out as well! A shout out to @firstof9, @RobBie1221 and @tradiuz for jumping in and helping out this release.

Some additional information is added to the UI for Open Z-Wave, you can now see device information right from the device page and shows information like the Z-Wave Node ID and other information about your Z-Wave device.

Screenshot of Z-Wave device information available in the UI Screenshot of Z-Wave device information available in the UI.

Furthermore, RGB color support has been added to lights, and bugs have been fixed using color temperatures and dimming. 💡

Lastly, unnecessary polling of devices has been reduced.

Yet another round of performance improvements

Did we tell you that @bdraco is unstoppable in his saga to improve the performance and stability of Home Assistant? His train just keeps going!

0.114 is no exception and a lot of smaller performance and stability improvements are made again.

A bit technical, maybe, but here is a small overview of the changes:

  • The internal device & entity registries are now indexed, and thus faster.
  • Setting up groups at startup is more efficient.
  • Reloading YAML configurations or checking your configuration is now quicker.
  • A context accompanies every event in Home Assistant (every trigger, automation, … has a “triggered by what and who”). These contexts are now created faster, which makes everything faster.
  • Tracking time pattern triggers are now scheduled on our event loop, which is far more efficient.
  • Processing of system logs is taken out of the main program loop, so it doesn’t interfere with things Home Assistant does for you.

Finally, if, for any reason, corruption is detected in the Home Assistant recorder database (SQLite), the old database is moved and a new, fresh database is created. This prevents issues during startup.

Honestly, the above isn’t even complete. 😅 Thanks @bdraco!

Share Diagnostics & Crash reports

With Supervisor 231, shipped with Home Assistant 0.114, we added a new option on the System panel, to share diagnostics and crash reports with us anonymously. This will allow us to find and fix problems.

The shared information is only accessible to the Home Assistant Core team and will not be shared with others. The data does not include any private or sensitive information and you can disable it in settings at any time you want.

This option is by default, of course, disabled. So, if you want to help to project out, consider enabling this option in the Supervisor panel.

This service is sponsored by Sentry.io - Thanks a lot!

Other noteworthy changes

  • You can now move Lovelace cards to a different dashboard and add cards to other than the main dashboard from the device pages.
  • Add support for safe area insets; For example, iPhones with notches now cover the entire screen while having enough padding for home swipe action and the notch at the top of your display.
  • HomeKit has now support for doorbells (thanks @adrum) and @bdraco added support for multiple camera streams.
  • If you use light profiles, those now support a default transition value, thanks to @donkawechico.
  • @agners added IPv4 & IPv6 (dual-stack) support to the Home Assistant web server, allowing it to run simultaneously on both.

New Integrations

Six new integrations added this release:

New Platforms

The following integration got support for a new platform:

Integrations now available to set up from the UI

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

If you need help…

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

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

Backward-incompatible 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.


The default sqlite database (home-assistant_v2.db) is now validated on startup and if corruption is detected, the database is renamed to home-assistant_v2.db.corrupt.{ISOTIME} and startup proceeds with a fresh database.

(@bdraco - #37949) (recorder docs)

Google Assistant

A sync will be required for source selection to work after this update. The keyword to select source will also have changed from “Set mode on TV to..” to “Set input on TV to..”

(@elupus - #35753) (google_assistant docs)


Due to the new 2FA endpoint, the YAML configuration is no longer supported.

In addition, due to some API changes, if you are upgrading from a previous version, you will need to navigate to the integration page at startup and re-configure Blink.

Your username and password will be imported, but you need to submit a 2FA token (emailed to you by Blink) in order to continue setting up the integration.

(@fronzbot - #38027) (blink docs)


TensorFlow has been upgraded to TensorFlow 2.

TensorFlow 1 object detection models are not compatible with TensorFlow 2, therefore you’ll will need to walk through the setup documentation again and choose a new model from the Model Zoo.

(@hunterjm - #38384) (tensorflow docs)


A switch has been added to the Pi-hole integration. Because of the switch being added, the pi_hole.enable service is removed.

The pi_hole.disable service remains in order to support disabling the service for a given amount of time, but now it relies on the switch entity id instead of the name set by the user, so the name field is removed.

With this change, a switch entity switch.pi_hole will be added if you set up the integration with an API key and default name (Pi-hole).

Now, you can use switch.turn_on and switch.turn_off to enable and disable the Pi-hole service permanently. To disable the service for a given time, use pi_hole.disable with entity_id: switch.pi_hole and duration: 00:00:15. To target all Pi-hole services, use entity_id: all.

(@shenxn - #35605) (pi_hole docs)


The Volumio integration is now configured through the UI. If you previously had it in configuration.yaml, please remove it and configure through the Integrations panel.

(@OnFreund - #38252) (discovery docs) (volumio docs)

Honeywell Total Connect Comfort (evohome)

The hvac_action() property has been removed from Evohome zones as this data was inaccurate - the algorithm used to provide this data was not reliable, and there is no reasonable hope for a satisfactory alternative.

You will have no indication if a zone is actively calling for heat (CURRENT_HVAC_*), nor if the heat source is currently active. However, you will continue to have the hvac_mode() property, which will indicate if the heating is enabled, or not (HVAC_MODE_*).

This will be most obvious by the absence of this information in the UI.

There is no intervention required for this breaking change.

(@zxdavb - #38244) (evohome docs)


The unique id is being updated for existing sensors. You will need to clean up the stale entity from the entity registry via the GUI.

(@ChrisMandich - #38138) (flume docs)


The meteo_france integration moved from a web scraping architecture to a API-based architecture. With this major refactor the following change could break:

  • The thunder chance entity is no longer available (no longer in the API results).
  • The next rain entity state is now a datetime instead of a delay.
  • next rain attributes have been simplified.
  • weather_alert: only one entity created by department. Was by city in the previous version and could create duplicates.
  • weather alert attributes have been simplified.
  • weather platform is showing the current day forecast in the first position of daily forecast (instead of tomorrow forecast).

(@oncleben31 - #37737) (meteo_france docs)


When you have multiple Bond hubs, each with its own set of devices, those devices have IDs that the Bond integration uses to generate unique entity IDs in Home Assistant. Unfortunately, those IDs are only unique within the hub. So it is possible that unique IDs generated for entities from different hubs will not be unique and collide.

This has been fixed by prefixing device ID with a hub ID and the resulting ID is now truly unique. After restarting you will see each bond entity twice. One which is live with the new unique ID. The second which is disabled with old unique ID.

How to make it work:

  1. Remove the disabled entity (note its friendly ID, e.g., cover.shades)
  2. Optionally rename the generated friendly ID on the live entity, so that your automations continue to work. For example, your live entity will have ID cover.shades_2. Rename it to cover.shades.

(@prystupa - #38496) (bond docs)

Hi-Link HLK-SW16

The hlk-sw16 entity ids will change upon update and the old entities will need to be removed manually.

(@jameshilliard - #37190) (hlk_sw16 docs)


The Slack attachments framework was deprecated in 0.108.0 and is now officially removed. The blocks framework should be used instead.

(@bachya - #38139) (slack docs)


Per ADR-0010, IQVIA can no longer be configured via YAML and must be configured from the UI. Existing IQVIA users have already had their integrations imported and only need to remove IQVIA-related items from configuration.yaml.

(@bachya - #38141) (iqvia docs)

Shell Command

Processes spawned from the shell_command integration (the command executes) now timeout after 60 seconds instead of running forever.

(@bdraco - #38491) (shell_command docs)

Command Line

The command_line cover, notify and switch platforms, now timeout after 15 seconds (by default) instead of blocking forever.

(@bdraco - #38497) (command_line docs)

Time pattern listeners

If time abruptly moves forward or backward, time pattern listeners will only be adjusted after they were previously scheduled to fire.

This avoids the need for every time pattern listener to check for this every second.

(@bdraco - #38021)


Support for legacy logbook events created before 0.112 is removed.

(@bdraco - #37822) (logbook docs)

Automation `turn_off` service

This change is actually not a breaking change, but it is making up for the fact that a previous change was that was not marked as such.

It turns out there are valid use cases where an automation needs to be turned off, so that it will not trigger, but where previous runs may still be active that should be allowed to complete. For example, an automation that performs a reasonably lengthy procedure that should not be aborted midstream, otherwise it would leave the system in an undesirable state. Or a queued automation that needs to handle all previous events, some of which may not be complete when the automation is turned off.

To accommodate for these use cases, this release introduces adds an optional parameter to the automation.turn_off service, namely stop_actions, which defaults to true. It controls whether or not active runs should be stopped when the automation is turned off.

(@pnbruckner - #38436)

Farewell to the following

  • The Linky integration has been removed. Enedis has discontinued its Linky API (to get electric consumption). (@Quentame - #38565)

Release 0.114.1 - August 15

Release 0.114.2 - August 17

Release 0.114.3 - August 20

Release 0.114.4 - August 26

All changes

Click to see all changes!