Home Assistant Core 2025.7.0 → 2026.9.4
70 versions, 131 breaking changes in 14 versions, 0 required stops
Version by version, oldest first
2025.7.1 – 2025.7.4: no action items (4 versions)
2025.8.0 2025-08-06
19 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2025/08/06/release-20258/#backward-incompatible-changes
Breaking
Android Debug Bridge (ADB)
Android Debug Bridge media players entities now report to be off where they previously reported to be in standby state.
If you have automations or scripts that rely on the Android Debug Bridge media player reporting standby state, you will need to update them to use the new off state.
(@emontnemery - #148130) (documentation)
Breaking
Apple TV
Apple TV media players entities now report to be off where they previously reported to be in standby state.
If you have automations or scripts that rely on the Apple TV media player reporting standby state, you will need to update them to use the new off state.
(@emontnemery - #148132) (documentation)
Breaking
Cambridge Audio
Cambridge Audio media players entities now report to be off where they previously reported to be in standby state.
If you have automations or scripts that rely on the Cambridge Audio media player reporting standby state, you will need to update them to use the new off state.
(@emontnemery - #148133) (documentation)
Breaking
Ecovacs
The battery property on vacuum entities is being removed in Home Assistant. Therefore, this property is now removed from this integration and is replaced by a battery level sensor.
Please review your automations, scripts or cards using the battery property and update the code to use the battery sensor instead.
(@mib1185 - #149084) (@edenhaus - #149581) (documentation)
Breaking
Husqvarna Automower
The summary field of calendar events provided by the Husqvarna Automower calendar platform has been updated to include the device name as a prefix. This change improves clarity when multiple mowers are used, but may affect automations relying on the previous summary format.
(@Thomas55555 - #147405) (documentation)
Breaking
LOOKin
LOOKin media players entities now report to be off where they previously reported to be in standby state.
If you have automations or scripts that rely on the LOOKin media player reporting standby state, you will need to update them to use the new off state.
(@emontnemery - #148134) (documentation)
Breaking
Matter
The battery property on vacuum entities is being removed in Home Assistant. Therefore, this property is now removed from this integration and is replaced by a battery level sensor.
Please review your automations, scripts or cards using the battery property and update the code to use the battery sensor instead.
Breaking
Mediaroom
Mediaroom media players entities now report to be off where they previously reported to be in standby state.
If you have automations or scripts that rely on the Mediaroom media player reporting standby state, you will need to update them to use the new off state.
(@emontnemery - #148135) (documentation)
Breaking
Miele
The battery property on vacuum entities is being removed in Home Assistant. Therefore, this property is now removed from this integration and is replaced by a battery level sensor.
Please review your automations, scripts or cards using the battery property and update the code to use the battery sensor instead.
(@astrandb - #148765) (documentation)
Breaking
Reolink
The Reolink Wi-Fi signal strength sensor has changed from an indicator value between 0 and 4 (amount of bars) to a value in dBm between -85 dBm and -30 dBm.
Note that all values in this range are possible, but roughly the old values can be converted like this:
- 0 > -85 dBm
- 1 > -75 dBm
- 2 > -65 dBm
- 3 > -55 dBm
- 4 > -45 dBm
Breaking
Roborock
The battery property on vacuum entities is being removed in Home Assistant. Therefore, this property is now removed from this integration and is replaced by a battery level sensor.
Please review your automations, scripts or cards using the battery property and update the code to use the battery sensor instead.
(@luca-angemi - #150126) (documentation)
Breaking
Roku
Roku media players entities now report to be off where they previously reported to be in standby state.
If you have automations or scripts that rely on the Roku media player reporting standby state, you will need to update them to use the new off state.
(@emontnemery - #148137) (documentation)
Breaking
Snapcast
Snapcast media players entities now report to be off where they previously reported to be in standby state.
If you have automations or scripts that rely on the Snapcast media player reporting standby state, you will need to update them to use the new off state.
(@emontnemery - #148138) (documentation)
Breaking
Sony PlayStation 4
Sony PlayStation 4 media players entities now report to be off where they previously reported to be in standby state.
If you have automations or scripts that rely on the Sony PlayStation 4 media player reporting standby state, you will need to update them to use the new off state.
(@emontnemery - #148136) (documentation)
Breaking
Templates
Returning None from a template binary sensor's state template is now interpreted as unknown state instead of as off state.
If this behavior is not desired, you need to adjust your templates to return False explicitly.
(@epenet - #128861) (documentation)
Breaking
Tuya
The battery property on vacuum entities is being removed in Home Assistant. Therefore, this property is now removed from this integration and is replaced by a battery level sensor.
Please review your automations, scripts or cards using the battery property and update the code to use the battery sensor instead.
(@epenet - #150086) (documentation)
Breaking
UniFi Protect
Support for UniFi Protect installations running on versions below 6.0.0 has been removed.
This change is necessary as we are migrating the Home Assistant integration to use the new UniFi Protect Public API, which is only available in current versions.
If you are running an older version of UniFi Protect, you will need to upgrade to at least version 6.0.0 in order to continue using this integration.
You can read more about the 6.0 release in Ubiquiti’s official blog post: 🔗 Introducing Protect 6.0
Note on future updates: The Public API is still under active development and may change over time. As we continue to migrate more features of the integration to use the Public API, it is likely that the minimum required version of UniFi Protect will increase further in upcoming Home Assistant releases. We will make these changes step by step as the API evolves and new capabilities become available.
What do I need to do?
Upgrade your UniFi Protect installation to version 6.0.0 or later.
Be prepared for possible further minimum version increases in the future.
If you are already using version 6.0.0 or newer, and the user in use has sufficient permissions, the integration will attempt to automatically create a new API key. If this succeeds, no further action is required. If it fails, a reauthentication will be triggered, requiring you to re-enter your password and provide your API key manually.
(@RaHehl - #149126) (documentation)
Breaking
Whirlpool Appliances
The door state for washer/dryer machines is now reported as a binary sensor instead of being part of the main machine state sensor, which now reports only the cycle states. Users relying on this state in automations or scripts will need to update their configurations to use the new binary sensor.
(@abmantis - #144078) (documentation)
Breaking
Z-Wave
With this release, you will need to update your zwave-js-server instance. You must use zwave-js-server 3.2.1 or greater (schema 44).
- If you use the Z-Wave JS add-on, you need at least version 0.20.0.
- If you use the Z-Wave JS UI add-on, you need at least version 4.8.0.
- If you use the Z-Wave JS UI Docker container, you need at least version 10.11.0.
- If you run your own Docker container or some other installation method, you will need to update your zwave-js-server instance to at least 3.2.1.
2025.8.1 – 2025.8.3: no action items (3 versions)
2025.9.0 2025-09-03
8 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2025/09/03/release-20259/#backward-incompatible-changes
Breaking
Encoding units containing the μ character
The encoding for some units that contain the μ character has been changed. Users that consume state data from sensors that have changed units will be impacted (such as exported state data to InfluxDB). The units with a changed encoding are:
μSv/hfor thearanetintegration as a unit for radiation rateμS/cmforUnitOfConductivity.MICROSIEMENS_PER_CMμVforUnitOfElectricPotential.MICROVOLTμg/ft³for concentration in micrograms per cubic footμg/m³for concentration in micrograms per cubic meterμmol/s⋅m²for thefytaintegration as a unit for lightμgforUnitOfMass.MICROGRAMSμsforUnitOfTime.MICROSECONDS
Breaking
1-Wire
The raw_value attribute was previously deprecated and has now been removed.
Breaking
Alexa Devices
The sound list has been updated to match the one used by the Alexa Mobile app. The variant parameter is no longer required.
Check your automations to ensure the selected sound is still present.
(@chemelli74 - #151317) (documentation)
Breaking
Husqvarna Automower BLE
The integration now requires the Automower PIN when being set up. This ensures Home Assistant can communicate with more models of mowers and with higher security levels.
(@alistair23 - #135440) (documentation)
Breaking
KNX
KNX scene entities now also change their state when a scene was activated externally (from bus). Previously they only updated when activated from within Home Assistant.
(@farmio - #151218) (documentation)
Breaking
SIA Alarm Systems
SIA alarm status code CF (armed with malfunctions) is now mapped to armed_away instead of to armed_custom_bypass.
(@etnoy - #132628) (documentation)
Breaking
SwitchBot Bluetooth
The battery property on vacuum entities is being removed in Home Assistant. Therefore, this property is now removed from this integration and is replaced by a battery level sensor.
Please review your automations, scripts, and dashboards using the battery property and update the code to use the battery sensor instead.
Breaking
Yale August
The August integration now uses OAuth authentication with Yale August's official API. This is a required one-time breaking change as the unofficial authentication method will stop working soon. This migration helps reduce unnecessary load on Yale August's servers while ensuring continued access for all users.
When you update Home Assistant, you'll be prompted to re-authenticate your August account:
- Select the notification or go to Settings → Devices & services → August
- Select "Reconfigure" and follow the OAuth flow to sign in
- Once authenticated, your devices will work exactly as before
We're grateful to Yale August for officially supporting Home Assistant with dedicated API access!
(@bdraco - #151080) (documentation)
2025.9.1 – 2025.9.4: no action items (4 versions)
2025.10.0 2025-10-01
10 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2025/10/01/release-202510/#backward-incompatible-changes
Breaking
Targeting labels in automations and scripts
Configuration and diagnostic entities with a label assigned to them will now be targeted/affected by service actions targeting that label. Previously, those entity categories were ignored on service action calls targeting labels.
If you have an automation or script with an action targeting a label, make sure that only entities that should be affected have that label assigned, even if they are config or diagnostic entities.
(@abmantis - #149309) (labels docs)
Breaking
HERE Travel Time
HERE deprecated the previous free tier. The new Base Plan has 5000 free requests per month. The automatic update interval of the HERE Travel Time integration changed from 5 minutes to 30 minutes, so one route can be supported without costs.
Breaking
Home Connect
The Home Connect Alarm clock entity has been removed from the time platform, please use the number entity instead.
Breaking
Shelly
Removed previously deprecated extra attributes, please review your automations.
Shelly Gas:
- The Detected attribute of the Gas entity has been removed, the Gas detected entity should be used instead.
- The Self test attribute of the Operation entity has been removed, the Self test entity should be used instead.
Shelly Air:
- The Operational hours of the Lamp Life entity has been removed, if you still want that info please use a template entity.
(@chemelli74 - #140386) (shelly docs)
Breaking
Slide Local
The effect of the property "invert position" is extended from the position itself to the status (open or closed). With this adjustment, it is no longer necessary to use cover templates to invert the position to correct the status. If you have covers with inverted position and are using the state in automations, you must adjust the automations accordingly.
Breaking
SmartThings
The windFree preset mode for the air conditioner has been renamed to wind_free to allow translation to happen. Please adapt automations accordingly.
(@joostlek - #152833) (smartthings docs)
Breaking
Tibber
Switch Tibber electricity pricing to 15-minute intervals.
- The
tibber.get_pricesaction now returns 15-minute data instead of hourly. - The
price_levelattribute is removed and no longer supported. - The
intraday_price_rankingattribute is now scaled to (0,1) to better support 15-minute prices.
Breaking
Zabbix
We removed official support for Zabbix 5.0 from the integration. While this does not directly break connections to Zabbix 5.0, future updates will not check for compatibility with this version. Note that Zabbix 5 LTS left its support window in May of 2025.
(@nolsto - #149450) (zabbix docs)
Breaking
Breaking
ZhongHong
ZhongHong's climate entities set_fan_mode action behavior has changed.
The fan mode values are now converted to lowercase instead of uppercase to ensure compliance with the standard convention.
If you have automations relying on uppercase fan mode values, you will need to update them to use lowercase values instead.
(@Blear - #151559) (zhong_hong docs)
2025.10.1 – 2025.10.4: no action items (4 versions)
2025.11.0 2025-11-05
12 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2025/11/05/release-202511/#backward-incompatible-changes
Breaking
Set assumed state to group if at least one child has assumed state
Previously, the group’s assumed state was always false, regardless of the state of its child entities.
This has now changed:
The group will now have an assumed state of true if at least one child entity has an assumed state. This makes the group's assumed state reflect the uncertainty of its children more accurately. These domains have been added: switch, fan, light, and cover.
(@piitaya - #154163) (group docs)
Breaking
Asuswrt
The last_time_reachable attribute has been removed from the asuswrt device tracker. Use the last_changed attribute instead in your automations.
(@ollo69 - #154219) (asuswrt docs)
Breaking
LG webOS TV
The state of LG webOS TV media player entities that do not have an automation trigger to turn on the device will be set to unavailable instead of off.
(@thecode - #155164) (webostv docs)
Breaking
Mealie
The mealie integration now requires Mealie version 2 or later.
Mealie version 1 is no longer supported. Version 2 was released in October 2024, so over a year ago. Given the differences between versions 1 and 2, we are no longer able to support or test backward compatibility with version 1.
Breaking
Motion Blinds
The tilt position of motion_blinds devices has been corrected to align with the Home Assistant standards. The new tilt position will be: 0 = closed/covering the window opening, 100 = open/letting light through. The previous tilt position can be converted to the new tilt position as follows:
new=100 - oldcurrent_tilt_position=100 -> 0current_tilt_position=75 -> 25current_tilt_position=50 -> 50current_tilt_position=25 -> 75current_tilt_position=0 -> 100open_cover_tilt->close_cover_tiltclose_cover_tilt->open_cover_tilt
Any automations concerning Motion Blinds devices that use the current_tilt_position attribute or use tilt open/close will need to be adjusted.
Breaking
Mobile app
The mobile_app integration, which supports the iPhone and Android companion apps, now handles zone-only updates better. When your companion app sends just the zone name (not the exact coordinates), the device tracker will show the zone's friendly name.
The person entity now shows the zone's friendly name (not its object ID) for custom zones. This might break existing automations that trigger on a person's state.
As an example, if you have a zone named zone.kids_school with the friendly name School:
- Before this change, the state of the corresponding
personanddevice_trackerentities would bekids_schoolwhen the "Location Sent" in the companion app was set to send "Zone Name Only" andSchoolwhen it was set to "Exact". - After this change, the state of the corresponding
personanddevice_trackerentities will beSchoolfor both the "Location Sent" settings in the companion app.
(@Ashus - #149453) (mobile_app docs)
Breaking
Nederlandse Spoorwegen
The Nederlandse Spoorwegen entity is now displayed as a timestamp entity, rather than a string. Please adapt your automations and scripts.
Breaking
ONVIF
The Speed parameter in the ONVIF GoToPreset action is now optional.
The default of 0.5 is no longer set. If you want to restore the previous behavior you have to set speed to 0.5 in your action.
Breaking
OralB
In the OralB integration, states and attributes have changed.
In multiple places, spaces have been replaced with underscores:
- Toothbrush state:
flight menu→flight_menuselection menu→selection_menufinal test→final_testpcb test→pcb_test
- Brushing mode:
daily clean→daily_cleangum care→gum_caretongue cleaning→tongue_cleaningsuper sensitive→super_sensitivedeep clean→deep_clean
- Pressure:
power button pressed→power_button_pressedbutton pressed→button_pressed
- Sector:
no sector→no_sectorsector 1→sector_1sector 2→sector_2sector 3→sector_3sector 4→sector_4
Automations should be updated to use the new states and attributes.
(@tr4nt0r - #153605) (oralb docs)
Breaking
Renault
The discovery of Renault functionality was previously based on assumptions that may have created invalid and non-functional entities. These will no longer be created.
(@epenet - #154137) (renault docs)
Breaking
Traccar Server
The Traccar integration has been updated to use a more secure API Token for authentication. This is a required, one-time breaking change to align with Traccar's security recommendations and ensure the integration continues to work.
This release migrates the integration away from the older username/password method, ensuring continued stability and security for all users while also allowing users with SSO-based setups to use the integration.
When you update Home Assistant, the existing Traccar integration will need to be re-authenticated:
- Generate an API Token on your Traccar server (you'll find this option in your Traccar server's user settings).
- Go to Settings > Devices & services > Traccar Server.
- Click "Reconfigure" and enter your new API Token when prompted.
Once you've done this, your Traccar devices and entities will work exactly as they did before.
Breaking
Xbox
The Account tier and Gold tenure sensors have been retired, as they no longer receive updates following the transition from Xbox Live Gold to Xbox Game Pass. Additionally, the In party and In multiplayer binary sensors have been removed, since they’ve been non-functional for quite some time.
2025.11.1 – 2025.11.3: no action items (3 versions)
2025.12.0 2025-12-03
6 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2025/12/03/release-202512/#backward-incompatible-changes
Breaking
Core and Supervised installation methods, and 32-bit systems
After a 6-month deprecation period, support for the Home Assistant Core and Home Assistant Supervised installation methods, as well as all 32-bit system architectures (i386, armhf, and armv7), has now been fully removed.
These installation methods and architectures will no longer receive updates, including security updates. If you are still using one of these installation methods or architectures, please migrate to a supported installation method and architecture as soon as possible to continue receiving updates and support.
For more information on this change, read the Deprecating Core and Supervised installation methods, and 32-bit systems blog post.
Breaking
Breaking
Breaking
go2rtc
It is now required to set a username and password when enabling the debug UI.
(@edenhaus - #157008) (go2rtc docs)
Breaking
UniFi Protect
The legacy license plate event sensor has been removed from the UniFi Protect integration, as it no longer functions with Protect 6 and newer. The UniFi Protect integration has not been compatible with Protect versions older than 6 for quite some time.
This sensor has been replaced with a new Vehicle Detection Event entity that provides significantly more functionality, including license plate recognition, vehicle type detection, color detection, and confidence scores. The new event entity fires with a 3-second delay to ensure optimal thumbnail and LPR data quality.
For more information and automation examples, see the Vehicle Detection Event documentation.
Breaking
Xbox
- The Xbox media browser has been completely overhauled to support multiple accounts and introduce a range of other improvements. As part of this update, the format of the media-source identifiers has been changed as well.
- The following and followers sensors introduced in the last release previously included friends in their counts. After a recent API update, friends are no longer included.
2025.12.1 – 2025.12.5: no action items (5 versions)
2026.1.0 2026-01-07
5 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2026/01/07/release-20261/#backward-incompatible-changes
Breaking
Coolmaster
The climate entities provided by the Coolmaster integration now use medium for the medium fan mode; before this change, it was med. If your automations are using med when setting or querying the fan speed, you'll have to change it to medium.
Breaking
Tailscale
The "Supports hairpinning" binary sensor has been removed from the Tailscale integration. According to the official Tailscale API documentation, this information is no longer tracked and will always return null.
Breaking
UniFi Protect
Select entity state values have been changed from their original mixed-case format to snake_case format with proper translations. This improves consistency and enables proper localization support.
Affected select entities include: chime type, recording mode, infrared mode, status light mode, HDR mode, doorbell text, LCD message, and others.
Example changes:
- Chime type:
Mechanical→mechanical,Digital→digital - Recording mode:
Always→always,Detections→detections,Never→never - Infrared mode:
Auto→auto,On→on,AutoNoLEDsOn→auto_no_leds_on - Status light mode:
On→on,Off→off,OnWhenDark→on_when_dark - HDR mode:
Auto→auto,On→on,Off→off
If you have automations, scripts, or templates that check or set the state of UniFi Protect select entities, you need to update them to use the new snake_case values. The UI will continue to display properly translated, human-readable text.
(@RaHehl - #159284) (unifiprotect docs)
Breaking
Telegram bot
Allowing extra/unused parameters has been removed from the action for Telegram bot. Only users who have used undefined parameters for Telegram bot actions are affected. If you are affected, remove such parameters from your automations and scripts. Supported parameters can be found in the Telegram bot notification actions documentation.
(@hanwg - #158886) (telegram_bot docs)
Breaking
VeSync
The advancedSleep fan mode has been changed to advanced_sleep. If you have automations or scripts using this fan mode, please update them accordingly.
(@cdnninja - #158956) (vesync docs)
2026.1.1 – 2026.1.3: no action items (3 versions)
2026.2.0 2026-02-04
5 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2026/02/04/release-20262/#backward-incompatible-changes
Breaking
Group
The behavior of sensor groups has changed:
- A sensor group is now unavailable if all group members are either unavailable or missing (meaning they are not in the state machine).
- When the group is not considered unavailable and the configuration variable
ignore_non_numericis set toFalse(the default), the group state is calculated according to the configured type only if all group members are in the state machine and have a numeric state. If not, the group state will be unknown.
Breaking
Sentry
Self-hosted Sentry users only: This upgrade requires Sentry server version 20.6.0 or later (released June 2020) due to the SDK's use of the /envelope API endpoint. Users running older self-hosted Sentry instances must upgrade their server before updating Home Assistant.
Home Assistant users using sentry.io are not affected.
Breaking
Tractive
The following sensors have been removed because they are no longer supported by the Tractive API:
activitycalories burnedsleep
If you use these entities in your automations or scripts, you must update them.
Breaking
Tuya
Duplicate HVACMode have been converted to presets. You may need to adjust service calls from set_hvac_mode to set_preset_mode in your automations or scripts.
(@epenet - #160918) (tuya documentation)
Breaking
VeSync
The advanced_sleep preset mode is now replaced by sleep. If you have been using advanced_sleep, in your automations or scripts, you must update them to use sleep instead.
2026.2.1 – 2026.2.3: no action items (3 versions)
2026.3.0 2026-03-04
10 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2026/03/04/release-20263/#backward-incompatible-changes
Breaking
BSB-Lan
The water heater operation mode state on has been changed to performance for the BSB-Lan water heater. If you use this state in your automations or scripts, you will need to update them to use the new state value.
Breaking
Container image
Home Assistant container images are now compressed with zstd instead of gzip. This change is supported on Docker 23.0.0 and later, and containerd 1.5.0 and later, so it is not expected to break installations that meet these minimum versions. If your environment uses an older Docker or containerd version, make sure your container runtime supports zstd before updating.
Breaking
LIFX
Passing the color_temp parameter (in mireds) to the lifx.effect_pulse action is no longer allowed. Use the color_temp_kelvin parameter instead.
Breaking
Lights
Using color_temp (in mireds) to set a light's color temperature is no longer supported. Use color_temp_kelvin instead.
Additionally, the color_temp, kelvin, min_mireds, and max_mireds light entity state attributes have been removed. Use color_temp_kelvin, min_color_temp_kelvin, and max_color_temp_kelvin instead.
Breaking
Satel Integra
Binary sensors and switches now have an initial state of unknown while the alarm panel is still reporting all states during startup. Previously, the default state was off, which was incorrect, as no data had been received from the panel yet.
The chance that you are impacted is low, as most states are reported before Home Assistant fully finishes setup; but this might occur on larger installations and slower connections.
Breaking
Snapcast
Media player entities for Snapcast groups have been removed. Additionally, the Snapcast-specific grouping actions have been removed. If you use these entities or actions in your automations or scripts, you will need to update them.
Breaking
StarLine
The ignition and autostart state attributes of the engine switch have been removed. Two new binary sensors have been introduced to replace them. If you reference these attributes in your automations or scripts, update them to use the new binary sensor entities instead.
Breaking
Tado
Mobile device tracking has been removed from the Tado integration. Mobile devices and their associated device tracker entities are no longer available. This change resolves re-authentication issues and reduces unnecessary load on the Tado API.
Breaking
Template
The behavior of template fans has changed:
- A template fan's state will be
unavailableif thestatetemplate encounters a syntax error. Previously, a template error would show the fan's state asoff. - The
percentageattribute will beNoneif thepercentagetemplate encounters a syntax error. Previously, it would be0. - Template fans can now have the
unknownstate. Astatetemplate that returnsNonewill render the entity asunknowninstead ofoff.
Breaking
Z-Wave
Percentage speeds reported by Z-Wave fans have been corrected to align with other integrations. As a result, values may differ slightly. For example, a value previously reported as 67% may now appear as 66%. If you have automations that trigger on exact percentage values, you may need to adjust them.
2026.3.1 – 2026.3.4: no action items (4 versions)
2026.4.0 2026-04-01
8 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2026/04/01/release-20264/#backward-incompatible-changes
Breaking
JVC Projector
The Picture Mode and HDR Processing entities have been migrated from the sensor domain to the select domain, because they represent selectable settings rather than read-only values.
New entities:
select.jvc_projector_picture_modeselect.jvc_projector_hdr_processing
The legacy sensor entities are now deprecated. If a deprecated sensor is disabled and not referenced by automations or scripts, Home Assistant will remove it from the entity registry. If usage is detected, Home Assistant keeps it and shows a repair issue to help you migrate. Update your automations, scripts, dashboards, and templates to use the new select entities.
Breaking
Litter-Robot
The deprecated night light mode switch entity for Litter-Robot 4 devices has been removed. This switch was replaced by a select entity in Home Assistant 2025.10. If you still use the old switch entity in your automations or scripts, update them to use the select entity instead.
Breaking
Motion Blinds
On devices that support tilt but do not report a tilt position, the tilt open and tilt close operations now send jog up and jog down commands instead of setting the tilt angle to 0° or 180°. Setting an absolute tilt position usually didn't work on these devices anyway, and jog commands provide a meaningful small step in the intended direction.
If you have automations that rely on the previous tilt behavior for these devices, you may need to adjust them.
Breaking
MQTT
Support for the object_id option has been removed after 6 months of deprecation. This option was used to suggest the entity ID for an MQTT entity and has been replaced by the default_entity_id configuration option.
If you used object_id in your MQTT YAML configuration, you were previously asked via a repair flow to update your configuration. If object_id is still part of a discovery message, the option will simply be ignored and will not break discovery.
(@jbouwh - #164460) (MQTT documentation)
Breaking
pyLoad
pyLoad 0.4.x is now deprecated, and you should switch to pyLoad-ng 0.5.0. pyLoad-ng introduced a new API, and support for the old API has been dropped.
Breaking
Roth Touchline
The preset mode names for the Roth Touchline climate entities have been updated to use standard Home Assistant preset names, making them translatable. If you have automations or scripts that reference the old preset mode names, update them to use the new names:
Normal→noneNight→sleepHoliday→awayPro 1→program_1Pro 2→program_2Pro 3→program_3
Breaking
Tuya
Previously deprecated switch entities used to control valves have been removed. Use the valve entities instead. If you have automations or scripts that reference these switch entities, update them to use the corresponding valve entities.
(@epenet - #164657) (Tuya documentation)
Breaking
Z-Wave
The Z-Wave Installer panel has been removed. This panel was hidden and required an undocumented YAML configuration to enable. The same functionality is now natively available through Z-Wave JS UI in the Z-Wave app.
2026.4.1 – 2026.4.4: no action items (4 versions)
2026.5.0 2026-05-06
6 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2026/05/06/release-20265/#backward-incompatible-changes
Breaking
Purpose-specific triggers and conditions
When we first introduced purpose-specific triggers and conditions, we added separate ones for Person entities and Device Tracker entities. Since then, we've decided to take a more ergonomic, cross-domain approach instead.
As a result, the entered home and left home triggers, and the is home and is not home conditions, have been removed from Person and Device Tracker. Replacements that work across both will land in an upcoming release.
If you have automations that use these triggers or conditions on a person or device tracker, switch them back to a regular state trigger or state condition (for example, state changed to home) until the cross-domain replacements arrive.
(@emontnemery - #168406)
Breaking
Gardena Bluetooth
The "finish watering" value in the Gardena Bluetooth integration has been moved from a binary sensor to a regular sensor that exposes the timestamp of when watering is expected to finish. This makes the value far more useful in dashboards and automations.
If you have automations, scripts, or dashboards that reference the previous binary sensor entity, update them to use the new sensor entity instead.
Breaking
pilight
The pilight integration has been disabled because the underlying pilight library relies on setuptools.pkg_resources, which is no longer available in setuptools 82.0.0 and later.
If the library is updated to remove the setuptools.pkg_resources dependency, or replaced with a maintained alternative that does so, the integration can be activated again. Community contributions to make this happen are very welcome.
Breaking
Ring
The Ring doorbell event entity now emits the standardized ring event type instead of the legacy ding. This change aligns Ring with the new doorbell event standard, so the entity can be used seamlessly with the new purpose-specific automation triggers and conditions.
If you have automations that listen for the ding event type from your Ring doorbell, update them to use ring instead.
Breaking
Supervisor
Previously, all actions registered by the Supervisor integration (such as hassio.addon_start, hassio.backup_partial, and hassio.host_reboot) only logged an error on failure, and your script or automation would continue running regardless of whether the action succeeded.
These actions now properly raise on failure, which means your automation or script will stop unless continue_on_error is set to true. If you rely on the previous behavior, add continue_on_error: true to those action steps.
Breaking
Webhook
The local_only option on webhooks must now be a proper boolean (true or false). Previously, other truthy values like 1 or "yes" were silently accepted. This brings the option in line with the rest of Home Assistant.
If you have webhooks configured in YAML with non-boolean local_only values, update them to use true or false.
2026.5.1 – 2026.5.4: no action items (4 versions)
2026.6.0 2026-06-03
12 Breaking — show quotes
Quoted from www.home-assistant.io/blog/2026/06/03/release-20266/#backward-incompatible-changes
Breaking
Purpose-specific triggers (Labs)
The behavior options for the Labs purpose-specific triggers have been renamed to better match what they do: any is now each, and last is now all. The default is now each.
If you have automations that use these triggers from the Labs preview at Settings > System > Labs, open them in the automation editor and re-pick the behavior option. Any YAML you wrote against the old keys needs to be updated to the new names.
(@emontnemery - #172348)
Breaking
Bluetooth
The default Bluetooth scanning mode has changed to Auto, which dynamically switches between active and passive scanning depending on what is happening. This saves around 95-96% of the battery used for Bluetooth scanning while keeping the same functionality for most setups.
If you run into issues after the upgrade, you can switch your Bluetooth adapter back to Active scanning. Go to Settings > Devices & services, open the Bluetooth integration, and select Configure on your adapter to change the scanning mode.
Breaking
Certificate Expiry
The error attribute on the certificate expiry sensor now returns a proper None value instead of the string "None" when there is no error.
If you use this attribute in templates, update your comparisons from == "None" to is none.
Breaking
ESPHome
The default Bluetooth proxy scanning mode for ESPHome devices is now Auto. Devices that were previously set to Active are automatically migrated to Auto, while devices set to Passive keep their setting.
If you need Active scanning for a specific device, change it back in the device options under Settings > Devices & services.
Breaking
HDMI-CEC
Calling the turn_off action on HDMI-CEC switch or media player entities now sends the standard CEC standby command instead of a vendor-specific power-off command. This works more reliably across devices from different manufacturers.
If you relied on the previous behavior, you can send the original command using the hdmi_cec.send_command action with keypress 0x44 followed by 0x6c.
Breaking
IronOS
The uptime sensor for IronOS soldering irons has changed from a duration sensor (reporting seconds) to a timestamp sensor that reports when the device was started.
Update any automations or dashboards that read this sensor to work with the new timestamp format.
Breaking
ONVIF
When you call the onvif.ptz action with continuous_duration: 0, the integration no longer sends a Stop command after the ContinuousMove. This lets you start a continuous movement and stop it later with a separate call.
If your automations rely on the camera stopping automatically, set continuous_duration to the desired duration in seconds.
(@yoxcu - #163173) (ONVIF documentation)
Breaking
Shelly
Shelly devices used as Bluetooth scanners now support the new Auto scanning mode. Existing devices set to Active are automatically migrated to Auto for better battery and performance.
You can change the scanning mode back in the device options under Settings > Devices & services.
Breaking
SmartThings
The source attribute on SmartThings media players is now normalized to standard Home Assistant values. For example, D.IN is now reported as digital_input and BT as bluetooth.
If you use the source attribute in automations, dashboards, or templates, update them to match the new values.
Breaking
Template entities
The legacy template platform syntax under the individual platform keys has been removed. This syntax was deprecated in Home Assistant 2025.12 and has now reached the end of its 6-month deprecation period.
This affects the following platforms:
alarm_control_panelbinary_sensorcoverfanlightlocksensorswitchvacuumweather
Move your template entities to the modern template: syntax. A step-by-step migration guide is available in the Removal of legacy template entities forum thread.
(@Petro31 - #169608, #169610, #169611, #169613, #169615, #169725, #169728, #169730, #169732, #169734) (Template documentation)
Breaking
Tuya
The unit of measurement provided by the Tuya API now takes precedence over the default unit assigned by Home Assistant. This makes the reported value match what the Tuya app shows.
If your device reports an invalid or unexpected unit, please submit a bug report with the device details and the unit it reports and adjust it accordingly.
(@epenet - #170338) (Tuya documentation)
Breaking
Velux
The deprecated velux.reboot_gateway action has been removed. Use the reboot button entity on your Velux gateway instead.
2026.6.1 – 2026.6.4: no action items (4 versions)
2026.7.0 2026-07-01
13 Breaking — show quotes
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
9 Breaking — show quotes
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
8 Breaking — show quotes
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).