2025.2: Iterating on backups

Home Assistant 2025.2! ❤️

In the previous release, we overhauled our backup system, and the response was overwhelming! Tons of suggestions and feature requests came in, so this release is—once again—focused on backups. Based on this community feedback, we’ve added loads of improvements, including the first integrations to store your backups in Google Drive and Microsoft OneDrive!

This release also brings exciting new features to Voice! Home Assistant can now call your analog phone, and when dinner is ready, you can broadcast that message to all voice assistants in your home! But wait… there’s more!

On February 12, 2025, we’re streaming live on YouTube all about Voice: Voice - Chapter 9! 🎙 Be sure to subscribe and hit the bell so you don’t miss it. 🛎

Before diving into the release notes, I also want to give a shoutout to our friends at ESPHome powering so much of the Home Assistant ecosystem, including Home Assistant Voice PE! And on February 19th, they’ll be hosting a live release party for ESPHome 2025.2! 🎉

Enjoy the release!

../Frenck

PS: It is almost Valentine’s day, did you set up some romantic scenes yet? 🌹

Iterating on backups

In the previous release, we fully revamped the entire backup experience and added many new features to make it easier to use. That release set the stage for the next iterations and opened up the ability for integrations to provide locations to store backups.

We’ve received a lot of feedback on the new backup system, which is awesome! ❤️ All the feedback helped us prioritize the most requested features, and other improvements to the backup system.

This release includes a lot of the most requested improvements and abilities.

Unencrypted backups

The new backup system came with a lot of security improvements, including encryption of backups. However, as it turns out, many users use these backups to extract and restore single files or configurations, a use case in which encryption made things more difficult. In this release we made two changes to the backup system to address this.

Ability to turn off encryption for specific locations

While our default recommendation remains to encrypt backups, as of this release, you can turn off encryption on a per location basis. This allows you to store backups on you local NAS, for example, in an unencrypted format.

Screenshot showing the option to turn off encryption for a specific backup location. Screenshot showing the backup locations, one location indicates that encryption has been turned off.

There is one exception to this, which is Home Assistant Cloud. Backups stored in Home Assistant Cloud will always be encrypted, and encryption cannot be turned off. At Nabu Casa, we take your privacy and security very seriously, and we never ever want to be able to access your data.

Downloading backups unencrypted

When downloading backups from the Home Assistant interface, you will now always download the backup in an unencrypted format that can be extracted using your favorite archive tool.

This works for all backups, regardless of the encryption settings of the location in which they are stored. For instance, if you download an encrypted backup from Home Assistant Cloud through the Home Assistant interface, it will decrypt the backup on the fly while you download it.

Customize the time of your backups

The initial iteration of the backup system scheduled backups to run at 4:45 AM, but this time wasn’t ideal for everyone. Some, for example, turned off their network storage during the night, meaning the backup would fail.

This release, we added the ability to customize the time of your backups to your liking. Additionally, if you choose to make weekly backups, you can now select the days of the week you want the backup to run.

Screenshot showing the backup configuration options, you can now set your own time and select which days to backup.

Taking backups on an advanced schedule

The above backup time changes not flexible enough for you? Well, you are in luck! In this release, we added an action (backup.create_automatic) that you can use to trigger a backup, with your preferred settings, in an automation.

Screenshot showing an automation in the automation editor that is using the new action to create an automated backup.

This allows you to create automated backups on any schedule you like, or even add conditions and actions around it. For example, you could make an automation that triggers on a calendar, wakes up your network storage, waits till it is online, and then starts a backup.

Re-introduction of the backup toggle on update

If you run Home Assistant OS, you get updates for Home Assistant along with all your add-ons. The update dialog used to have a toggle to create a backup before updating, which was removed in the previous release.

This change was made because this feature was considered redundant when running regular automated backups. However, we’ve received a lot of feedback that many people relied on these backups to ensure they had the latest data, for instance, if they needed to roll back to a previous version of an add-on. We are re-introducing this backup on update toggle in this release, but in a smarter way. 🤓

Backup on updating Home Assistant

When updating Home Assistant, the toggle is now turned off by default and shows the last time you made a backup. This allows you to decide whether to make a new backup before updating.

Screenshot showing an Home Assistant Core update dialog, giving the option to make a backup before update.

If you turn the switch on, a full automated backup is created and synced to your configured locations, before the update is started.

This full sync is done to ensure you have the most recent backup available in case the update causes issues and you need to restore your system. In the rare case a Home Assistant update fatally fails and you can’t access the backup page, if you’ve configured a second backup location, you’ll be able to download it from there.

Backup on updating add-ons

Things are slightly different when updating add-ons. The toggle exists here too, and is disabled by default. However, when you enable it, only a backup of your add-on and its data is created. That way you can keep around the previous version of the add-on, so you can always roll back to it if needed.

Screenshot showing an Home Assistant add-on update dialog, giving the option to make a backup before update.

To prevent your system from filling up with old add-on backups, we only retain one backup per add-on, automatically deleting the previous backup whenever a new one is created. Add-on backups you created manually, of course, remain untouched and will not be deleted automatically.

Improved filenames for backups

One piece of feedback we’ve seen a lot, is that the filenames created by backups can be a bit cryptic and hard to understand for humans.

This feedback was fair, as the filename was a hash and originally not designed to be human-readable. This method was not newly introduced in the last release, but it was made more apparent with the new backup system and locations.

So, in this release, we’ve improved the filenames of the backups stored on your backup locations. The filename now includes the date and time the backup was created, making it easier to understand and identify the backup you are looking for, even outside of Home Assistant.

New locations

This release also introduces new locations to store your backups. There are new integrations for Google Drive and Microsoft OneDrive, and backup support was added to the Synology DSM integration.

Screenshot showing the backup configuration panel, with all possible backup integrations set up!

Voice

Assist, our private voice assistant, is getting a few new features in this release. If you don’t have Assist set up yet, check out our Home Assistant Voice: Preview Edition to get started.

Home Assistant will be able to call your analog phone to tell you a message

Remember our tutorial on turning an analog phone into the world’s most private voice assistant? Thanks to Jamin, we now have a way to call your analog phone from Home Assistant!

You can use assist_satellite.announce to have Home Assistant call your phone and play a message when someone picks up the phone.

If you use an LLM as the brains for your voice assistant, you can take this one step further with the new assist_satellite.start_conversation action. Instead of playing an announcement, it starts a conversation between Home Assistant and the user, with Home Assistant saying the first message. Left the garage door open for 30 minutes? No problem, let Home Assistant call and ask if they want to close it.

(Starting a conversation with the default conversation agent is a bit more work and did not make it this release).

New Broadcast intent

You can now broadcast messages to every other voice assistant in your home. Try it by saying “Broadcast it is time for dinner”. As always with new intents, support may vary depending on your language, but our language leaders are working hard on making sure it will be supported soon in your language!

Setting Temperature on Thermostat

A few releases ago we introduced an intent to get the current temperature from a climate device. As of this release, you can also set the target temperature of your thermostat by voice.

By saying “Set the temperature to 19 degrees” this will smartly target the area you are in (if you have a thermostat per area, such as thermostatic valves on your radiators) or the floor you are in (if you only have a central unit). You can also target specific devices by name if you prefer.

LLMs meet calendars

Without complex custom tooling, LLM-based conversation agents previously could not fetch events from your calendar. This release changes that. Out of the box, LLM-based agents can now retrieve today’s and this week’s events from any of your calendars. Don’t forget to expose your calendar entities to enable this functionality.

Shared history between the default conversation agent and its LLM-based fallback

In 2024.12 we introduced a lovely feature that allowed you to use our fast and local default conversation agent for most queries while still being able to fall back to a much more powerful LLM-based agent for more complex queries.

This introduced some interesting behaviors. From a user perspective, it looked like you were talking to the same assistant, whereas, in reality, nothing was shared between the two agents. This led to some less-than-optimal scenarios, such as this one:

Screenshot of missing history in the conversation

The first command is processed locally by our default agent, but the follow-up request is processed by the LLM-based agent. Since no memory is shared, it does not understand what device you want to turn off.

Starting with this release, both agents now share the same command history, helping address this issue.

Screenshot of the new improved behavior

Model Context Protocol

This release adds the Model Context Protocol to Home Assistant thanks to Allen. Home Assistant can both be an MCP server and an MCP client. From the MCP website:

MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools.

To give it a try yourself, check out this client demo.

Integrations

Thanks to our community for keeping pace with the new integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] and improvements to existing ones! You’re all awesome 🥰

New integrations

We welcome the following new integrations in this release:

This release also has a new virtual integration. Virtual integrations are stubs that are handled by other (existing) integrations to help with findability. The following virtual integration have been added:

Noteworthy improvements to existing integrations

It is not just new integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] that have been added; existing integrations are also being constantly improved. Here are some of the noteworthy changes to existing integrations:

  • A big shoutout to @NoRi2909! He has been reviewing and improving every single piece of text we show anywhere in Home Assistant. Thank you for your hard work!
  • Also, @lboue! This hero keeps extending the device support for the Matter integration by adding support for more and more devices. Home Assistant is close to reaching full Matter 1.4 device support!
  • @chemelli74 added support for the Shelly BLU TRV to the Shelly integration. Nice!
  • The HomeWizard Energy integration now supports the HomeWizard Plug-In Battery. Awesome work @DCSBL!
  • Thanks to @iprak, the Vesync integration now supports humidifiers!
  • @rytilahti added vacuum support to the TP-Link Smart Home integration. Sweet!
  • The Reolink integration keeps evolving, @starkillerOG added support for baby crying detection as a sensor. Nice!
  • The Bang & Olufsen integration now provides entities allowing you to react to physical button presses on all Bang & Olufsen devices. Thanks @mj23000!

Now available to set up from the UI

While most integrationsIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] can be set up directly from the Home Assistant user interface, some were only available using YAML configuration. We keep moving more integrations to the UI, making them more accessible for everyone to set up and use.

The following integration is now available via the Home Assistant UI:

Other noteworthy changes

  • When using the Generic thermostat, setting a temperature that matches one of the presets will automatically select that preset as active. Thanks @domingues!
  • Time triggers in automations can now be offset when using datetime input helpers. Thanks @Petro31!

Bluetooth config panel

The Bluetooth integration now has its own configuration panel! 💙

The panel is accessible by going to Settings > Device & services. Find and select the Bluetooth integration, and next select Configure.

This new panel gives you access to the Bluetooth integration options and insights into the connection slot allocations. More importantly, it has an advertisement monitor!

Selecting Advertisement monitor will open a new panel, where you can see information about your Bluetooth devices, including the raw advertisement data and how they are connected to your Home Assistant instance. This includes which Bluetooth proxy it connects through!

Screenshot of the new advertisement panel

Preparing our graphs for the future

This release includes a major overhaul of every graph we display and show in Home Assistant. We have entirely replaced the software library that renders these graphs in the frontend.

You can most definitely tell things have changed, but everything still looks very similar. The latter was our goal for now, as we wanted the existing experience to be familiar.

However, this change is a preparation for the future. We have many plans and ideas for our graphs, and this change was a necessary step to make those plans possible.

Need help? Join the community!

Home Assistant has a great community of users who are all more than willing to help each other out. So, join us!

Our very active Discord chat server is an excellent place to be at, and don’t forget to join our amazing forums.

Found a bug or issue? Please report it in our issue tracker, to get it fixed! Or, check our help page for guidance for more places you can go.

Are you more into email? Sign-up for our Building the Open Home Newsletter to get the latest news about features, things happening in our community and other news about building an Open Home; straight into your inbox.

Backward-incompatible changes

We do our best to avoid making changes to existing functionality that might unexpectedly impact your Home Assistant installation. Unfortunately, sometimes, it is inevitable.

We always make sure to document these changes to make the transition as easy as possible for you. This release has the following backward-incompatible changes:

Ecovacs

The attributes on the vacuum entity for the lifespan of the main brush, side brush, and filter have been deprecated and are now removed. These attributes are superseded by dedicated sensor entities.

(@gjohansson-ST - #134492) (documentation)

Home Connect

Some appliances might lose their power entity as the API does not report the power setting.

(@Diegorro98 - #135930) (documentation)

IMGW-PIB

Some hydrology data is no longer available to Home Assistant users via IMGW-PIB API and for this reason, the following entities are removed:

  • flood alarm binary sensor
  • flood alarm level sensor
  • flood warning binary sensor
  • flood warning level sensor

(@bieniu - #134668) (documentation)

KNX

The “State Updater” option in the integration settings now works as intended. Previously, the option wasn’t applied correctly.

  • When disabled: KNX will only read a state_address once when the connection is established.
  • When enabled: KNX will also read any state_address if no value has been received for one hour.

Please review your integration settings to ensure this option is configured according to your preferences.

(@farmio - #135611) (documentation)

Litter-Robot

Remove extra_state_attributes from Litter-Robot vacuum entities. These were previously migrated to sensors.

(@natekspencer - #136196) (documentation)

MQTT

To change the MQTT broker settings, you need to start a reconfiguration. When CONFIGURE is selected, MQTT shows a “MQTT settings” page with subscribe and publish tools. The Re-configure MQTT button will be replaced with an MQTT options page.

The reconfiguration option will only be available from the MQTT integration entry context menu.

(@jbouwh - #133342) (documentation)

Pentair ScreenLogic

Raw states derived from ScreenLogic enums are now lowercase instead of Title Case. This change impacts:

  • pH/ORP dosing state sensor entities:
    • Dosing -> dosing
    • Mixing -> mixing
    • Monitoring -> monitoring
  • The preset_mode state attribute for ScreenLogic climate entities, where raw states have also been underscored-spaced and had any punctuation removed.
    • Solar -> solar
    • Solar Preferred -> solar_preferred
    • Heater -> heater
    • Don't Change -> dont_change

These changes support the addition of translation keys for text-based entity states. You should update any references to the above states/preset_modes to the new, lowercase versions.

(@dieselrabbit - #133866) (documentation)

If you are a custom integration developer and want to learn about changes and new features available for your integration: Be sure to follow our developer blog. The following are the most notable for this release:

All changes

Of course, there is a lot more in this release. You can find a list of all changes made here: Full changelog for Home Assistant Core 2025.2