Home Assistant Core 2026.6.0 → 2026.9.4
18 versions, 30 breaking changes in 3 versions, 0 required stops
Version by version, oldest first
2026.6.1 – 2026.6.4: no action items (4 versions)
2026.7.0 2026-07-01
Quoted from www.home-assistant.io/blog/2026/07/01/release-20267/#backward-incompatible-changes
Breaking
Purpose-specific triggers and conditions
Several entity triggers and conditions, part of the new purpose-specific triggers and conditions, have been renamed so their keys are consistent across all domains. The old keys no longer work.
The following triggers changed:
battery.lowis nowbattery.became_lowbattery.not_lowis nowbattery.no_longer_lowlawn_mower.dockedis nowlawn_mower.returned_to_dockschedule.turned_offis nowschedule.block_endedschedule.turned_onis nowschedule.block_startedtimer.time_remainingis nowtimer.remaining_time_reachedupdate.update_became_availableis nowupdate.became_availablevacuum.dockedis nowvacuum.returned_to_dock
The following conditions changed:
climate.target_humidityis nowclimate.is_target_humidityclimate.target_temperatureis nowclimate.is_target_temperature
If an automation or script uses one of these, it will stop working until updated. To fix it, open the affected automation or script, re-select the trigger or condition (it now appears under its new name), and save. If you edit in YAML, replace the old key with the new one from the list above.
Breaking
BSB-LAN
The BSB-LAN integration has reduced its support for the older version 1 JSON API. If your BSB-LAN device runs very old firmware that only speaks the version 1 API, update it to firmware that supports the version 2 API to keep everything working.
A repair notification will let you know if your device is affected.
Breaking
iCloud
The battery_level attribute has been removed from iCloud device tracker entities. Use the dedicated battery sensor in your automations and scripts instead.
Breaking
Person
Person entities no longer report the latitude and longitude of the home zone when their location comes from a presence scanner associated with the home zone.
If you have automations or scripts that check the coordinates of a person, adjust them. To check whether a person is in a specific zone, use the new in_zones state attribute instead.
Breaking
Rabbit Air
The Rabbit Air fan preset mode values changed from title case to lowercase to match Home Assistant's state convention: Auto is now auto, Manual is now manual, and Pollen is now pollen. The user-facing labels stay the same through translations.
Update any automations, scripts, templates, or action calls that reference the old title-case preset values.
Breaking
Reolink
Reolink Duo PoE and Duo WiFi dual-lens cameras now expose a sub-device per lens. The camera and motion/AI sensor entities that previously had a "lens 0" or "lens 1" suffix in their name are moved to the new lens sub-devices and lose that suffix. Entity IDs and custom names stay the same, so most automations keep working.
If you target these entities through the camera device, update them to use the new lens sub-devices.
Breaking
StarLine
The battery_level attribute has been removed from StarLine device tracker entities. Use the dedicated battery sensor in your automations and scripts instead.
Breaking
Tesla Fleet
The route device tracker (device_tracker.<vehicle>_route) no longer reports the active route's destination name as its state. Its state is now derived from your zones like a normal device tracker (home, not_home, or a zone name), based on the route's coordinates.
The destination name is still available through the new destination sensor (sensor.<vehicle>_destination), which is disabled by default. Enable it from the entity settings if you have automations that relied on the destination name, and update any automations that matched the old route tracker state.
Breaking
Teslemetry
The route device tracker no longer reports the active route's destination as its state or through a location_name attribute. Its state is now derived purely from the route's coordinates (zone-aware, like home or not_home).
If you relied on the destination name, enable the new Destination sensor (sensor.*_destination), which is disabled by default and reports the destination name as Tesla provides it.
Breaking
Tractive
The battery_level attribute has been removed from Tractive device tracker entities. Use the dedicated battery sensor in your automations and scripts instead.
Breaking
Zeroconf
The legacy requires_api_password field has been removed from the Home Assistant zeroconf/mDNS discovery announcement (_home-assistant._tcp). It had been hardcoded to true since the http.api_password authentication mechanism was removed in Home Assistant 2024.7, so it no longer carried any meaning. The official companion apps already ignore it.
Third-party discovery clients that still read this field need to tolerate its absence.
(@agners - #173090) (Zeroconf documentation) (API documentation)
Breaking
Zone
The state (person count) and persons attribute of zone entities are now calculated from the in_zones attribute of person entities. As a result, a person can now be counted in more than one zone at the same time. For example, a person who is home with in_zones: ["home", "near_home"] now counts toward both zone.home and zone.near_home, where previously they only counted toward zone.home.
In addition, the state of position-aware device trackers is now the smallest zone the device is in, instead of the zone whose center it is closest to.
Automations, scripts, or templates that depend on zone person counts or on device tracker zone states may need to be adjusted.
Breaking
Z-Wave JS
This release requires an updated Z-Wave JS server. You need zwave-js-server 3.9.0 or newer (schema 49):
- If you use the Z-Wave JS app, update it to at least version 1.4.0.
- If you use the Z-Wave JS UI Docker container, update it to at least version 11.19.1.
- If you run your own zwave-js-server, update it to at least version 3.9.0.
2026.7.1 – 2026.7.4: no action items (4 versions)
2026.8.0 2026-08-05
Quoted from www.home-assistant.io/blog/2026/08/05/release-20268/#backward-incompatible-changes
Breaking
AirNow
The station radius option has been removed. The 2026 AirNow API no longer uses a distance parameter, so the radius had no effect on which reporting station was used. Existing entries are updated automatically, and any radius you had set is discarded. No action is needed.
Breaking
Breaking
Edifier Infrared
If you set up the Edifier Infrared integration for the R2000DB or R2730DB speakers, some buttons were mapped to the wrong infrared codes (on the R2730DB, power and mute were swapped). The mappings are now corrected and migrated automatically. If you built automations or scripts around the old, incorrect buttons, update them to match.
Breaking
Ohme
The Ohme energy sensor has been removed. It reported an estimate of the energy stored in the car's battery rather than the energy delivered by the charger, which caused confusing jumps in the energy dashboard, and the vendor's API no longer provides a useful value.
If you tracked this sensor, use an Integration - Riemann sum helper on a power sensor to estimate the energy instead.
(@dan-r - #174664) (Ohme documentation)
Breaking
Paperless-ngx
Paperless-ngx now requires a newer version of your Paperless-ngx server. The minimum supported server version is raised to 2.19, which also restores compatibility with Paperless-ngx 3.0. If your Paperless-ngx server is on version 2.18 or older, update it before you update Home Assistant.
Breaking
Robot vacuums
The deprecated battery_level property has been removed from the vacuum entities of several integrations. If you use a robot vacuum's battery level in an automation, script, or on a dashboard, use the vacuum's battery sensor instead.
This affects the following integrations:
(@gjohansson-ST - #175681, #175684, #175685, #175686, #175687, #175688, #175691, #175764)
Breaking
ScreenLogic
The option to configure the polling interval has been removed from ScreenLogic. Home Assistant now polls the integration at a fixed interval. If you need a different update frequency, you can set your own polling interval or trigger an update with the homeassistant.update_entity action.
Breaking
UniFi Protect
Support for UniFi Protect AI Port devices has been removed. These devices only ever exposed diagnostic sensors, all disabled by default, and are not part of the UniFi Protect public API the integration is moving to. The AI Port device and its sensors are removed automatically when you update. You can still configure the AI Port directly in UniFi Protect.
(@RaHehl - #174378) (UniFi Protect documentation)
Detection scores are no longer available. The detection binary sensors (motion, person, vehicle, animal, and the smart-audio alarm sensors) now take their state from the UniFi Protect public API, which carries no per-event score, so their event_score attribute is gone and automations that filter on it need another condition. The event id and the detected types moved to the new Motion detection, Smart detection, and Sound detection event entities.
(@RaHehl - #174948) (UniFi Protect documentation)
UniFi Protect 7.1 or newer is now required. On an older console the integration reports that the version is too old instead of setting up. Update UniFi Protect to 7.1 or newer to keep using it.
Breaking
Volvo On Call
The Volvo On Call integration has been removed. If you have a supported Volvo, set up the newer Volvo integration instead.
2026.8.1 – 2026.8.3: no action items (3 versions)
2026.9.0 2026-09-02
Quoted from www.home-assistant.io/blog/2026/09/02/release-20269/#backward-incompatible-changes
Breaking
Flexit Nordic (BACnet)
The deprecated fireplace mode switch entity has been removed. If you have automations or scripts that use switch.<device>_fireplace_mode, use the climate.set_preset_mode action on the Flexit climate entity with preset_mode: fireplace instead.
(@magnusoverli - #179272) (Flexit Nordic (BACnet) documentation)
Breaking
KNX
KNX exposes no longer send an entity's first value to the KNX bus. Previously, this depended on timing: if the entity already had a value when the expose was set up, nothing was sent, but if the value arrived later, it was sent to the bus right away.
Now, both cases behave the same way. The first value is adopted locally without sending a telegram, but stays available for read requests and periodic sending. Later value changes are still sent as before.
To send the first value right away, turn on Send on initialization for the expose in the KNX panel, or set send_on_init: true in your YAML configuration.
(@Kolbi - #178793) (KNX documentation)
Breaking
LLM APIs
LLM tool names are now prefixed with the domain of the integration that offers them. For example, GetLiveContext becomes homeassistant__GetLiveContext and HassTurnOn becomes intent__HassTurnOn. If you have a custom prompt that names a tool directly, update it to use the new prefixed name.
Breaking
Persistent Notification
Updating a persistent notification that already exists now triggers an update_type of updated instead of added. If you have an automation that triggers on an update_type of added to catch every new or changed notification, add updated to the list of types it triggers on.
(@davidlang42 - #171067) (Persistent Notification documentation)
Breaking
UniFi Protect
The smart detection switches (for example Detections: Person, Detections: Vehicle, and the audio alarm toggles) are no longer hidden while recording is disabled. They now stay available and follow the same public API as the other camera configuration switches. Their entity IDs and what happens when you toggle them are unchanged.
(@RaHehl - #174963) (UniFi Protect documentation)
UniFi Protect 7.2.105 or newer is now required. On an older version, the integration stops setting up and tells you to update. Update UniFi Protect, then reload the integration.
Breaking
Update
Installing an update, skipping an update, and clearing a skipped update now require an administrator account. These are configuration-level actions, so they are now restricted to admins, like other sensitive actions in Home Assistant.
Automations are not affected, because they run without a user context. A script runs in the context of the user who started it, so a script that installs or skips an update now fails when a non-admin user starts it. Trigger it from an automation instead, or start it as an admin.
Breaking
Vacuum
The deprecated battery_level property has been removed from the base vacuum entity. All core vacuum integrations were already migrated in Home Assistant 2026.8. If a custom integration still sets this property, it no longer reports a battery level; add a separate battery sensor instead.
Breaking
Z-Wave JS
The Z-Wave actions to manage lock users and credentials (set_user, delete_user, delete_all_users, set_credential, delete_credential, and delete_all_credentials) now require an administrator account.
2026.9.1 – 2026.9.4: no action items (4 versions)
Release notes from github.com/home-assistant/core/releases, and the official release blog, checked 18 hours ago. Only text the vendor marks as breaking, or puts in a warning/caution/important note, is shown; read the full notes for anything else. Home Assistant lists its breaking changes in the “Backward-incompatible changes” section of each monthly release post on home-assistant.io (2020.12 onward). Each entry of that section is quoted as “Breaking” on the x.y.0 release, under the integration name the post gives it. The post’s “Farewell to the following” section (integrations removed in that release, 2020.12–2024.5) is quoted whole as “Note”. The post's separate section for custom integration developers is not quoted. Patch releases are listed but their notes (lists of fixes) are not quoted. Versions come from PyPI (package homeassistant).