0.97: Apache Kafka, Fortigate, Twente Milieu


It’s time for Home Assistant 0.97! It has been a very busy release cycle as we have been fine-tuning our development process, which makes it easier to maintain and contribute to Home Assistant in the future.

Python 3.5 support has been dropped

As per previous announcements, this is the first release that requires at least Python 3.6. If you are on Hassbian and are planning to upgrade Python, please take note of the known issues with the default wheel server.


This is the last release that bases our Home Assistant Docker image (homeassistant/home-assistant) on Debian. As decided in Architecture Decision Record 0006: Docker Images, the image will be based on Alpine Linux starting with the 0.98 release. These new Docker images will be running same the Home Assistant Docker image that powers Hass.io. You don’t need to change anything unless you have installed Debian packages manually or made any other changes to the running container. However, if that is the case, you’ll need to find the Alpine equivalent of whatever you were doing.

The main driver behind this change is that by re-using images, maintenance becomes easier, and users of the homeassistant/home-assistant image can benefit from the many optimizations that went into the Hass.io images.

Reload scenes from configuration.yaml

Thanks to @balloob it is now possible to reload scenes from configuration.yaml without restarting Home Assistant. This is part of an effort for Home Assistant 1.0 to make scenes a first-class citizen of Home Assistant, including creating/restoring scenes on the fly in the future. To track this effort, follow this page.

Home Assistant Cast

In case you missed the announcement, we released Home Assistant Cast yesterday. It allows you to transform any Cast interface into a display for Home Assistant. Read the announcement for more information..


Home Assistant Cast opens a whole new world of possibilities for using Lovelace, and we are really excited to learn what cool things you will do with it! If you created something, feel free to share it on social media using the #homeassistantcast hash-tag. We are looking forward to your pictures!

UI changes

This release contains a couple of notable UI changes:

  • New Cast row available in the Lovelace entities card to start Home Assistant Cast.
  • Improved accessibility for visually impaired users. This is an ongoing effort on making the frontend accessible.
  • Split out configuration.yaml actions from the core configuration into a new server control config panel. Thanks @IcyPalm
  • Markdown card now has a size + 1, if it has a header defined. Some layouts might be moved around due to this.

In other news

Frenck wrote an excellent blog post on how to make a $2 smart doorbell using Home Assistant and ESPHome, which doesn’t require soldering.

Aaron created a great and detailed tutorial explaining how to add an interactive 3D floorplan to Home Assistant.

We wrote about how we use Azure DevOps to automate the development of Home Assistant. Interested to see how Home Assistant is automatically build? Check the developer blog.

@jimz011 has updated his amazing, HomeKit inspired, Lovelace config and shared it on the forums. Sneak preview on how it looks:

New Integrations

If you need help…

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

Reporting Issues

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

Breaking Changes

  • Python - Bump Python support to min Python 3.6.0 (@balloob - #25582)

  • Z-Wave - Improve handling of Z-Wave config entry vs yaml config. If a Z-Wave network_key is specified in configuration.yaml it will override a network_key specified in the Z-Wave config entry. (@cgarwood - #25112) (zwave docs)

  • Unifi - Unifi Device tracker is now part of config entry. After initial import the unifi device tracker configuration is no longer needed. If configuring SSID filter or detection time you will need to use the new configuration from UniFi. See UniFi component documentation for details. (@Kane610 - #24367) (unifi docs)

  • Ecobee - Ecobee presets now represent the different Ecobee comfort settings. Selectable by name instead of unknown ID. (@balloob - PR link todo)

  • Calendar - Rewrite calendar component - The calendar integration has been rewritten to follow our current standards and is mostly non breaking. The reset (clean up) of state attributes upon an event time passing has been removed, though. Attributes are no longer set to an arbitrary default value, and will now keep the attributes representing the last event. With this change, automations that rely on state attributes getting reset will need to be updated. All platforms have been converted. - (@MartinHjelmare - #24950) (caldav docs) (calendar docs) (demo docs) (google docs) (todoist docs)

  • SyncThru - The monitored_conditions configuration option has been removed. All available monitored conditions will be used by default. Users that have been using the monitored_conditions option need to remove it from the syncthru section in configuration.yaml. (@nielstron - #25052) (syncthru docs)

  • KNX - Updates the knx component to use xknx 0.11.1 . This introduces several new features and bugfixes. For a complete list see: https://github.com/XKNX/xknx/releases/tag/0.11.0 (@farmio - #24738) (knx docs)

    • scene: scene_number is now 1 indexed according to KNX standards. Previously it was 0 based. Please add 1 to your already configured scene numbers (scene_number: 5 becomes scene_number: 6).
    • sensor: state_address replaces address in configuration
    • binary_sensor: state_address replace address in configuration when using xknx config file (knx: config_file = ...): Replace group_address in BinarySensor and Sensor with group_address_state.
  • RitAssist - The company has been renamed from RitAssist to FleetGO, so this component needed to get renamed. Users of this integration will need to update their device_tracker config section to use the new name. (@depl0y - #25093) (fleetgo docs) (ritassist docs)

  • N26 - Adds support for multiple N26 accounts. The generation of unique ids for spaces has been changed. Users may need to remove the stale old id entities, representing spaces, from the entity registry. (@gorynychzmey - #25086) (n26 docs)

  • Environment Canada - This change removes the monitored_conditions and name options and adds an optional language option. Sensors are now created for all provided data. (@michaeldavie - #24884) (environment_canada docs)

      - platform: environment_canada
        language: french
  • TotalConnect - Total Connect Client was upgraded to support more than one alarm panel and allow future support for additional sensors. Previous alarm_control_panel entries must be removed, and a new totalconnect entry must be added to configuration.yaml. See https://www.home-assistant.io/components/totalconnect/ for configuration details. (@austinmroczek - #24427) (totalconnect docs)

  • Nuki - The lock.nuki_unlatch service has been removed. It has been replaced by the lock.open service. The lock.nuki_lock_n_go service has been renamed to nuki.lock_n_go. Users that are using the removed or renamed services in automations need to replace them with the new services. (@franfos - #22888) (nuki docs)

  • Snapcast - This changes adds multiroom support for the snapcast component. It adds 2 services media_player.snapcast_join and media_player.snapcast_unjoin to group/ungroup a client with another client. Also added source selection support in the snapcast clients as the groups are unusable due to their dynamic nature. (@lyghtnox - #24061) (snapcast docs)

  • Ambient Weather Station - The unique_id for Ambient sensors uses a new formula, meaning that even though they have the same friendly names, new sensors will be created. The integration will automatically perform this migration under the hood, but if you’ve altered the entity IDs of any Ambient PWS entities, you’ll need do the same to the new entities upon creation. Additionally, the monitored_keys configuration option is no longer supported in configuration.yaml. The integration will now create sensors for all conditions supported by the particular device. (@bachya - #25284) (ambient_station docs)

  • Google Maps - Google Passwords are no longer required to be provided in your config. An external program is now required to obtain the necessary cookie file to place in your Home Assistant config directory. This is due to the authentication process being removed from the underlying package. Existing users should remove the password: entry from their config file (username is still required). The cookie file previously generated should still be valid and will allow the tracker to continue functioning normally until the cookie is invalidated. New users will need to follow the instructions on the Google Maps Location Sharing page to create their cookie file.(@shbatm - #25316) (google_maps docs)

  • BuienRadar - Updates to the new version of python-buienrader (1.0.1); this version now leverages the new json buienradar-api. (@mjj4791 - #24463) (buienradar docs)

    The following sensor types (monitored_conditions) are no longer supported, since they are no longer provided by the json api of buienradar:

    The following monitored conditions will change units:

    • windgust (now km/h, was m/s)
    • windspeed (now km/h, was m/s)
    • windspeed_?d (now km/h, was m/s)
    • visibility (now km, was m)
  • Rejseplanen - Improve and align Rejseplanen with other transport components. (@DarkFox - #25375) (rejseplanen docs)

    • All attributes changed to snake_case.
    • Later departure attribute has been removed.
    • Added next_departures which contains a list of all later departures returned from the search, as dictionaries with the same fields as the next departure.

    Any existing templates using the sensor’s attributes will need to be updated as follows:

    • Stop ID -> stop_id
    • Stop -> stop
    • Route -> route
    • Type -> type
    • Direction -> direction
    • Due in -> due_in
    • Due at -> due_at

Beta Fixes

All changes

This is a companion discussion topic for the original entry at https://www.home-assistant.io/blog/2019/08/07/release-97/

Wonderful release! Will fit my new RPI 4 perfectly :slight_smile: thank you guys!

Can the breaking change for zwave be clarified? What is the zwave config entry? I have my network key defined in configuration.yaml as per the docs. There’s another spot it can be defined?

Yes. If you set it up in the UI then one was auto-generated (and stored inside .storage/). This now means that configuration.yaml over-rides the configuration set in .storage/.

Oh I understand! I set up zwave before the concept of integrations existed in HA.

I used to setup my zwave too before the integration concept for zwave.
What if users like us would like to switch to the zwave integration without yaml config ?
Should we just remove the yaml zwave part of our config ?

Thanks to @balloob it is now possible to reload scenes from configuration.yaml without restarting Home Assistant.

Thanks very much, this is great, it was always a pain always having to restart HA everytime I made a small change to a scene.

I made this change last night for a completely unrelated issue. It went smooth but be aware that your entity ids may change. Mine were still in the older style and were updated after going the integration route.

So sensor.zwave_device002 May become sensor.z_wave_device_002 for example. Not a big deal but the change can be a hassle to carry through a large config.

1 Like

Any idea why the docker image has grown by 0.5GB between 96.5 and 97? Seems like it’s carrying a lot more libraries or something?

What document in the Fortinet Developer Network is needed to explain creating an API token for the fortios device_tracker? Nothing I’ve tried seems to work.

Does anyone know what happened to custom-css? It used to work fine before but since 0.97 it doesn’t work anymore. For example in my themes.yaml file I have a custom property say

test-color: '#FFFFFF'

And a button with the style configured as:

style: |
  ha-card {
    background: var(--test-color);

This used to work fine when setting a theme via the profile menu in the interface via the sidebar. It still works, but only if I do a service call and set frontend theme, it used to be instant, now it requires a refresh (not a big deal). But doing a service call to set the frontend theme will set that theme for all users as it will be the backend-selected theme.
It just does not work when changing it through the UI, the wallpaper will change but it will not accept any of the custom properties. I know it is probably the wrong/bad way to do it. But it works haha.

Thanks for any info on this.

Would be awesome when you interview guests if they could share their front end and/or automations


If you want to perform a Config Check, reload automations, restart the server, etc then all of these commands have a new home in Configuration > Server Control.

Thank you @IcyPalm. It’s nice to, once again, have Config Check located at the top of the page.

Congratulations and thanks to all developers for another great release. :+1:


nest isn’t working with set temperature getting the following error:

`expected float for dictionary value @ data['temperature']`

Is it me but filter platform does not seem to be working anymore. I have 6 entities and all 6 have disappeared.

Can someone tell me where the configuration checker went? I used to be able to set the advanced mode in my profile. It’s on, but I don’t see the option to check my configuration through the ui anymore.

Edit: did not see the new menu option where the items are moved to now.

I really wish that these upgrading breaking changes were a bit better documented. Because the way it’s done right now, for example in the unifi setup, is to say feature X changed and it points to docs which say how it’s set up now. But what’s missing is an example of what the previous config should look like now i.e. how to migrate the config.

This could be solved by requiring these examples to be included in the PRs.

Another example using the unifi integration

Options to not track wired clients

This is nowhere documented, the word “wired” doesn’t come up in the docs at all.

A great example of what I’m talking about take a look at the django breaking changes releases and their documentation, which provide old code example and how to achieve the same (if possible) with the new version.

But regardless, thanks to all contributors for the new release!


Does the configuration.yaml need amending for reloading themes? Or will this just work as and when I make changes to the themes?

Which interview and which guests?

Anyone having trouble restoring Hassio snapshots on 0.97? I can’t roll back to 0.95.4 and I haven’t had issues using snapshots before.