0.96: Notion, updated sidebar, advanced mode


It’s time for Home Assistant 0.96. It’s a great release, but we also made some changes, so please pay attention.

Last release that supports Python 3.5

This will be the last release that supports Python 3.5. Home Assistant 0.97 will require at least Python 3.6. If you are using Hass.io or Docker, you will not have to do anything. If you are running Hassbian, upgrade instructions are here. If you run Home Assistant inside a virtual environment, please follow the instructions for your OS to update.

Home Assistant has adopted a new Python support strategy. Starting August 1, we will now support the last two minor stable releases of Python. This is currently Python 3.6 and Python 3.7. Python 3.8 is expected to be released near the end of the year. Once that is released, Python 3.6 support is deprecated and removed 2 months later.

Pimp my Sidebar

The sidebar has gotten an improved look! Idea started with a mockup by @JuanMTech on Twitter and grew into a full blown implementation. When visiting Home Assistant on devices with big screens (tablets, laptops, desktops), the sidebar will now always be visible in a minimized mode with the ability to fully hide it via the profile page. The developer tool buttons have been collapsed into a single menu item. The dev tools will now store its exact state when you navigate away, included the dev tool that is open. We’ve also taken the opportunity to make notifications accessible from the sidebar, instead of only via the Lovelace UI.

On mobile devices the sidebar will behave like it previously did. Check the demo for a preview.

Screenshot of the demo with the new sidebar. Screenshot of the demo with the new sidebar. Click to open.


This release includes a major clean up of our climate integration, correcting some architectural flaws from the past. The goal of this clean up was to a better job at providing an abstraction layer that fits many devices. This will improve compatibility with services that interact with Home Assistant (like Alexa/Google) and will allow us to make sure the UI works for everyone. We’ve done a lot of testing during the beta, but there might still be things that don’t work as expected. If you notice anything, please report by opening a bug report.

For a breakdown of what was driving the change, check our blog post on the dev blog.

The following things have been changed:

  • operation_mode has been renamed to hvac_mode to emphasize what the mode is for.
  • We split HVAC mode auto into auto and heat_cool. If it’s heat_cool, the user has set a temperature range the device has to use heating and cooling to stay within. Auto mode is now limited to devices that are running on a schedule or AI.
  • The state of a climate entity is now always equal to the HVAC mode.
  • hvac_action is introduced for integrations that know the current action: heating, cooling, idle.
  • set_away_mode and set_hold_mode have been merged into set_preset_mode. So instead of turn_away_mode_on(), we will now call set_preset_mode("away").
  • The is_on property has been removed. If a device is able to turn off, it should include the HVAC mode HVAC_MODE_OFF.
  • Property names have been aligned, anything ending with “_list” is now named “_modes”.
  • Integrations are only allowed to represent functionality that is present in the API. It is not allowed to add your own fake away mode.

Huge thanks to @pvizeli who drove the core implementation and to the following people for helping getting it past the finish line:

Advanced mode

As part of Home Assistant 1.0 effort, we’re simplifying the default user interface. We’re doing this by hiding certain configuration options like the customize panel behind a new “advanced mode” toggle. You can find this toggle on your profile page.

Advanced mode is only available to admin users and is a per-user setting. Enabling it for yourself won’t enable it for other admins.

In other news…

Raspberry Pi 4 support has arrived in beta. @pvizeli has been hard at work and the first beta release is available. If you flash this image, you will be able to update to a stable release later from within the UI.

Big shout out to @frenck who has been doing a lot of clean up on the website. Like, a lot lot. He has removed over 20.000 unused lines of code, and has simplified how we render code blocks, pages and headers. It takes Jekyll now a mere 14 seconds to generate the whole website! It used to be 6 minutes! 😲

Last week @balloob showed a preview of the upcoming Home Assistant Cast, a new interface for Home Assistant that runs on Chromecasts and Google Assistant devices with screens.

The Home Assistant code repository on GitHub has hit 25.000 stars! 🤩

The Home Assistant Podcast has published episode 53 to discuss all the ins and outs of this new release.

@isabellaalstrom has redone her Lovelace UI and it is looking fabulous!

New Integrations

New Platforms

Release 0.96.1 - July 18

Release 0.96.2 - July 19

Release 0.96.3 - July 21

Release 0.96.4 - July 23

Release 0.96.5 - July 25

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

  • OpenTherm - Adds support for more than one OpenTherm Gateway device which changes the configuration structure. (@mvn23 - #22932) (opentherm_gw docs)

    Example configuration:

        device: /dev/ttyUSB0
  • Ambient Weather Station - By default, the Ambient solar radiation (i.e., brightness) sensor is measured in W/m². Since this unit of measurement is not used anywhere else, this change updates the sensor to use the more prevalent lx unit. Any automations that use this sensor should be updated accordingly. (@bachya - #24690) (ambient_station docs)

  • Google Cloud - Changed the default encoding to mp3 from opus ogg, allowing it to support many more media players. (@GrandNewbien - #24808) (google_cloud docs)

    Example configuration:

     - platform: google_cloud
       key_file: googlecloud.json
       encoding: mp3 # The new default, which can still be changed to opus ogg or linear16
  • SimpliSafe - The SimpliSafe alarm control panel no longer shows a temperature attribute. (@bachya - #24833) (simplisafe docs)

  • Luftdaten - The under-laying Python module is now limited to the P1 (particles 10 microns and below) and P2 (particles 2.5 microns and below), which means you have to recreate your sensors. (@fabaff - #24842) (luftdaten docs)

  • Velbus - Added autodicovery for covers in velbus and bumped the python velbus version (@Cereal2nd - #24877) (velbus docs)

  • ZHA - ZHA entities are being removed and battery sensors are being added. We have been asked several times to remove the ZHA domain entities because they do not follow the HA standards. They were originally used to show device online / offline status, rssi, lqi and last seen. They were eventually expanded to hold battery information as well because many Zigbee devices have several power configuration clusters. Online and offline handling, rssi, lqi last seen and the handling of device availability have all been moved to the device object and battery information has been split back out into its own sensor. Any users that created template sensors that leveraged the data in the ZHA entities will be affected by this change. (@dmulcahey - #24909) (zha docs)

  • Netatmo - If the module type can not be determined the climate device will default to the type “valve” as it implements a subset of “thermostat”. Consequently those devices wont be able to be turned off. This should not be a major issue and should only happen when there are issues with the data retrieved form the Netatmo API. (@cgtobi - #25029) (netatmo docs)

  • Netatmo - The configuration of individual monitored conditions has been removed so that now all conditions are available per module by default. (@cgtobi - #24944) (netatmo docs)

  • GeoJSON Events - Update geojson_client library to version 0.4.This changes the access to the external feed from HTTP to HTTPS for the nsw_rural_fire_service_feed platform. This should normally not make any difference to anyone consuming this feed. Only if for example you have set up a template sensor or automation that reads the external_id attribute of a geo_location entity and compare it against a pattern, would you need to change this. (@exxamalte - #25039) (geo_json_events docs) (nsw_rural_fire_service_feed docs) (usgs_earthquakes_feed docs)

Beta Fixes

All changes