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

Picture of a Google Nest Hub with the Home Assistant UI on it.

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

Release 0.97.1 - August 9

A new breaking change was introduced with 0.97.1 to accommodate for the HaveIBeenPwned shutting down v2 of their API on August 18. The integration has been migrated to using v3.

Release 0.97.2 - August 11

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.

Backward-incompatible 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 cal 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 </integrations/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:

    • snow_1d .. snow_5d

    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
  • haveibeenpwned - the v2 API is now replaced with the v3 API, which requires an API key. v2 of the API will stop working on August 18.

Beta Fixes

All changes