0.112: Making things faster; Logbook & History

And another three weeks passed! Home Assistant Core 0.112!

At this point, I almost feel like “Making things easier” as the motto for our current development is replaced by: Making things faster! 🚀

The last couple of releases, tons of performance improvements where made, most notably the frontend starting sooner in the previous 0.111 release.

This release is no exception, bringing absolutely game-changing performance improvements to the logbook and history panels. Honestly, I avoided using the logbook in the past because of the slowness it had.

Personally, I feel like Home Assistant is growing up. Slowly things become more reliable, faster, easier to use, slick, more fine-grained? I might be biased a bit… What do you think? What is your favorite improvement that was made lately?

Enjoy the release!

../Frenck

Important upgrade notice!

Let’s start with an important notice for upgrading to Home Assistant Core 0.112.

This release has changes to the database format of Home Assistant. On upgrade, it will be migrated to the new format.

Depending on the size of your database and the performance of the hardware you run Home Assistant on, this migration process could add additional time to the first time starting after the upgrade. For most of us, this adds just a couple of minutes, but if you have an enormous database (for example, 30+ GiB), it might take an hour or maybe even two.

So, don’t panic if Home Assistant doesn’t come up immediately.

Logbook and History 🚀

The reason for the above-mentioned database change can be found in the Logbook & History. Thanks to @bdraco, who has been improving this part of Home Assistant the past weeks.

As a result of his effort, the History & Logbook are now lightning fast. ⚡️

Not a tiny bit faster, but a whole new experience compared to how it used to be. Fantastic work there @bdraco!

Logbook and History now have a date/time range picker

So, @bramkragten stepped on the Logbook & History train and made the logbook and history panels a lot more flexible.

You no longer have to choose between a fixed period to show, but can define the period you want to see data for yourself.

Select a start and end date and time window and it will show just that data.

Screenshot of the new date/time picker Screenshot of the new date/time picker.

By default it no longer shows a full day of data, but just a couple of hours so it is even quicker to load. As most of the time, one would look at recent events anyways.

The user that made a change visible in the logbook

Talking about the logbook, you can now also see who made a change in the logbook! No more discussion about who changed the temperature!

Screenshot of the logbook showing who made the change Screenshot of the logbook showing who made the change.

Multiple entities and states in YAML automations

Are you writing your automations in YAML? You might appreciate this one:

A single condition rule can now test if multiple entities match the condition. Furthermore, states and zones now also accept a list in a condition. That helps testing if the entity matches any of the ones listed.

So this:

condition:
  - condition: state
    entity_id: light.kitchen
    state: "on"
  - condition: state
    entity_id: light.living_room
    state: "on"
  - condition: state
    entity_id: light.office
    state: "on"

Can now be shortened to this:

condition:
  - condition: state
    entity_id:
      - light.kitchen
      - light.living_room
      - light.office
    state: "on"

An example that tests if the alarm is in any of the specified states:

condition:
  - condition: state
    entity_id: alarm_control_panel.home
    state:
      - armed_home
      - armed_away

And this condition is now also passing when Frenck is at home or at work (fake, of course, since Frenck works from his home).

condition:
  - condition: zone
    entity_id: device_tracker.frenck
    zone:
      - zone.home
      - zone.work

Or combine! The following condition would pass if both Frenck and Daphne are either at home or in the work zone.

condition:
  platform: zone
  entity_id:
    - device_tracker.frenck
    - device_tracker.daphne
  zone:
    - zone.home
    - zone.work

Integration specific panels are now on the integrations page

Some integrations, like ZHA, Z-Wave and MQTT have their own panels or dev tools. For things like pairing devices or publishing MQTT messages.

These used to be on the configuration page or development tools, which was weird because the integration settings would be on the integrations page. ZHA also had a lot of device settings in its own panel, resulting in a lot of duplicate functionality spread across the Home Assistant interface.

These panels and tools are now moved to the integrations pages, directly within the integration that provides those. You can find them on the card of the integration at the Configure button.

Screenshot of the MQTT configure button Screenshot of the MQTT configure button.

The device-specific settings are now available on the device page, so we now have 1 place to go for information and settings for devices.

Screenshot of a ZHA device Screenshot of a ZHA device.

In the process, we also cleaned some things ups, like adding a device in ZHA. If you change the name of the device while adding it, the entities and entity IDs are named accordingly.

New home for the logs and information pages

More moving this release, the logs and information pages used to be in the development tools panel, but they didn’t really belong there. They aren’t really tools for developing, they provide information on your set up.

We moved them to the configuration page where they are joined with server management and the general configuration.

Screenshot of the new home for logs & information Screenshot of the new home for logs & information.

Automatically disconnect if a tab has been hidden for 5 minutes

An improvement in the battery of your device and your data cap are going to like:

When the Home Assistant UI is not visible for longer than 5 minutes, it disconnects from your Home Assistant instance. This means you no longer get data or camera streams and your device can optimize resource and power consumption.

Of course, when showing the browser (or browser tab) again, it will automatically reconnect.

We now show all automation/scenes/scripts

Automations, scenes and scripts in the configuration panel are no longer hidden when they have the hidden attribute. This was erroneously added in the past and has now been undone.

Talking about the old hidden attributes. They have been slowly deprecated over time, as they originate from the previous Home Assistant UI. As of this release, this attribute has been completely removed from the system.

Other noteworthy changes

  • @balloob has shaved of a couple of seconds from the Home Assistant startup again.
  • Entities that originate from MQTT will now become “unavailable” when the integration is not connected to the MQTT broker. Thanks @elupus!
  • If you have a Xiaomi vacuum cleaner, @jthure added a service to send it to specific places using a new goto service.
  • The Smappee integration has been fully rewritten, by @bsmappee themselves!
  • Auto discovery has been added to the NUT integration. Please note that some NAS devices might be discovered as they support adding an external battery.

New Integrations

New Platforms

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

  • Tile

    This is now available for configuration via the integrations UI. The entity IDs have changed to reflect the human-friendly name of the Tile (as defined in the Tile mobile app). Please update your automations accordingly.

    (@bachya - #36173) (tile docs)

  • Panel_Custom

    Specifying custom panels based on HTML imports is deprecated and will be removed in a future version.

    (@balloob - #36464) (panel_custom docs)

  • Avri

    Avri is now available for configration via the integrations UI. Remove the integration from configuration.yaml and re-add it in the UI.

    (@timvancann - #34288)

  • Arcam

    This is now available for configuration via the integrations UI. Remove the integration from configuration.yaml and re-add it in the UI. To support the turn_on action, you will need to setup an automation based on an exposed event from the integration. This can be accomplished via device actions.

    (@elupus - #34384) (arcam_fmj docs)

  • Android TV

    Usage of the states ‘idle’ and ‘standby’ are switched for the Android TV integration to be consistent with other media players. User-provided custom state detection rules are not affected.

    (@JeffLIrion - #36509) (androidtv docs)

  • Xiaomi Miio

    Due to general code updates to the xiaomi_miio vacuum component there are backward-incompatible changes to the following services:

    • xiaomi_miio.vacuum_remote_control_start
    • xiaomi_miio.vacuum_remote_control_stop
    • xiaomi_miio.vacuum_remote_control_move
    • xiaomi_miio.vacuum_remote_control_move_step
    • xiaomi_miio.vacuum_clean_zone

    These all now require that either entity_id or area_id is passed when calling the service. You need to update all usages (such as automations and scripts) of these services which do not already pass entity_id or area_id. For example, change the existing automation:

automation:
  - alias: "Test vacuum zone"
    trigger:
    - event: start
      platform: homeassistant
    condition: []
    action:
    - service: xiaomi_miio.vacuum_clean_zone
      data:
        repeats: "{{states('input_number.vacuum_passes')|int}}"
        zone: [[30914,26007,35514,28807], [20232,22496,26032,26496]]

to:

automation:
  - alias: "Test vacuum zone"
    trigger:
    - event: start
      platform: homeassistant
    condition: []
    action:
    - service: xiaomi_miio.vacuum_clean_zone
      target:
        entity_id: vacuum.xiaomi_vacuum
      data:
        repeats: "{{states('input_number.vacuum_passes')|int}}"
        zone: [[30914,26007,35514,28807], [20232,22496,26032,26496]]

(@jthure - #35737) (xiaomi_miio docs)

  • Honeywell Total Connect Comfort

    Remnants of EU integration for Honeywell thermostats have been removed. As the integration was already removed for EU, all consumers should already be US integrations. Existing configurations should remove region: lines from their climate:honeywell configuration sections.

    (@jhenkens - #36456) (honeywell docs)

  • Broadlink

    The timeout option has been removed from the command learning service because it does not work properly. The device has a fixed timeout of 30 secs, which cannot be changed.

    To adapt to these changes, users need to remove timeout: num_secs from calls to the broadlink.learn_command service.

    (@felipediel - #36318) (broadlink docs)

  • Frontend

    The config integration will always be loaded if you load the frontend integration. The configuration panel can no longer be disabled.

    (@balloob - #36587) (default_config docs) (frontend docs) (safe_mode docs)

  • Homematic IP Cloud

    The HMIP-MOD-TM devices will get a new unique ID due to a merge of the implementation with new HMIP-MOD-HO. So check your dashboards, scripts, automation, … and use the newly created device/entity. The old device can be deleted under the device section in Home Assistant.

    (@SukramJ - #36595) (homematicip_cloud docs)

  • Speedtest.net

    This integration is now configured through the UI. To successfully import from configuration.yaml please remove monitored_conditions. If server_id is mentioned it will check against the list of servers before importing.

    (@engrbm87 - #36254) (speedtestdotnet docs)

  • ZHA

    ZHA sensors corresponding to AnalogInput and MultistateInput Zigbee clusters have been dropped. These are mostly seen in Aqara vibration/cube devices which are pretty much stateless, so remove entities and rely on zha_events instead.

    (@Adminiuga - #36696) (zha docs)

  • Yeelight

    It is no longer be possible to override device_type via model from the configuration, to force some supported features. For example, force ceiling light into generic light, etc. Now it will only be used for Yeelight lib, to get correct color temperature ranges. It still possible to pass declared model to the Yeelight library to get correct temperature ranges support.

    (@zewelor - #36658) (yeelight docs)

  • Viessmann ViCare

    Removed existing attributes from the climate entity which are now available as separate sensors. If you were using one of the following attributes, you must migrate to the new sensors. The sensors are created automatically.

    For all heating types:

    • supply_temperature
    • outside_temperature
    • circulationpump_active

    For heating type gas:

    • burner_modulation
    • boiler_temperature

    For heating type: heatpump:

    • return_temperature

(@crazyfx1 - #34385) (vicare docs) (new-platform)

  • AlarmDecoder

Previously the autobypass configuration option only worked for home and away arming. It now works for night arming also. Review the AlarmDecoder integration documentation to make sure the autobypass option is configured to your preference.

(@ajschmidt8 - #36692) (alarmdecoder docs)

  • Met Office

    This is now available for configuration via the integrations UI. You will need to ensure you keep a copy of the DataPoint API key handy to re-enable the integration in your server. The location being forecast is, by default, taken as the location of the server, so again if you were forecasting other locations you will need to have those GPS co-ordinates to hand, to re-enter them when configuring new integrations through the UI.

    (@MrHarcombe - #34900) (metoffice docs)

  • Logbook

    Changes have been made which improve db performance of state change events and reduce overall db size.

    • context_id has been removed from the logbook api.

    • Remove old/new state data from state change event data since it can now be found by a join of the states table. This change avoids duplicate storage of the state in the events table.

    • Remove support for the deprecated hidden attribute from logbook and history.

    Examples showing how to find the old and new state have been provided in the States and Events documentation.

    (@bdraco - #36796, #36883, #37039) (alexa docs) (automation docs) (homekit docs) (logbook docs) (recorder docs) (history docs) (script docs)

  • Recorder

    This breaking change only applies to you if you query/work with the Home Assistant database manually.

    entity_id validation now default to on when converting states to native. To disable validation when converting states to native, pass validate_entity_id=False to to_native or when using execute with to_native=True, pass validate_entity_ids=False

    Context ids are no longer duplicated in the states table. Join the events table on state.event_id to events.event_id to find the context_id instead.

    For more information about our database structure and how to query it, check out our Data Science Portal.

    (@bdraco - #36938, #37036) (history docs) (plant docs) (recorder docs) (statistics docs)

  • Denon AVR Network Receivers

    This is now available for configuration via the integrations UI. Please remove the previous Denon AVR platform from your configuration.yaml file. Denon and Marantz receivers are discovered automatically and show up under “Configuration”-> “Integrations”, from there, click on configure and go through the steps. All previous setting options are still available during this setup.

    If your receiver does not show up automatically, go to “Configuration”-> “Integrations”-> press the “+” icon -> search for “Denon AVR” and enter the setup.

    (@starkillerOG - #35255) (denonavr docs)

  • Smapee

    The Smappee integration has been completely renewed with API v3 to support all types of Smappee monitors (Energy, Solar, Pro, Plus, Genius, Connect, P1S1 module) and switches (Comfort plug, Switch). Existing old entities will still be available in this new integration, but their unique IDs will have changed. Users will need to remove the old remaining entries from the entity registry.

    The configuration.yaml file now only requires the client_id and client_secret. The username and password will be asked on authentication when setting up the integration via the frontend. Please check the documentation for the details how to set up the integration.

    Example YAML configuration:

    smappee:
      client_id: 1234
      client_secret: 5678
    

    (@bsmappee - #36445) (smappee docs)

  • Awair

    The Awair integration is now configured from the UI, but YAML configuration will be automatically imported for you. The integration no longer supports listing specific devices to monitor, because the Awair API rate-limits now apply on a per-device basis, rather than per-account. If you do not wish for a device to show up in the UI, simply disable its entities from the integration page.

    Additionally, the Awair integration no longer sets custom “device_class” attributes for non-standard sensors (such as the “Awair Score” sensor). This does not affect the operation of the sensors, but if you relied on these non-standard values in your configuration you may need to make adjustments.

    (@ahayworth - #34394) (awair docs)

  • Hunter Hydrawise

    Hydrawise made an API change that removed rain sensor status, changed the behavior of the automatic watering switches, and the way in which the watering schedule is reported. As a result, the following backward-incompatible changes were made.

    • The rain sensor is no longer available.
    • The auto_watering switch state now reports off when the corresponding watering zone is actively watering. If auto_watering is enabled the switch status will report off when watering starts and will return to on when watering stops in that zone.
    • The next_cycle sensor date & time state string is now reported in UTC ISO format, e.g., 2020-06-18T13:52:27+0000. Suspended zones no longer report not_scheduled.

    (@ptcryan - #34448) (hydrawise docs)

  • Xiaomi Gateway (Aqara)

    YAML configuration of the Xiaomi Aqara integration has been deprecated, please remove the xiaomi_aqara platform from your configuration.yaml file.

    Xiaomi Aqara Gateways are discovered automatically and show up under “Configuration”-> “Integrations”, from there click on configure and go through the steps. If your Xiaomi Aqara Gateway does not show up automatically, go to “Configuration”-> “Integrations”-> press the “+” icon -> search for “xiaomi_aqara” and enter the setup. If no key is provided during setup, only the binary_sensor and sensor platforms will be available. A key is required to activate the other platforms.

    (@starkillerOG - #35595) (discovery docs) (xiaomi_aqara docs)

  • Withings

    Withings “profiles” in YAML configuration is no longer supported and has been moved into UI-based configuration.

    (@vangorra - #36864) (withings docs)

  • Toon

    The Toon integration has been rewritten to support the new authentication methods from Eneco/Electrabel and Viesgo. After upgrading, go to the integrations panel, to re-authenticate the integration. Please note, that you might need to update your Toon App with a new redirect URL in the Toon Developer portal. Make sure to check the Toon integration documentation for information about the URL to use.

    The scan_interval YAML configuration option has been deprecated. It is no longer used, as this integration is now push-based. If you have it configured, please remove it from your configuration.

    The “Holiday Mode” & “Toon Program” binary sensors have been replaced by a “Holiday Mode” and “Thermostat Program” switch, thus having new entities. You may need to adjust your automations if you used those in that.

    Service toon.update has been removed, it is no longer needed as this is now a push-based integration. Please make sure you remove those from your automations.

    (@frenck - #36952) (toon docs) (new-platform)

  • Translations

    This breaking change applies to maintainers and users of custom integrations (custom_components) that have used the .translations directory for translations, as previously warned that directory is no longer loaded.

    The new name for this directory is translations (without the . prefix), for Home Assistant to be able to load your files from this directory, simply remove the . from the name of it.

    If you publish your custom integration to GitHub, you should enable the hassfest action, this would have warned you about this change in the previous 3 releases.

    (@ludeeus - #37021)

  • MQTT

    • The embedded MQTT broker, which has been marked as deprecated for the past year, has now been removed.

    • Remove MQTT broker tls_version parameter from your configuration and instead rely on auto negotiation.

    (@emontnemery - #37032, #37033) (mqtt docs)

  • Squeezebox

    This is now available for configuration via the integrations UI, and configuration of the Squeezebox integration through configuration.yaml is now deprecated. Please consider using the frontend to configure the Squeezebox integration instead. Servers will automatically be discovered by the “discovery” integration, or by this integration once it is loaded. If the user adds this integration from frontend, it will attempt to automatically discover the server as well.

    The Squeezebox integration will now handle individual players coming online or going offline while Home Assistant is running. Previously, the integration would only detect players that were present during startup.

    (@rajlaud - #35669) (squeezebox docs)

  • Alexa

    Alexa Flash Briefings users must now set a configuration option called password, like this:

    alexa:
      flash_briefings:
        password: YOUR_PASSWORD
        whoishome:
          - title: Who's at home?
            # ...
    

    If you had configured a flash briefing with the name password before, you have to rename it. It is not required anymore to use the legacy api_password authentication to use Alexa Flash Briefings.

    You also have to change the endpoint in the Alexa Developer Console to include this password in your URL, like this: https://YOUR_HOST/api/alexa/flash_briefings/BRIEFING_ID?password=YOUR_PASSWORD.

    (@Tho85 - #36789) (alexa docs)

  • remote_rpi_gpio

    A double inversion happening on the remote_rpi_gpio platform has been removed. This might inverse your switches behavior for this platform.

    (@auchter - #34390) (remote_rpi_gpio docs)

  • Custom integrations/components

    This is more a breaking change for developers of custom integration for Home Assistant.

    Custom components depending on helpers.entityfilter for filtering may need an adjustment. Imports of FILTER_SCHEMA or BASE_FILTER_SCHEMA will be fine but any components directly depending on the convert_filter method will need to ensure the dictionary they are passing in has include_entity_globs or exclude_entity_globs fields specified.

    (@mdegat01 - #36913) (logbook docs) (recorder docs)

Farewell to the following

The integrations below have been removed:

  • Lockitron (API platform is decommissioned) (@frenck - #37012)
  • Fortigate (replaced by FortiOS integration) (@kifeo - #34586)

Release 0.112.1 - July 2

Release 0.112.2 - July 3

Release 0.112.3 - July 6

Release 0.112.4 - July 9

Release 0.112.5 - July 14

All changes

Click to see all changes!