Full changelog for Home Assistant 2026.11
These are all the changes included in the Home Assistant 2026.11 release. For a summary in a more readable format Release notes blog for this release.
All changes
Backend
0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z · Other changes
0-9
1-Wire
- Bump aio-ownet to 0.1.0 (@epenet - #183900)
- Raise translated errors from onewire actions (@epenet - #183917)
- Fix onewire setup with devices missing a type (@epenet - #183973)
- Improve handling of owserver errors in onewire (@epenet - #183915)
- Add exception translation for onewire setup failure (@epenet - #186767)
- Mark onewire entities unavailable when reading fails (@epenet - #186766)
- Allow removing onewire devices disconnected since setup (@epenet - #186768)
- Mark onewire documentation quality scale rules as done (@epenet - #187149)
- Set onewire quality scale to platinum (@epenet - #187211)
- Add 1-Wire connectivity metadata to integrations (@balloob - #189911)
17TRACK
A
A. O. Smith
- Group sequential async_add_entities calls in A. O. Smith (@joostlek - #187517)
- Pass a DeviceInfo to async_get_or_create_device (@epenet - #187536)
abetterrouteplanner
- Add A Better Routeplanner integration (@mtandersson - #174058)
Abode
- Fix entity removal leaks in abode (@emontnemery - #183860)
- Adapt abode to in-place entity ID change (@emontnemery - #184856)
- Fix flaky abode test_add_unique_id teardown (@balloob - #187053)
- Remove compatibility re-exports for pytest-home-assistant (@balloob - #187271)
- Fix delayed Abode alarm state updates after commands (@sparment - #185739)
Acaia
- Document queued Acaia button actions (@zweckj - #184024)
- Remove compatibility re-exports for pytest-home-assistant (@balloob - #187271)
AccuWeather
- Remove redundant wind speed translation key from AccuWeather (@frenck - #185277)
- Use
LocationSelectorin Accuweather config flow (@tr4nt0r - #188118)
Activity
- Move logbook log_entry helpers to helpers module (@epenet - #184648)
- Move logbook service registration to services module (@epenet - #184880)
- Add the run to automation triggered and script started events (@Xyolyp - #184957)
- Define public names of the logbook integration (@epenet - #187174)
- Import the sensor domain directly in logbook helpers (@epenet - #187310)
- Add logbook websocket command to get action calls (@joostlek - #187344)
- Add action enums to logbook (@epenet - #189283)
Actron Air
AdGuard Home
- Bump adguardhome to 1.0.0 (@frenck - #184349)
- Add reauthentication to AdGuard Home (@frenck - #184513)
- Move adguard service registration to services module (@epenet - #184649)
- Report AdGuard Home sensor values as numbers with a state class (@frenck - #184785)
- Raise translated errors from the AdGuard Home actions (@frenck - #184531)
- Use data update coordinators for AdGuard Home (@frenck - #184818)
- Identify AdGuard Home entities by their config entry (@frenck - #185681)
- Add exception translations to AdGuard Home (@joostlek - #189025)
- Add diagnostics to AdGuard Home (@joostlek - #189118)
- Add reconfigure flow to AdGuard Home (@joostlek - #189091)
ADS
Advantage Air
- Pass a DeviceInfo to async_get_or_create_device (@epenet - #187536)
- Fall back to mid when Advantage Air tablet reports no rid (@Bre77 - #185939)
AEMET OpenData
- Raise ConfigEntryError when town not found in aemet (@gjohansson-ST - #184974)
- Remove name field from
aemetconfig flow (@tr4nt0r - #188113) - Use
LocationSelectorin AEMET integration (@tr4nt0r - #188114)
aerosmart
- Add aerosmart integration (@kayloehmann - #186273)
- Fix aerosmart polling after general timeout (@kayloehmann - #189475)
Agent DVR
AI Task
- Add clear images action to AI Task (@erwindouna - #183556)
- AI task generation permissions (@balloob - #185004)
- Add evaluation tasks to AI Task (@balloobbot - #184952)
- Raise translated ServiceValidationErrors in AI Task (@joostlek - #186313)
- Reuse the LLM API instance and system prompt between turns (@balloob - #188523)
AiDot
- Add effect list to Aidot lights (@s1eedz - #182972)
- Add reauthentication flow to AiDot (@joostlek - #186395)
Air quality
- Add air_quality radon condition (@abmantis - #184936)
- Add air_quality radon triggers (@abmantis - #184935)
- Define public names of the air_quality integration (@epenet - #186375)
- Move air_quality entity classes to entity module (@epenet - #186817)
- Migrate air quality entity attributes to StrEnum (@epenet - #188745)
air-Q
- Construct DeviceInfo with device info fields only in airq tests (@epenet - #185269)
- Use typed config entry in air-Q coordinator (@frenck - #185362)
- Add particle count and typical particle size sensors to air-Q (@neuffer - #179216)
- Use DeviceInfo attributes in airq (@epenet - #186590)
AirGradient
- Bump airgradient to 0.11.0 (@samuelbles07 - #186517)
- Add altitude unit configuration to AirGradient (@samuelbles07 - #187589)
Airly
- Add reconfigure flow for Airly (@bieniu - #184534)
- Assert config flow unique_id in Airly tests (@bieniu - #185215)
- Update IQS to gold for Airly integration (@bieniu - #185784)
- Use
LocationSelectorin Airly config flow (@tr4nt0r - #188122)
AirNow
- Add reauthentication flow to AirNow (@joostlek - #186390)
- Use
LocationSelectorin Airnow config flow (@tr4nt0r - #188130)
Airobot
- Use freezer instead of coordinator refresh in airobot tests (@erwindouna - #185092)
Airthings
- Bump airthings-cloud to 0.3.1 (@LaStrada - #187983)
- Mark Airthings sensors unavailable when the device is missing (@LaStrada - #188009)
Airthings BLE
- Remove airthings_ble unique_id migration from 2023.9 (@LaStrada - #184449)
- Improve Airthings BLE config flow test coverage (@LaStrada - #184497)
- Improve Airthings BLE coordinator test coverage (@LaStrada - #184496)
- Show Airthings BLE sensors as unknown if a sensor value is missing (@LaStrada - #185737)
- Improve Airthings BLE sensor test coverage (@LaStrada - #185736)
- Show issue for Airthings BLE devices not configured to use Bluetooth (@LaStrada - #185733)
- Add radon 7-day, 30-day and 1-year averages to Airthings BLE (@jonnybergdahl - #188551)
- Remove duplicate Airthings BLE devices left by incomplete reads (@joostlek - #189324)
AirTouch 4
AirTouch 5
AirVisual Cloud
- Raise ConfigEntryError for migrated Pro entries in airvisual (@gjohansson-ST - #184975)
AirVisual Pro
- Pass the airvisual_pro device model as a string (@gjohansson-ST - #190082)
Airzone
- Add Airzone heat stage select (@wit3 - #188371)
- Update Airzone select snapshot to the registry entry format (@joostlek - #188924)
Alarm control panel
- Define public names of the alarm_control_panel integration (@epenet - #186440)
- Move alarm_control_panel entity classes to entity module (@epenet - #186824)
AlarmDecoder
- Raise instead of returning False when unloading AlarmDecoder (@gjohansson-ST - #186223)
- Fix duplicated word in AlarmDecoder zone select description (@VitorCoelho - #187603)
- Add reconfigure flow to AlarmDecoder (@pleasantone - #187945)
Alert
- Move alert service registration to services module (@epenet - #184846)
- Define public names of the alert integration (@epenet - #187766)
- Fix alert repeat delay across DST fall back (@7hemas7er - #188537)
Alexa Devices
- Use TextSelectors in Alexa Devices (@chemelli74 - #184032)
- Bump aioamazondevices to 16.8.1 (@jamesonuk - #187332)
- bump aioamazondevices to 16.9.1 (@jamesonuk - #187985)
- Add features to diagnostics for Alexa Devices (@jamesonuk - #188056)
- Enable notifiers to have a title in Alexa Devices (@jamesonuk - #188072)
- Bump aioamazondevices to 16.11.3 (@chemelli74 - #188387)
- Bump aioamazondevices to 17.0.0 (@chemelli74 - #188560)
- Bump aioamazondevices to 17.2.0 (@chemelli74 - #188567)
- Add primary display category to diagnostics for Alexa Devices (@jamesonuk - #188574)
- refactor switches in Alexa Devices (@jamesonuk - #188619)
- Bump aioamazondevices to 17.2.3 (@jamesonuk - #188761)
- Create entities from features in Alexa Devices (@jamesonuk - #188572)
- Use a dedicated HTTP/2 client per config entry in Alexa Devices (@chemelli74 - #188506)
- Add AQM LED switch in Alexa Devices (@jamesonuk - #188679)
- Add Echo Glow light support to Alexa Devices (@chemelli74 - #188577)
- Bump aioamazondevices to 17.2.4 (@jamesonuk - #190086)
Alpha Bidet Infrared
- Add Alpha Bidet Infrared integration (@eseverson - #183065)
- Add select platform to Alpha Bidet Infrared (@eseverson - #187409)
- Return None from config entry methods in Alpha Bidet Infrared (@gjohansson-ST - #187724)
- Restore the Alpha Bidet select level when unavailable at shutdown (@eseverson - #188105)
- Add Alpha bidet infrared reconfigure flow (@eseverson - #188106)
Amazon Alexa
- Preserve pre-migration entity names as aliases in voice assistants (@arturpragacz - #184341)
- Define public names of the alexa integration (@epenet - #187153)
- Fix alexa AdjustRangeValue reading wrong position attributes (@epenet - #188059)
- Fix alexa light color temperature property reading removed attribute (@epenet - #188060)
- Fix alexa vacuum hold and resume calling the removed start_pause action (@epenet - #188080)
- Use platform action enums in alexa (@epenet - #188085)
- Use input helper and timer action enums in integrations (@epenet - #188148)
- Fix alexa vacuum power control relying on the removed actions (@epenet - #188171)
- Use the number capability attribute enum for input numbers in alexa (@epenet - #188693)
- Add Alexa.RTCSessionController support for camera live view on Echo Show (@nolimit-labs - #182881)
- Remove unneeded Alexa RTC session renegotiation handling (@jbouwh - #188767)
- Prefer cloud custom domains in get_url (@balloob - #189471)
Amazon Web Services (AWS)
- Raise ConfigEntryError instead of returning False in aws setup (@gjohansson-ST - #184980)
- Return None from config entry methods in Amazon Web Services (AWS) (@gjohansson-ST - #186266)
Ambient Weather Network
- Add missing flow form field translations in ambient_network (@tr4nt0r - #184143)
- Remove redundant wind direction translation name from Ambient Weather Network (@frenck - #185287)
- Remove redundant entity constructor in Ambient Weather Network (@joostlek - #189261)
Ambient Weather Station
Android Debug Bridge
Anglian Water
- Implement reauthentication flow for Anglian Water integration (@pantherale0 - #180077)
- Use MockConfigEntry flow helpers in Anglian Water tests (@joostlek - #186437)
- Bump pyanglianwater to 3.3.3 (@pantherale0 - #189350)
Anova
- Raise ConfigEntryError on invalid login in anova (@gjohansson-ST - #184977)
Anthem A/V Receivers
Anthropic
- Add reconfigure flow for Anthropic (@Shulyaka - #183793)
- Preserve explicit empty assistant messages (@Shulyaka - #182754)
- Bump Anthropic to 1.12.0 (@Shulyaka - #184771)
- Switch Anthropic default model to Haiku 5.5 (@domdomegg - #185553)
- Use Anthropic model metadata to determine disabled thinking capability (@Shulyaka - #184875)
- Shared helper for Anthropic config and repair flow (@Shulyaka - #186672)
- Use model capabilities from Anthropic API for server tool support (@Shulyaka - #186722)
- Use diagnostics registry entry helpers in anthropic diagnostics (@arturpragacz - #186888)
- Use deprecation information for Anthropic models from the API (@Shulyaka - #186887)
- Expand Anthropic usage trace (@Shulyaka - #187161)
- Check structured_output capability from Anthropic API (@Shulyaka - #187326)
- Remove repair issue for Anthropic when the model is updated outside of repair flow (@Shulyaka - #187483)
- Bump Anthropic to 1.15.0 (@Shulyaka - #187533)
- Pass a context in conversation tests instead of None (@balloob - #187975)
- Separate Effort and Thinking Type for Anthropic (@Shulyaka - #187962)
- Add
between_toolsthinking type support for eligible Anthropic models (@Shulyaka - #188425) - Bump Anthropic to v2.3.0 (@Shulyaka - #188437)
- Removing redundant typed dicts in Anthropic (@Shulyaka - #188505)
- Reuse the LLM API instance and system prompt between turns (@balloob - #188523)
- Hide inactive Anthropic model options (@Shulyaka - #188812)
- Hide Anthropic advanced options behind the recommended toggle (@balloobbot - #187970)
Antifurto365 iAlarm
- Define the iAlarm scan interval in the integration (@epenet - #186462)
- Migrate iAlarm to the async pyasyncialarm library (@bigmoby - #185953)
anylist
- Add AnyList integration (@BookCatKid - #182272)
AnyList
- Return None from config entry methods in AnyList (@gjohansson-ST - #187726)
APC UPS Daemon
Apple iCloud
- Bump pyicloud to 2026.10.0 (@timlaing - #186146)
- fix: Stop iCloud startup blocking on the first calendar and reminders fetch (@timlaing - #186175)
- Fix iCloud polling loop dying permanently on transient errors (@TeroPihlaja - #181389)
- Label iCloud config flow start button as Add account (@timlaing - #186738)
- Bump pyicloud to 2026.10.1 (@timlaing - #186803)
- Handle Apple’s updated iCloud terms in the config flow (@timlaing - #186744)
- Do not lose an iCloud poll to a failed locate request (@TeroPihlaja - #182855)
- Skip deleted iCloud reminder lists when creating to-do entities (@timlaing - #186745)
- Fix iCloud shared Reminders lists showing a duplicate empty list (@timlaing - #186748)
- Add iCloud integration name to reauth message (@timlaing - #186747)
- Tell apart the ways iCloud refuses a session, and recover from each (@TeroPihlaja - #181390)
- Track iCloud devices that report no battery (@TeroPihlaja - #182852)
- Add additional sensors to iCloud devices (@timlaing - #186407)
- Fix time zone handling for iCloud reminders (@ldeutschland - #185540)
- Add diagnostics to the iCloud integration (@timlaing - #188279)
- Fix stale dispatcher listeners when reloading iCloud config entry (@timlaing - #186471)
- Add play sound buttons to iCloud devices (@timlaing - #188280)
- Fix the iCloud reload listener test for the new button platform (@epenet - #188699)
- Add binary sensors to iCloud devices (@timlaing - #188281)
- Treat missing iCloud Reminders zone as an acceptable state (@timlaing - #189369)
Apple TV
- Assert the unique ID in apple_tv config flow tests (@erwindouna - #185296)
- Pass a DeviceInfo to async_get_or_create_device in apple_tv (@epenet - #187685)
- Add diagnostics to Apple TV (@joostlek - #189125)
Apple WeatherKit
- Raise ConfigEntryError on authentication error in weatherkit (@gjohansson-ST - #185140)
Apprise
AprilAire
- Update the aprilaire device with async_get_or_create (@epenet - #185461)
- Pass the device info to async_get_or_create_device (@epenet - #187534)
Arcam FMJ Receivers
- Pass the device info to async_get_or_create_device (@epenet - #187534)
- Bump arcam-fmj to 3.1.1 (@elupus - #189518)
AriaQ
- Add sensor platform to flow_it (@albertogeniola - #182160)
- Add binary sensor platform to FlowIt (@albertogeniola - #184296)
- Use freezer instead of coordinator refresh in flow_it tests (@erwindouna - #185108)
- Add reauthentication flow to Flow-it (@joostlek - #186296)
- Rename Flow-it integration to AriaQ (@albertogeniola - #187082)
- Remove redundant entity constructor in AriaQ (@joostlek - #189265)
ariaq
- Rename Flow-it integration to AriaQ (@albertogeniola - #187082)
Aseko Pool Live
- Raise ConfigEntryError on unknown version migration in aseko_pool_live (@gjohansson-ST - #185270)
- Use the dt helpers instead of datetime.now (@erwindouna - #185620)
Assist pipeline
- Use TaggedUnion for schema dispatch in ZHA, Z-Wave JS, MQTT, Energy and Assist pipeline (@balloobbot - #186177)
- Use audioop for the Assist pipeline volume multiplier (@balloob - #186707)
- Keep discarded local intent attempts out of the chat log (@balloob - #186708)
- Warm up Assist intent recognition while the user speaks (@balloob - #186711)
- Check the conversation owner before Wyoming sends text (@balloob - #188181)
- Process one message per conversation at a time and keep failed messages (@balloob - #188535)
- Store the reply of an agent without chat log in the Assist pipeline (@balloob - #188842)
- Ignore microVAD warm-up values in voice activity detection (@cpruijsen - #188872)
Assist Satellite
- Construct DeviceInfo with keyword arguments in assist_satellite tests (@epenet - #185271)
- Raise translated errors in Assist satellite (@joostlek - #186331)
ASUSWRT
- Return None from config entry method mocks in asuswrt tests (@gjohansson-ST - #187839)
- Adapt asuswrt device tracker to base class changes (@emontnemery - #189197)
Atag
- Use freezer instead of coordinator refresh in atag tests (@erwindouna - #185093)
August
Aurora
Auth
- Validate OAuth request parameters and S256 challenges (@hunterjm - #184255)
- Check the IndieAuth client_id hostname without the port (@elupus - #186537)
- Limit the URL length when creating a login flow (@zweckj - #186647)
- Update links to the new contributors website (@frenck - #186884)
- Allow IndieAuth client_ids matching the request netloc (@elupus - #186543)
- Define public names of the auth integration (@epenet - #187216)
- Reject concurrent requests to the same login flow (@zweckj - #187171)
- Move auth provider startup, cleanup and login screen checks into provider hooks (@zweckj - #187167)
- Check async_can_start_login when a login flow is started (@zweckj - #187321)
- Refuse auth codes of credentials removed after they were issued (@zweckj - #187492)
- Revoke the current token at once when deleting all refresh tokens (@zweckj - #187504)
- Create one user when one account signs in for the first time twice (@zweckj - #187507)
- Remove expired auth codes when storing a new one (@zweckj - #187541)
- Limit request body size on unauthenticated auth endpoints (@erwindouna - #188808)
Automation
- Move automation entity service registration to services module (@epenet - #184706)
- Fix flaky automation test_shared_context (@epenet - #184701)
- Move automation entities to entity module (@epenet - #184833)
- Keep broken automations and scripts linked to their blueprint (@frenck - #184984)
- Move automation config processing to util module (@epenet - #184899)
- Adapt automation to in-place entity ID change (@emontnemery - #184857)
- Improve automation repair issue handling (@emontnemery - #185456)
- Add the run to automation triggered and script started events (@Xyolyp - #184957)
- Move automation reload service registration to services module (@epenet - #185249)
- Add homeassistant.updated trigger (@frenck - #186894)
- Define public names of the automation integration (@epenet - #187157)
- Use issues refresh helper in automation (@emontnemery - #188024)
AWS S3
- Raise instead of returning False when unloading AWS S3 (@gjohansson-ST - #186224)
- Convert backup tests in aws_s3 to end-to-end (@emontnemery - #188321)
- Close backup download stream in aws_s3 when not fully read (@emontnemery - #188220)
Axis
- Fix Axis RTSP URLs with reserved characters in credentials (@peter-pertech - #188427)
- Fix Axis connection settings not taking effect after reconfiguration (@peter-pertech - #188430)
- Fix Axis camera credentials test after reload on credential change (@balloob - #188763)
Axle Energy
- Add diagnostics for Axle Energy (@Herbertmt978 - #183818)
- Add event in progress binary sensor to Axle Energy (@Herbertmt978 - #182403)
- Upgrade Axle Energy to Silver (@Herbertmt978 - #184110)
- Add icon translations to Axle Energy Event type (@Herbertmt978 - #184146)
- Bump aioaxlevpp to 0.2.0 (@Herbertmt978 - #184246)
- Add API key reconfiguration to Axle Energy (@Herbertmt978 - #184166)
- Assess Axle Energy at Platinum quality (@Herbertmt978 - #184321)
- Use scheduled refreshes in Axle Energy tests (@Herbertmt978 - #185102)
- Add Axle Energy participation sensor (@Herbertmt978 - #184265)
- Add an Axle Energy event calendar (@Herbertmt978 - #186043)
Azure Data Explorer
- Raise ConfigEntryError on authentication failure in azure_data_explorer (@gjohansson-ST - #184981)
Azure Service Bus
Azure Storage
- Translate backup agent exceptions (@zweckj - #185957)
- Add Azure Storage backup upload progress (@KapJI - #186697)
- Pass step_id explicitly in azure_storage config flow (@gjohansson-ST - #187861)
- Convert backup tests in azure_storage to end-to-end (@emontnemery - #188345)
B
Backblaze B2
- Use MockConfigEntry flow helpers in Backblaze B2 tests (@joostlek - #186438)
- Add Backblaze B2 backup upload progress (@KapJI - #186714)
- Ignore B2 upload progress reported after the event loop closes (@KapJI - #187860)
- Convert backup tests in backblaze_b2 to end-to-end (@emontnemery - #188346)
- Close backup download stream in backblaze_b2 when not fully read (@emontnemery - #188688)
Backup
- Use typed config entry in Backup coordinator (@frenck - #185365)
- Send a backup upload progress event when each agent upload starts (@KapJI - #186688)
- Replay the latest backup upload progress to new subscribers (@KapJI - #186695)
- Add last successful automatic backup size sensor (@erwindouna - #185641)
- Import names from their source modules in backup (@epenet - #187463)
- Improve closing of streams in backup (@emontnemery - #188038)
- Use issues refresh helper in backup (@emontnemery - #188025)
- Convert backup tests in aws_s3 to end-to-end (@emontnemery - #188321)
- Convert backup tests in cloud to end-to-end (@emontnemery - #188342)
- Add an API to rename backup agents (@zweckj - #188467)
- Allow overwriting orphaned settings of the new backup agent ID when renaming an agent (@zweckj - #188544)
- Fix automatic backup time shifting by an hour after a DST change (@lsequeiraa - #188836)
- Add an action enum to backup (@epenet - #189253)
Baidu
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Bang & Olufsen
- Adapt bang_olufsen to in-place entity ID change (@emontnemery - #184858)
- Use DeviceInfo attributes in bang_olufsen (@epenet - #186606)
Bayesian
- Use TaggedUnion for filter, bayesian, modbus, kwb and opentherm_gw schemas (@balloobbot - #186179)
Belkin WeMo
- Move wemo service registration to services module (@epenet - #184629)
- Raise instead of returning False when unloading Belkin WeMo (@gjohansson-ST - #186260)
- Start WeMo registry and discovery responder in a single executor job (@joostlek - #187946)
- Add exception translations to Belkin WeMo (@joostlek - #189055)
- Add diagnostics to Belkin WeMo (@joostlek - #189140)
Besen
- Bump besen to 0.4.8 (@moryoav - #183800)
- Add Besen session sensors (@moryoav - #183806)
- Bump besen to 0.4.10 (@moryoav - #183873)
- Add Besen start charging action (@moryoav - #184113)
- Bump besen to 0.4.11 (@moryoav - #186783)
- Correct Besen scheduled charging status (@moryoav - #186968)
- Bump besen to 0.6.1 (@moryoav - #187382)
Big Ass Fans
- Fix BAF color temperature support on fan-mounted lights (@JustinStafford - #181422)
Binary sensor
- Define public names of the binary_sensor integration (@epenet - #186576)
- Export the on/off states from the binary_sensor integration (@epenet - #186618)
- Move binary_sensor entity classes to entity module (@epenet - #186820)
Bitcoin
- Add config flow to Bitcoin (@Nihvel - #180515)
- Describe the device in entity registry entry snapshots (@epenet - #188133)
- Use a coordinator in Bitcoin (@Nihvel - #188015)
Bitvis Power Hub
- Bump bitvis-protobuf to 2.0.5 (@chemelli74 - #188668)
BleBox devices
- Fix BleBox config flow tests opening sockets (@bkobus-bbx - #184022)
- Use freezer instead of coordinator refresh in blebox tests (@erwindouna - #185094)
- Remove redundant translation names from BleBox devices (@frenck - #185290)
- Define init before other methods in BleBox (@joostlek - #187550)
- Import names from their source modules in blebox (@epenet - #187783)
- Add BleBox tankSensor sensors and probe repair issue (@bkobus-bbx - #184001)
Blink
- Use freezer instead of coordinator refresh in blink tests (@erwindouna - #185095)
- Raise ConfigEntryError when migration requires reauth in blink (@gjohansson-ST - #185273)
- Fix Blink setup broken by OAuth hardware_id rejection (HTTP 406) (@sam-artuso - #178396)
- Allow removing Blink devices that are no longer on the account (@scardus - #185771)
- Redact refresh token from Blink diagnostics (@scardus - #188250)
- Show the new Blink arm state right after a command (@scardus - #188272)
Blue Current
Blueprint
- Use the common write error helper when saving a blueprint (@erwindouna - #185679)
- Define public names of the blueprint integration (@epenet - #187244)
- Add conditional visibility to blueprint inputs (@piitaya - #187538)
Bluesound
- Move bluesound service registration to services module (@epenet - #184461)
- Bump pyblu to 2.2.0 (@LouisChrist - #184548)
- Remove deprecated Bluesound grouping actions (@LouisChrist - #184755)
- Adapt bluesound to in-place entity ID change (@emontnemery - #184860)
- Make bluesound group members follow entity ID rename (@emontnemery - #184961)
- Extract shared Bluesound entity logic into a base class (@LouisChrist - #184505)
- Complete Bluesound config flow branch coverage (@LouisChrist - #186725)
- Add Bluesound quality scale assessment (@LouisChrist - #186895)
- Set Bluesound quality scale to bronze (@LouisChrist - #188811)
- Expose media player group members without grouping support (@arturpragacz - #188390)
- Log Bluesound player recovery after unavailability (@LouisChrist - #188941)
Bluetooth
- Assert the unique ID in bluetooth config flow tests (@erwindouna - #185298)
- Set the bluetooth device info fields directly rather than merging (@epenet - #185440)
- Expose Bluetooth fixtures in pytest-home-assistant (@balloob - #187090)
- Install and load pytest-home-assistant as a standalone plugin (@balloob - #187095)
- Import names from their source modules in bluetooth (@epenet - #187465)
- Pass a DeviceInfo to async_get_or_create_device in bluetooth, device_tracker, google_assistant and mqtt (@epenet - #187571)
Bluetooth LE Tracker
BLUETTI Modbus
- Add BLUETTI Modbus integration (@chpego - #180602)
- Bump bluetti-modbus to 0.52.0 (@chpego - #188156)
- Ignore zero PV AC energy readings in BLUETTI Modbus (@chpego - #188155)
- Add icon translations to BLUETTI Modbus (@chpego - #188185)
- Add diagnostics to BLUETTI Modbus (@chpego - #188157)
- Poll BLUETTI Modbus every 15 seconds (@chpego - #188570)
- Add reconfigure flow to BLUETTI Modbus (@chpego - #188188)
Bond
- Raise ConfigEntryError on invalid token in bond (@gjohansson-ST - #184982)
- Add reauth flow to bond (@gjohansson-ST - #185851)
Bosch Alarm
Bosch SHC
- bosch_shc: add Camera 360 notifications switch (@mosandlt - #183750)
- bosch_shc: add Motion Detector II motion sensitivity select (@mosandlt - #183732)
- bosch_shc: add Camera Eyes notifications switch (@mosandlt - #183735)
- bosch_shc: use sync writes for select and number entities (@mosandlt - #184200)
- bosch_shc: add smoke detector self-test button (@mosandlt - #184202)
- Add vibration sensitivity select to Bosch SHC (@mosandlt - #184393)
- bosch_shc: add Motion Detector II tamper reset button (@mosandlt - #184448)
- Adapt bosch_shc to in-place entity ID change (@emontnemery - #184861)
- bosch_shc: add alarm control panel platform (@mosandlt - #184472)
- bosch_shc: add light platform with micromodule dimmer (@mosandlt - #184470)
- Adapt bosch_shc to in-place entity ID change (@emontnemery - #185906)
- bosch_shc: add room climate control entity (@mosandlt - #184199)
- bosch_shc: add Smart Plug energy-saving enter duration number (@mosandlt - #183717)
- Add smoke sensitivity select to Bosch SHC (@mosandlt - #185941)
- bosch_shc: bump boschshcpy to 0.6.20 (@mosandlt - #186014)
- Use common states for Bosch SHC select options (@mosandlt - #186018)
- Unsubscribe Bosch SHC callbacks when entity add fails (@mosandlt - #185013)
- Add thermostat display selects to Bosch SHC (@mosandlt - #186009)
- bosch_shc: add heating circuit climate entity (@mosandlt - #186001)
- Group sequential async_add_entities calls in Bosch SHC (@joostlek - #187518)
- Add state after power outage select to Bosch SHC (@mosandlt - #186008)
- Add temperature offset number to Bosch SHC (@mosandlt - #186010)
- Add valve type and heater type selects to Bosch SHC (@mosandlt - #186907)
- Add switch type select to Bosch SHC (@mosandlt - #187896)
- bosch_shc: bump boschshcpy to 0.6.23 (@mosandlt - #188013)
- Add sensor connection select to Bosch SHC (@mosandlt - #187889)
- Add actuator type select to Bosch SHC (@mosandlt - #187897)
- Add output mode select to Bosch SHC (@mosandlt - #187898)
- Add LED brightness number to Bosch SHC (@mosandlt - #188011)
- Add smart sensitivity level selects to Bosch SHC (@mosandlt - #187899)
- bosch_shc: bump boschshcpy to 0.6.25 (@mosandlt - #188712)
- bosch_shc: add diagnostics (@mosandlt - #188732)
- bosch_shc: add Twinguard smoke binary sensor (@mosandlt - #186227)
- Add Room Thermostat II sensors to Bosch SHC (@mosandlt - #188789)
Bosch Smart Camera
- Bump bosch-shc-camera-client to 0.6.0 (@mosandlt - #188999)
- Bump bosch-shc-camera-client to 0.6.2 (@mosandlt - #189016)
- Add diagnostics to Bosch Smart Camera (@mosandlt - #188994)
bosch_shc_camera
Bose SoundTouch
Brands
Broadlink
- Add DAB-LABS as codeowner for Broadlink (@DAB-LABS - #184344)
- Raise ConfigEntryError when device setup fails in broadlink (@gjohansson-ST - #184983)
- Test broadlink config flow error recovery (@erwindouna - #185486)
- Type the broadlink domain data with a HassKey (@gjohansson-ST - #185833)
- Raise instead of returning False when unloading Broadlink (@gjohansson-ST - #186248)
- Fix swallowed exceptions in Broadlink remote actions (@smitec11 - #182918)
- Remove name field from broadlink config flow (@smitec11 - #182950)
- Fix broadlink config flow tests after name step removal (@CoMPaTech - #186801)
- Bump broadlink-async to 1.1.1 (@DAB-LABS - #187043)
- Fix Broadlink RM4 Pro RF learning storing unusable codes (@dustinreed-info - #182652)
- Read the Broadlink reauth name from the config entry title (@smitec11 - #182951)
- Add a heating output binary sensor to Broadlink Hysen thermostats (@gozdal - #187579)
- Add setpoint limits to Broadlink Hysen thermostats (@gozdal - #187580)
- Add exception translations to Broadlink (@joostlek - #189026)
- Add diagnostics to Broadlink (@joostlek - #189124)
Brother Printer
Browser
BSB-LAN
- Add BSB-LAN heating schedule service (@liudger - #181360)
- Bump python-bsblan to 6.1.9 (@liudger - #185903)
- Bump python-bsblan to 6.1.10 (@liudger - #186158)
- Use MockConfigEntry flow helpers in BSB-LAN tests (@joostlek - #186441)
- Bump python-bsblan to 6.1.11 (@piitaya - #187886)
- Re-read only the written BSB-LAN circuit or hot water state after a write (@piitaya - #187852)
- Report BSB-LAN climate as off in protection mode when idle (@piitaya - #187853)
- Bump python-bsblan to 6.2.0 (@piitaya - #188735)
- Add current temperature sensor per BSB-LAN heating circuit (@piitaya - #187851)
- Bump python-bsblan to 6.2.1 (@liudger - #188940)
- Remove redundant entity constructor in BSB-LAN (@joostlek - #189263)
BTHome
- Remove redundant button translation name from BTHome (@frenck - #185291)
- Set config entry id on bthome repair issues (@emontnemery - #187809)
- Add bthome_ble logger to BTHome manifest (@thecode - #188349)
- Bump bthome-ble to 3.24.0 (@thecode - #188357)
- Add BTHome hold release event (@Bascht74 - #188847)
- Sentence-case BTHome device trigger subtypes (@thecode - #188939)
- Add diagnostics to BTHome (@joostlek - #189143)
- Add masked advertisement data to BTHome diagnostics (@joostlek - #189239)
Buienradar
Button
- Define public names of the button integration (@epenet - #186584)
- Move button entity classes to entity module (@epenet - #186795)
- Use the trigger argument enums in the button and cover device triggers (@epenet - #188234)
C
CalDAV
- Raise ConfigEntryError on unexpected server response in caldav (@gjohansson-ST - #184986)
- Bump caldav to 3.5.0a0 (@jimjaeger - #186667)
- Return CalDAV events in order (@jimjaeger - #186718)
- Add completed time to CalDAV to-do items (@ivenos - #187925)
- Set the completed time when completing CalDAV to-do items (@ivenos - #188236)
- Add diagnostics to CalDAV (@ivenos - #188158)
- Add reconfigure flow to CalDAV (@ivenos - #188159)
- Skip reading unchanged CalDAV to-do lists (@ivenos - #188540)
- Use the server’s calendar color for new CalDAV calendars (@ivenos - #188287)
Calendar
- Define public names of the calendar integration (@epenet - #186592)
- Move calendar entity classes to entity module (@epenet - #186867)
- Add support for calendar groups (@elupus - #187072)
- Use a signed offset in sun and calendar triggers (@piitaya - #184855)
Camera
- Invalidate CameraEntity.entity_picture on entity id rename (@emontnemery - #183908)
- Add exception translations to camera (@frenck - #184427)
- Translate camera stream not supported error (@frenck - #184576)
- Teach CameraPreferences about entity id changes (@emontnemery - #183875)
- Use the common write error helper in camera, reolink, file, local_todo and local_calendar (@erwindouna - #185677)
- Clean up CameraPreferences when an entity is removed (@emontnemery - #186414)
- Define public names of the camera integration (@epenet - #186597)
- Add two way audio camera support (@starkillerOG - #184716)
- Use platform action enums when calling platform actions (@epenet - #188071)
- Support two-way audio for Matter cameras (@arturpragacz - #187963)
Camera Proxy
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Change device type of a switch
- Raise ConfigEntryError for unknown entity in switch_as_x (@gjohansson-ST - #185130)
Channels
Chef iQ
- Add diagnostics to Chef iQ (@Invader444 - #189110)
- Set Chef iQ quality scale to platinum (@Invader444 - #189163)
- Bump chefiq-ble to 1.1.1 (@Invader444 - #189111)
- Make Chef iQ sensors unavailable when the probe stops broadcasting (@Invader444 - #189188)
Chess.com
ChirpStack
- Add ChirpStack integration (@balloobbot - #186343)
- Fix pylint return type errors in chirpstack (@Markus98 - #187825)
- Link ChirpStack and The Things Network connections to their admin console (@balloob - #188296)
Cielo Home
ClickSend TTS
Climate
- Add temperature_unit state attribute to climate (@emontnemery - #183975)
- Mark deprecated climate properties as final (@emontnemery - #184840)
- Use a shared helper for renamed climate and water_heater properties (@epenet - #184835)
- Raise for core integrations using deprecated temperature members (@epenet - #185984)
- Add RestoreClimate base which stores unconverted temperatures (@emontnemery - #186105)
- Use TaggedUnion for device automation and ntfy action schemas (@balloobbot - #186178)
- Define public names of the climate integration (@epenet - #186602)
- Move climate entity classes to entity module (@epenet - #186835)
- Test the for option of the climate and select device triggers (@epenet - #187508)
- Import constants directly in climate and humidifier device automation (@epenet - #188175)
- Use the state attribute enums in conditions/intents/triggers (@epenet - #188176)
Cloudflare R2
- Convert backup tests in cloudflare_r2 to end-to-end (@emontnemery - #188466)
- Close backup download stream in coudflare_r2 when not fully read (@emontnemery - #188684)
Coinbase
- Use MockConfigEntry flow helpers in Coinbase tests (@joostlek - #186442)
- Get Coinbase accounts and exchange rates in a single executor job (@joostlek - #187950)
Collection image
- Add current image_id to an attribute (@karwosts - #183958)
- Add diagnostics support for Collection Image integration (@karwosts - #183956)
- Use the common read error helper in collection_image (@karwosts - #185748)
ColorExtractor
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Comelit SimpleHome
- Use TextSelectors in Comelit (@chemelli74 - #184031)
- Remove redundant motion translation key from Comelit (@frenck - #185281)
- Fix Comelit availability on failed updates (@erwindouna - #185496)
- Import core constants from homeassistant.const in climate platforms (@epenet - #186851)
- Allow reconfiguring legacy entries with no port for Comelit (@chemelli74 - #188783)
- Add cover position to Comelit (@chemelli74 - #179616)
Command line
- Move command_line reload action to services module (@epenet - #184433)
- Ignore quoted shell metacharacters in command_line template deprecation check (@gjohansson-ST - #185480)
- Use issues refresh helper in command_line (@emontnemery - #188026)
- Add JSON attributes to command_line binary sensor (@zivgin - #187006)
Compensation
- Initialize compensation sensor from source state on setup (@gjohansson-ST - #186807)
Compit
- Bump compit-inext-api to 0.9.2 (@maczet - #184676)
- Use typed config entry in Compit coordinator (@frenck - #185366)
- Add ventilation filter binary sensor to Compit (@maczet - #185915)
Configuration
- Migrate user-given entity names (@arturpragacz - #184340)
- Use MockConfigEntry flow helpers in config entries websocket API tests (@joostlek - #186443)
- Notify subscribers of config_entries/subscribe when disabling an entry (@emontnemery - #186373)
- Drop has_entity_name from entity registry websocket payloads (@arturpragacz - #186898)
- Define public names of the config integration (@epenet - #187191)
- Look up and verify a user’s password through the homeassistant auth provider (@zweckj - #187336)
- Fix derived entity disabled_by handling (@arturpragacz - #186750)
- Reply before deleting your own password ends your session (@zweckj - #187530)
- Don’t require restart when enabled config entry fails setup (@oyvindwe - #185543)
- Add GetConfigEntriesTool LLM tool to config integration (@allenporter - #188127)
- Add ReloadConfigEntryTool and short config entry IDs to config LLM tools (@allenporter - #188402)
- Fix composite devices leaking into child-only async_get lookups (@arturpragacz - #188428)
- Add system info LLM tool (@balloob - #188522)
- Add SearchIntegrationsTool to config LLM tools (@allenporter - #188650)
Configurator
Control4
- Raise ConfigEntryError on bad credentials in control4 (@gjohansson-ST - #184989)
- Remove scan interval option from control4 (@gjohansson-ST - #185879)
- Fix Control4 lights not being created when the system has no dimmers (@davidrecordon - #188310)
- Fix Control4 room media_player not being able to turn on (@leonardomarino - #186902)
- Remove redundant entity constructor in Control4 (@joostlek - #189264)
- Retry Control4 setup when the first poll fails (@davidrecordon - #188992)
Conversation
- Fix flaky conversation default agent error tests (@epenet - #183841)
- Preserve explicit empty assistant messages (@Shulyaka - #182754)
- Migrate user-given entity names (@arturpragacz - #184340)
- Check admin for LLM API objects passed to the chat log (@balloob - #186007)
- Raise translated errors in conversation (@joostlek - #186335)
- Keep discarded local intent attempts out of the chat log (@balloob - #186708)
- Warm up Assist intent recognition while the user speaks (@balloob - #186711)
- Import names from their source modules in conversation (@epenet - #187461)
- Only let the user who started a conversation continue it (@balloob - #188126)
- Keep the conversation owner on the chat session (@balloob - #188180)
- Reuse the LLM API instance and system prompt between turns (@balloob - #188523)
- Process one message per conversation at a time and keep failed messages (@balloob - #188535)
- Send streamed assistant content to chat log subscribers (@balloob - #188843)
- Bump intents to 2026.10.27 (@synesthesiam - #188906)
Cookidoo
- Raise config entry errors when migration fails in cookidoo (@gjohansson-ST - #185276)
- Fix flaky cookidoo config flow tests (@balloob - #186070)
CoolMasterNet
- Scope Coolmaster unique IDs per config entry (@marlette - #182000)
- Define the scan interval in coolmaster (@epenet - #187294)
Counter
- Move counter service registration to services module (@epenet - #184281)
- Move counter entity to entity module (@epenet - #186363)
- Define public names of the counter integration (@epenet - #187767)
- Add action enums to timer, counter and group (@epenet - #188086)
- Remove the unused attribute constants from counter (@epenet - #188705)
Cover
- Use TaggedUnion for cover and media player device automation schemas (@balloobbot - #186277)
- Add the re-exported service names to the cover public names (@epenet - #186651)
- Move cover entity classes to entity module (@epenet - #186809)
- Use the trigger argument enums in the button and cover device triggers (@epenet - #188234)
- Do not fail cover actions on an unsupported speed (@Bascht74 - #188271)
- Rename the Overkiz cover speed low to slow (@Bascht74 - #188327)
- Add standard speeds to cover (@Bascht74 - #188277)
- Use the standard cover speeds in Overkiz (@Bascht74 - #188980)
CPU Speed
- Raise ConfigEntryError when system is not compatible in cpuspeed (@gjohansson-ST - #184990)
Crownstone
- Raise ConfigEntryError on authentication failure in crownstone (@gjohansson-ST - #184992)
Cync
- Simplify chained comparisons flagged by pylint 4.1 (@Markus98 - #184666)
- Bump pycync to 0.6.1 (@dubstylee - #179013)
- Preserve Cync light settings on a bare turn-on (@azuttre - #181082)
- Fix Cync light test using stale device key (@Markus98 - #187842)
- Use fresh credentials on each Cync login attempt (@driftfox - #184565)
D
Daikin AC
- Bump pydaikin to 2.20.0 (@eshattow - #184183)
- Daikin add support for demand control (@fredrike - #178733)
- Bump pydaikin to 2.22.0 (@hannnnn-l - #189794)
- Bump pydaikin to 2.22.1 (@thorstenhornung1 - #190270)
Dashboards
- Bump mypi cache version and fix lovelace import (@edenhaus - #184934)
- Move lovelace YAML resource collection setup to resources module (@epenet - #184904)
- Move lovelace service registration to services module (@epenet - #185182)
- Define public names of the lovelace integration (@epenet - #187175)
- Import names from their source modules in lovelace (@epenet - #187462)
Datadog
Date
- Add the re-exported names to the date public names (@epenet - #186657)
- Move date entity classes to entity module (@epenet - #186794)
Date/Time
- Add the re-exported names to the datetime public names (@epenet - #186659)
- Move datetime entity classes to entity module (@epenet - #186793)
Debug console
deCONZ
- Adapt deconz to in-place entity ID change (@emontnemery - #184862)
- Set the unique ID for discovered deCONZ bridges (@erwindouna - #185263)
- Return None from config entry methods in deCONZ (@gjohansson-ST - #186249)
- Pass the device info to async_get_or_create_device (@epenet - #187534)
Demo
- Add demo lawn mower (@gjohansson-ST - #184769)
- Raise translated ServiceValidationError for invalid siren tones (@joostlek - #186312)
- Define public names of the demo integration (@epenet - #187192)
- Rename the Overkiz cover speed low to slow (@Bascht74 - #188327)
- Expose media player group members without grouping support (@arturpragacz - #188390)
- Add standard speeds to cover (@Bascht74 - #188277)
- Use the standard cover speeds in Overkiz (@Bascht74 - #188980)
Denon AVR Network Receivers
- Assert the unique ID in denonavr config flow tests (@erwindouna - #185299)
- Add diagnostics to Denon AVR Network Receivers (@joostlek - #189117)
Denon HEOS
- Don’t move the heos entry to a discovered host while connected (@smitec11 - #182521)
- Register heos media player actions in async_setup_services (@epenet - #186077)
- Use diagnostics registry entry helpers in heos diagnostics (@arturpragacz - #186890)
- Remove deprecated ‘heos.sign_in’ and ‘heos.sign_out’ actions in HEOS integration (@tr4nt0r - #187102)
- Expose media player group members without grouping support (@arturpragacz - #188390)
Denon RS-232
- Bump denon-rs232 to 4.3.0 (@balloob - #185583)
- Bump denon-rs232 to 4.3.1 to retry serial connection failures (@balloob - #186965)
Derivative
- Use diagnostics registry entry helpers in derivative diagnostics (@arturpragacz - #186889)
- Add a state attribute enum to derivative (@epenet - #189162)
Deutscher Wetterdienst (DWD) Weather Warnings
Device automation
- Use TaggedUnion for device automation and ntfy action schemas (@balloobbot - #186178)
- Define public names of the device_automation integration (@epenet - #187163)
- Export the toggle action types from device_automation (@epenet - #187480)
Device tracker
- Define public names of the device_tracker integration (@epenet - #186603)
- Remove the entity platform exemption from the class module pylint check (@epenet - #187147)
- Pass a DeviceInfo to async_get_or_create_device in bluetooth, device_tracker, google_assistant and mqtt (@epenet - #187571)
- Fix zone calculation in template device tracker previews (@jslponcev-ui - #188036)
- Enable deprecation warning for ScannerEntity changes (@emontnemery - #189242)
- Fix wrong breaks_in_version for device tracker deprecation (@emontnemery - #190020)
devolo Home Control
- Raise HomeAssistantError when devolo_home_control actions fail (@Shutgun - #184311)
- Rework translations in devolo Home Control (@Shutgun - #184320)
- Use DeviceInfo attributes in devolo_home_control (@epenet - #186605)
devolo Home Network
- Exclude expensive calls from first coordinator refresh in devolo Home Network (@Shutgun - #184035)
- Use typed config entry in devolo Home Network coordinator (@frenck - #185368)
- Bump devolo_plc_api to 1.6.0 (@Shutgun - #186116)
- Pass the device info to async_get_or_create_device (@epenet - #187534)
- Adapt devolo_home_network device tracker to base class changes (@emontnemery - #189198)
Dexcom
- Raise ConfigEntryError on account error in dexcom (@gjohansson-ST - #184993)
- Add reauth flow to dexcom (@gjohansson-ST - #185857)
- Add glucose reading time sensor to Dexcom (@wiltodelta - #176641)
Diagnostics
- Migrate user-given entity names (@arturpragacz - #184340)
- Allow setting owning config entry on repair issues (@emontnemery - #186197)
- Serialise computed name alias in diagnostics entity entry dict (@arturpragacz - #186755)
Discord
DLNA Digital Media Renderer
- Assert the unique ID in dlna_dmr config flow tests (@erwindouna - #185300)
- Pass the device info to async_get_or_create_device (@epenet - #187534)
- Bump getmac to 0.9.6 (@chemelli74 - #184162)
- Add diagnostics to DLNA Digital Media Renderer (@joostlek - #189128)
DLNA Digital Media Server
- Raise ConfigEntryError when setup fails in dlna_dms (@gjohansson-ST - #185146)
- Return None from config entry methods in DLNA Digital Media Server (@gjohansson-ST - #186250)
- Add diagnostics to DLNA Digital Media Server (@joostlek - #189150)
DNS IP
- log available/unavailable in dnsip (@gjohansson-ST - #184762)
- Set PARALLEL_UPDATES in dnsip (@gjohansson-ST - #184761)
- Bump quality scale to silver for dnsip (@gjohansson-ST - #184764)
DOODS - Dedicated Open Object Detection Service
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
DoorBird
- Fix doorbird events (@emontnemery - #183871)
- Adapt doorbird to in-place entity ID change (@emontnemery - #184864)
- Improve doorbird entity removal (@emontnemery - #185964)
- Refresh DoorBird images on models without the schedule API (@mattias-arrelid - #185960)
- Ignore empty event names in the DoorBird options (@mattias-arrelid - #185963)
- Reload the DoorBird entry when the configured events change (@mattias-arrelid - #185961)
- Report the matching DoorBird image entity in fired events (@mattias-arrelid - #186147)
- Deprecate the DoorBird last ring and last motion cameras (@mattias-arrelid - #187630)
- Fix derived entity disabled_by handling on restore (@arturpragacz - #188259)
Downloader
- Use enums for downloader service names and arguments (@epenet - #183979)
- Raise ConfigEntryError when download path is missing in downloader (@gjohansson-ST - #184995)
- Register downloader services in async_setup (@epenet - #185927)
DROP
- Raise ConfigEntryError when MQTT is unavailable in drop_connect (@gjohansson-ST - #184997)
- Enable automatic conversion for volume_flow_rate (@sarahseidman - #186188)
Dropbox
- Download Dropbox backup metadata concurrently (@KapJI - #183994)
- Translate backup agent exceptions (@zweckj - #185957)
- Add Dropbox backup upload progress (@KapJI - #186637)
- Bump python-dropbox-api to 0.1.6 (@KapJI - #186818)
- Use the Dropbox upload progress callback for backup uploads (@KapJI - #186777)
- Convert backup tests in dropbox to end-to-end (@emontnemery - #188347)
Droplet
- Make droplet integration use system default units (@sarahseidman - #188739)
DSMR Smart Meter
Duco
- Test scheduled coordinator refresh in Duco (@ronaldvdmeer - #185070)
- Fix flaky Duco number coordinator failure test (@epenet - #185951)
E
ebusd
ecobee
- Bump python-ecobee-api to 0.4.2 (@pike00 - #176862)
- Move ecobee climate service registrations to services module (@epenet - #184423)
- Raise ConfigEntryError when no devices are found in ecobee (@gjohansson-ST - #184998)
- Type the ecobee thermostat list with a HassKey (@gjohansson-ST - #185832)
- Add diagnostics to ecobee (@joostlek - #189129)
Ecoforest
- Raise ConfigEntryError on authentication failure in ecoforest (@gjohansson-ST - #184999)
ecosmart
- Add ecosmart integration (@Daryn-L - #180129)
- Fix ecosmart hassfest and test imports (@epenet - #187359)
- Return None from config entry methods in ecosmart (@gjohansson-ST - #187727)
- Add reauthentication flow to ecosmart (@Daryn-L - #187419)
- Add get_forecasts action to ecosmart (@Daryn-L - #187411)
- Add reconfiguration flow to ecosmart (@Daryn-L - #188480)
Ecovacs
- Move vacuum entity classes to entity module (@epenet - #186826)
- Add more Ecovacs lifespans (@erwindouna - #186986)
- Report idle Ecovacs mowers as idle (@erwindouna - #186984)
- Use the clean count for Ecovacs area cleaning (@erwindouna - #187118)
- Test Ecovacs clean_V2 area cleaning (@erwindouna - #187223)
- Update Ecovacs device firmware and MAC when reported (@erwindouna - #186983)
- Add Ecovacs wash mop button (@erwindouna - #188661)
- Add stop to Ecovacs lawn mower (@erwindouna - #188655)
- Add Ecovacs mop wash interval number (@erwindouna - #188662)
- Add Ecovacs efficiency mode select (@erwindouna - #188663)
- Fix Ecovacs entity count in tests (@erwindouna - #188749)
- Add Ecovacs auto-empty switch (@erwindouna - #188664)
- Add exception translations to Ecovacs (@joostlek - #189024)
Edifier Infrared
- Remove redundant downgrade check in edifier_infrared migration (@gjohansson-ST - #185280)
- Add tests to ensure model consistency in Edifier (@abmantis - #187690)
eGauge
- Use typed config entry in eGauge coordinator (@frenck - #185370)
- Add reauthentication flow to eGauge (@joostlek - #186295)
Electra Smart
- Add @noamokman as a code owner of the electrasmart integration (@noamokman - #184395)
- Keep the mode the AC was last running in when turning on Electra Smart (@noamokman - #184595)
- Move the shared Electra Smart test fixtures to a conftest.py (@noamokman - #187125)
- Handle the Electra Smart account lockout with reauthentication (@noamokman - #187194)
- Add DHCP discovery to the Electra Smart integration (@noamokman - #186564)
- Add tests for the Electra Smart integration (@noamokman - #187973)
- Reset the Electra Smart failure counter on a successful update (@noamokman - #188227)
- Bump pyElectra to 1.2.10 (@noamokman - #188911)
Electric Kiwi
- Raise translated errors from Electric Kiwi hour of free power select (@epenet - #184054)
- Raise config entry errors when migration fails in electric_kiwi (@gjohansson-ST - #185286)
- Add shared OAuth2 client authentication helper (@zweckj - #183240)
Electricity Maps
- Update Electricity Maps registration link (@corradio - #186977)
- Sets CO2 signal parallel updates (@VitorCoelho - #187622)
- Use `LocationSelector in Electricity Maps integration (@tr4nt0r - #188285)
- Add exception translations to Electricity Maps (@joostlek - #189027)
- Add reconfigure flow to Electricity Maps (@joostlek - #189069)
ElevenLabs
- Add reauthentication flow to ElevenLabs (@joostlek - #186206)
- Show a specific ElevenLabs error when the API key ID is entered (@Djelibeybi - #187422)
- Test the ElevenLabs invalid_api_key code fallback (@Djelibeybi - #187563)
- Retry ElevenLabs setup when fetching voices fails (@itssali - #188064)
Elexa Guardian
Elgato Light
- Avoid direct coordinator refreshes in elgato tests (@erwindouna - #185200)
Elk-M1 Control
- Move elkm1 entity service registrations to services module (@epenet - #184421)
- Raise ConfigEntryError instead of returning False in elkm1 setup (@gjohansson-ST - #185002)
- Assert the unique ID in elkm1 config flow tests (@erwindouna - #185301)
Elmax
- Test elmax config flow error recovery (@erwindouna - #185484)
Elvia
- Raise ConfigEntryError when initial import fails in elvia (@gjohansson-ST - #185005)
Emulated Hue
Emulated Kasa
Emulated Roku
- Raise ConfigEntryError when server setup fails in emulated_roku (@gjohansson-ST - #185145)
- Return None from config entry methods in Emulated Roku (@gjohansson-ST - #186251)
energieleser
Energy
- Improve handling of renamed energy power sensor (@emontnemery - #183852)
- Handle mismatched gas price units in energy cost sensor (@MindFreeze - #184292)
- Handle non-power source units in combined energy power sensor (@MindFreeze - #184282)
- Add energy validation issue for mismatched gas price unit (@MindFreeze - #184293)
- Adapt energy to in-place entity ID change (@emontnemery - #184865)
- Use TaggedUnion for schema dispatch in ZHA, Z-Wave JS, MQTT, Energy and Assist pipeline (@balloobbot - #186177)
- Define public names of the energy integration (@epenet - #187206)
- Price energy used while Home Assistant was stopped (@MindFreeze - #187451)
- Handle meter unit changes in energy cost sensor (@MindFreeze - #187475)
- Fix energy fossil consumption dropping trailing partial month (@costajohnt - #183935)
- Fix removing energy sensors the platform rejected (@MindFreeze - #188352)
- Add home total option to energy dashboard (@Jump-333 - #185730)
EnergyFlip
- Raise ConfigEntryError instead of returning False in huisbaasje setup (@gjohansson-ST - #185060)
EnergyID
- Raise instead of returning False when unloading EnergyID (@gjohansson-ST - #186225)
- Use MockConfigEntry flow helpers in EnergyID tests (@joostlek - #186444)
EnergyZero
ENGIE Belgium
- Add ENGIE Belgium integration (@DaanVervacke - #179094)
- Add reauthentication flow to ENGIE Belgium (@joostlek - #186392)
- Bump aioengiebelgium to v0.8.1 (@DaanVervacke - #187358)
- Add EPEX day-ahead prices to ENGIE Belgium (@DaanVervacke - #184126)
- Set ENGIE Belgium quality scale to silver (@DaanVervacke - #187407)
- Add diagnostics to ENGIE Belgium (@DaanVervacke - #187764)
- Bump aioengiebelgium to 0.8.2 (@DaanVervacke - #188698)
EnOcean
- Return None from config entry method mocks in integration tests (batch 20: enocean–thethingsnetwork_lorawan) (@gjohansson-ST - #187993)
- Add EnOcean connectivity metadata to integrations (@balloob - #189898)
Enphase Envoy
- Add Enpower and Encharge communication level sensors to enphase_envoy (@catsmanac - #183874)
- Serialise computed name alias in diagnostics entity entry dict (@arturpragacz - #186755)
- Fix enphase_envoy diagnostics snapshot (@KapJI - #186829)
- Bump pyenphase to 4.4.0 (@catsmanac - #188933)
Environment Canada
- Move environment_canada entity service registrations to services module (@epenet - #184400)
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
- Use
LocationSelectorandLanguageSelectorin Environment Canada integration (@tr4nt0r - #188416) - Test language mapping in Environment Canada config flow (@michaeldavie - #188611)
Envisalink
- Store envisalink runtime data in a dataclass and move constants (@epenet - #184659)
- Move envisalink service registration to services module (@epenet - #184700)
- Register envisalink alarm_keypress as a platform entity service (@epenet - #184710)
Epion
ESPHome
- Send esphome response template errors directly to the device (@frenck - #184471)
- Advance time in esphome update tests (@erwindouna - #185204)
- Advance time in esphome config flow tests (@erwindouna - #185202)
- Assert the unique ID in esphome config flow tests (@erwindouna - #185303)
- Clear an ESPHome sensor’s state class and unit when firmware drops them (@tronikos - #185600)
- Split user flow init and data submission in esphome config flow tests (@tr4nt0r - #183663)
- Bump aioesphomeapi to 46.12.0 (@puddly - #186572)
- Add support for ESPHome USB serial proxies (@puddly - #183645)
- Remove orphaned ESPHome voice assistant entities (@bboe - #183835)
- Bump aioesphomeapi to 46.21.0 (@piitaya - #188020)
- Use the ESPHome capabilities API for esphome/get_device_capabilities (@MindFreeze - #187323)
- Fix ESPHome light turn on before the first state is received (@JelmerT - #186504)
- Add ESPHome device wizard websocket command (@MindFreeze - #188123)
- Import ESPHome wizard decompressor in the import executor (@balloob - #188509)
- Add ESPHome USB serial proxy roaming support to ZHA (@puddly - #187613)
- Add Sendspin auto pairing support to ESPHome (@arturpragacz - #188351)
- Add support for ESPHome child devices (@arturpragacz - #186150)
- Bump aioesphomeapi to 46.25.0 (@bdraco - #189786)
- Add ESPHome connectivity metadata to integrations (@balloob - #189899)
EufyLife
Eurotronic Comet Blue
- Use freezer instead of coordinator refresh in eurotronic_cometblue tests (@erwindouna - #185191)
- Fulfill entity-category rule in eurotronic_cometblue (@rikroe - #185881)
- bump eurotronic-cometblue-ha to 2.0.0 (@rikroe - #185849)
- Add exception translations to Eurotronic Comet Blue (@rikroe - #185880)
- Add diagnostics to Eurotronic Comet Blue (@rikroe - #186503)
- improve Eurotronic Comet Blue diagnostic (@rikroe - #186535)
- increase test coverage for Eurotronic Comet Blue (@rikroe - #186533)
- add strict typing to eurotronic comet blue (@rikroe - #187025)
- Update Eurotronic Cometblue quality scale (@rikroe - #185876)
Event
- Move event entity classes to entity module (@epenet - #186808)
- Fix invalid log for template event types (@elupus - #184664)
- Export EventExtraStoredData from the event integration (@epenet - #189209)
Everything but the Kitchen Sink
Everything Smart Home
EZVIZ
- Move ezviz service registration to services module (@epenet - #184466)
- Add image encryption password option to EZVIZ cameras (@cgaspard3333 - #188151)
- Add diagnostics to EZVIZ (@joostlek - #189146)
F
Fan
- Define public names of the fan integration (@epenet - #186619)
- Move fan entity classes to entity module (@epenet - #186825)
Feedreader
- Test that feedreader aborts on an already configured feed URL (@dneprojects - #187869)
FFmpeg
- Define public names of the ffmpeg integration (@epenet - #187164)
- Add an action enum to ffmpeg (@epenet - #189249)
Fibaro
- Use DeviceInfo attributes in fibaro (@epenet - #186610)
- Migrate int fibaro device identifiers (@rappenze - #187132)
- Refactor fibaro to prepare for strict typing (@rappenze - #186911)
- Fix Fibaro test helper imports (@balloob - #187959)
- Improve imports in fibaro tests (@rappenze - #188079)
- Bump pyfibaro to 0.8.4 (@rappenze - #186885)
- Add Z-Wave connectivity metadata to integrations (@balloob - #189916)
File
- Use the common write error helper in camera, reolink, file, local_todo and local_calendar (@erwindouna - #185677)
Filter
- Use TaggedUnion for filter, bayesian, modbus, kwb and opentherm_gw schemas (@balloobbot - #186179)
- Fix filter sensor dropping first reading after unit change (@raman325 - #187645)
- Fix filter staying unknown after restart when the source does not change (@MindFreeze - #188531)
- Add a state attribute enum to filter (@epenet - #189166)
Fing
- Improve fing device tracker tests (@emontnemery - #189213)
Firefly III
- Bump pyfirefly to 0.1.17 (@erwindouna - #189480)
FireServiceRota
- Raise ConfigEntryAuthFailed on token refresh failure in fireservicerota (@gjohansson-ST - #185006)
Firmata
- Raise ConfigEntryError when board setup fails in firmata (@gjohansson-ST - #185007)
- Raise instead of returning False when unloading Firmata (@gjohansson-ST - #186252)
Fish Audio
- Add reauthentication flow to Fish Audio (@joostlek - #186208)
- Add streaming support to Fish Audio (@nicoladen05 - #182982)
Fjäråskupan
Flexit
- Use freezer instead of coordinator refresh in flexit tests (@erwindouna - #185096)
- Use MockConfigEntry flow helpers in Flexit tests (@joostlek - #186445)
Flexit Nordic (BACnet)
- Handle Flexit BACnet polling failures with UpdateFailed (@lellky - #188585)
- Add extract air humidity sensor to Flexit Nordic (BACnet) (@merituspl79-commits - #188803)
Flic
- Add Flic Button integration (@joostlek - #182198)
- Bump pyflic-ble to 0.2.6 (@alhia - #189543)
- Only provide the Flic Twist numbers the push-twist mode supports (@alhia - #189573)
- Fix Flic Button pairing when the flow is aborted or refreshed (@alhia - #190005)
- Handle Flic Button connection state per device (@alhia - #190029)
- Fix the Flic Button pairing instructions (@alhia - #190033)
- Remove redundant comments from Flic Button (@alhia - #190069)
Flic (legacy)
Flipr
Flo
- Move flo service registration to services module (@epenet - #184610)
- Use typed config entry in Flo coordinator (@frenck - #185372)
Flux
Folder
- Make folder sensor async (@gjohansson-ST - #188601)
- Add config flow to Folder (@gjohansson-ST - #188605)
- Fix flaky folder sensor update test (@erwindouna - #189001)
Folder watcher
- Raise ConfigEntryError when path is not allowed in folder_watcher (@gjohansson-ST - #185008)
Foreca
- Add Foreca integration (@EetuPelkonen - #181541)
Forecast.Solar
- Update the forecast_solar integration to support sensor inputs (@alexkost819 - #166090)
- Use
LocationSelectorin Forecast.Solar integration (@tr4nt0r - #188426) - Key Forecast.Solar energy forecast by period start (@Tagliax - #188790)
- Add exception translations to Forecast.Solar (@joostlek - #189029)
Foscam
Foursquare
Freebox
- Raise ConfigEntryNotReady when migration cannot reach router in freebox (@gjohansson-ST - #185292)
- Use get_ffmpeg_manager in freebox (@epenet - #187198)
- Refine codeowners for Freebox and Meteo-France integrations (@Giga77 - #187042)
- Improve freebox device tracker tests (@emontnemery - #189214)
- Add diagnostics to Freebox (@joostlek - #189123)
- Report Freebox connection timeouts as cannot connect (@epenet - #190079)
Fressnapf Tracker
FRITZ!Box Call Monitor
- Raise ConfigEntryError on insufficient permissions in fritzbox_callmonitor (@gjohansson-ST - #185010)
FRITZ!Box Tools
- Use TextSelectors in Fritz (@chemelli74 - #184030)
- Move port switches to the coordinator for Fritz (@chemelli74 - #183786)
- Move QR image to the coordinator for Fritz (@chemelli74 - #183790)
- Move Wi-Fi switches to the coordinator for Fritz (@chemelli74 - #183783)
- Import binary sensor state constants from const in tests (@epenet - #186583)
- Fix Wi-Fi switch creation in FRITZ!Box tools (@mib1185 - #187135)
- Filter out FRITZ!Box hosts without an IP from device trackers (@surajvelip - #188554)
- Show invalid auth instead of unknown error in FRITZ!Box Tools config flow (@stoppyz0r - #188470)
- Adapt fritz device tracker to base class changes (@emontnemery - #189199)
- Fix reload loop on devices without traffic data in FRITZ!Box Tools (@jimjaeger - #189614)
FRITZ!SmartHome
- Remove redundant downgrade check in fritzbox migration (@gjohansson-ST - #185294)
- Add DECT connectivity metadata to integrations (@balloob - #189897)
Fronius
- Use freezer instead of coordinator refresh in fronius tests (@erwindouna - #185081)
- Fix Fronius DHCP duplicate check for URL-style hosts (@farmio - #188364)
- Migrate Fronius to fronius-solarapi (@farmio - #188483)
- Let Fronius platforms choose their entities per coordinator (@farmio - #188734)
- Bump fronius-solarapi to 0.1.1 (@farmio - #188814)
- Allow negative Fronius battery limits to force the battery (@elmars - #185435)
- Split the Fronius integration into modules by responsibility (@farmio - #188762)
- Revert the Fronius battery limits with the AC power limit (@farmio - #188878)
- Add child devices for Fronius MPPT modules (@farmio - #188230)
- Update outdated Fronius quality scale comments (@farmio - #188955)
Frontier Silicon
- Add new matching criterion for frontier_silicon autodiscovery. (@ast0815 - #187401)
- Add diagnostics to Frontier Silicon (@joostlek - #189121)
Fully Kiosk Browser
Fumis
- Add fuel became low trigger to Fumis integration (@frenck - #183754)
- Bump fumis to 0.4.2 (@frenck - #187060)
G
Gardena Bluetooth
- Construct the gardena_bluetooth DeviceInfo without an intermediate dict (@epenet - #184920)
- Use UnitOfTime constant in Gardena Bluetooth number (@joostlek - #187797)
Gatus
- Gatus: Fix dynamic sensors for newly discovered endpoints (@TN-1 - #182478)
- Claim quality scale platinum in Gatus manifest (@TN-1 - #181209)
General Transit Feed Specification (GTFS)
- Add tests for GTFS sensor (@raman325 - #187423)
- Fix GTFS include_tomorrow departures using today’s date (@raman325 - #187425)
- Fix GTFS missing past-midnight departures before midnight (@raman325 - #187426)
- Fix GTFS sensors sharing a feed racing on first import (@raman325 - #187427)
- Fix GTFS trip attributes not cleared without a departure (@raman325 - #187428)
- Close the GTFS departure query connection (@raman325 - #187488)
- Fix GTFS next departure when the feed time zone differs (@raman325 - #187429)
Generic Camera
- Remove double spaces in strings (@frenck - #184494)
- Translate camera stream not supported error (@frenck - #184576)
- Test generic config flow error recovery (@erwindouna - #185487)
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Generic hygrostat
- Move generic_hygrostat constants to const.py (@epenet - #189184)
- Add a state attribute enum to generic_hygrostat (@epenet - #189185)
Generic Thermostat
- Validate the generic thermostat minimum temperature is not above the maximum (@frenck - #185261)
- Fix Generic thermostat temperature restoration using the saved unit (@abmantis - #185990)
- Add precision and temperature step options to generic thermostat config flow (@hmistry - #177195)
Genius Hub
- Move geniushub switch override registration to services module (@epenet - #184403)
- Raise ConfigEntryError on response error in geniushub (@gjohansson-ST - #185011)
Geolocation
- Define public names of the geo_location integration (@epenet - #186620)
- Move geo_location entity classes to entity module (@epenet - #186792)
GeoNet NZ Quakes
GeoSphere Austria Warnings
- geosphere_austria_warnings: rename “Warning level” sensor to “Active warning level” (@a7rk - #183374)
Ghost
- Use UnitOfRatio.PERCENTAGE in Ghost sensor (@joostlek - #187799)
- Use fixed config entry ids in tests (@epenet - #188140)
Glances
Global Disaster Alert and Coordination System (GDACS)
go2rtc
- Raise ConfigEntryError when unable to connect in go2rtc (@gjohansson-ST - #185012)
Goal Zero Yeti
GoodWe Inverter
Google Assistant
- Raise ConfigEntryError when project ID changed in google_assistant (@gjohansson-ST - #185015)
- Use a typed key for Google Assistant YAML config (@erwindouna - #185610)
- Preserve pre-migration entity names as aliases in voice assistants (@arturpragacz - #184341)
- Define public names of the google_assistant integration (@epenet - #187165)
- Pass a DeviceInfo to async_get_or_create_device in bluetooth, device_tracker, google_assistant and mqtt (@epenet - #187571)
- Use platform action enums in google_assistant (@epenet - #188081)
- Use input helper and timer action enums in integrations (@epenet - #188148)
- Add reload service to Google Assistant (@RReverser - #183910)
Google Assistant SDK
Google Calendar
- Move google service registration to services module (@epenet - #184633)
- Raise ConfigEntryError on invalid calendar config in google (@gjohansson-ST - #185014)
- Don’t include exception text in google translation placeholders (@gjohansson-ST - #185084)
- Prevent Google Calendar cache recreation after removal (@balloob - #186492)
- Bump ical to 14.3.1 (@allenporter - #187546)
- Add reconfigure flow to Google Calendar (@joostlek - #189077)
Google Cast
- Store the cast refresh token in the runtime data (@epenet - #184903)
- Move cast service registration to services module (@epenet - #184916)
- Fix Cast state errors after device invalidation (@minimicro34 - #185219)
- Define public names of the cast integration (@epenet - #187794)
- Bump pychromecast to 14.1.0 (@emontnemery - #189244)
- Add diagnostics to Google Cast (@joostlek - #189126)
- Prefer cloud custom domains in get_url (@balloob - #189471)
- Bump pychromecast to 14.1.1 (@emontnemery - #190164)
Google Drive
- Use freezer instead of coordinator refresh in google_drive tests (@erwindouna - #185109)
- Translate backup agent exceptions (@zweckj - #185957)
- Convert backup tests in google_drive to end-to-end (@emontnemery - #188471)
- Close backup download stream in google_drive when not fully read (@emontnemery - #188686)
Google Gemini
- Raise instead of returning False when unloading Google Gemini (@gjohansson-ST - #186228)
- Route Gemini Interactions-API-only STT models through
interactions.create(@nikosavola - #180410) - Hide Google Generative AI advanced options behind the recommended toggle (@balloobbot - #187969)
- Default Google AI TTS to Gemini 3.8 Flash (@nikosavola - #187857)
- Add missing supported languages to Google AI TTS (@nikosavola - #187859)
- Add style option to Google AI TTS (@nikosavola - #187858)
- Mark nano-banana models as image generators (@ImSorryButWho - #188392)
- Add Google AI TTS voice library voices (@nikosavola - #187874)
Google Health
Google Maps Travel Time
- Remove stray spaces after newlines in strings (@frenck - #184504)
- Add tronikos as google_travel_time code owner (@tronikos - #188292)
- Raise HomeAssistantError on all google_travel_time action failures (@tronikos - #188290)
- Use python-google-maps-routing-api in google_travel_time (@tronikos - #188289)
- Bump google-maps-routing-api to 0.0.3 (@tronikos - #188461)
- Add static_duration to google_travel_time action responses (@tronikos - #188308)
Google Nest
- Raise ConfigEntryError instead of returning False in nest setup (@gjohansson-ST - #185098)
- Remove redundant motion translation name from Google Nest (@frenck - #185332)
- Stop querying Google-hosted Pub/Sub topics in Nest config flow (@allenporter - #187052)
- Add reconfigure flow for Nest Pub/Sub topic and subscription (@allenporter - #187156)
- Return None from config entry method mocks in integration tests (batch 21: nest–sky_hub) (@gjohansson-ST - #188161)
- Add repair issues for Nest Pub/Sub topic migration and missing subscription (@allenporter - #188119)
- Clarify Nest legacy Pub/Sub topic repair issue description (@allenporter - #188989)
Google Sheets
- Assert reauth flow instead of mocking async_start_reauth in Google Sheets test (@joostlek - #186284)
- Fix Google Sheets append failing when new headers exceed the sheet’s columns (@zerafachris - #187720)
Google Tasks
Google Translate text-to-speech
Google Weather
- Update links to the new contributors website (@frenck - #186884)
- Bump python-google-weather-api to 0.0.8 (@moellere - #187232)
- Bump python-google-weather-api to 0.0.9 (@tronikos - #188297)
Google Wifi
Govee Bluetooth
- Add diagnostics to Govee Bluetooth (@joostlek - #189149)
- Move Govee Bluetooth diagnostics assert behind TYPE_CHECKING (@joostlek - #189224)
Govee lights local
- Govee light local - Use a single controller for all network interfaces (@Galorhallen - #181684)
- Govee light local bump 3.2.0 (@Galorhallen - #188099)
- Govee light local update to 3.3.1 (@Galorhallen - #188615)
- Add diagnostics to Govee lights local (@joostlek - #189139)
- Govee light local temperature ranges (@Galorhallen - #189442)
Grandstream Home
- Add Grandstream Home integration (@wtxu-gs - #167872)
- Don’t start the Grandstream Home user flow with data in tests (@joostlek - #186478)
Gree Climate
- Bump greeclimate version (@eshattow - #185572)
- Bump greeclimate to 3.2.2 (@cmroche - #186555)
- Bump greeclimate to 3.4.1 (@cmroche - #187214)
- Bump greeclimate to 3.5.2 (@cmroche - #187360)
- Add diagnostics to Gree Climate (@joostlek - #189137)
Gree Infrared
- Fix Gree infrared temperature restoration using the saved unit (@abmantis - #185528)
- Add turn on and turn off to Gree Infrared climate (@Dr-Blank - #186469)
- Share Gree Infrared AC state through runtime data (@Dr-Blank - #184502)
- Add switch platform to Gree Infrared (@Dr-Blank - #182669)
- Add diagnostics to Gree Infrared (@Dr-Blank - #187712)
- Add reconfigure flow to Gree Infrared (@Dr-Blank - #187710)
- Bump Gree Infrared to platinum quality scale (@Dr-Blank - #188307)
Greencell
- Add logging when unavailable in greencell integration (@BrzezowskiGC - #182814)
- Remove redundant power translation name from Greencell (@frenck - #185297)
Group
- Move group service registration to services module (@epenet - #184305)
- Define public names of the group integration (@epenet - #187245)
- Add support for calendar groups (@elupus - #187072)
- Fix wrong import in calendar tests (@edenhaus - #187752)
- Set config entry id on group repair issues (@emontnemery - #187813)
- Use platform action enums in group (@epenet - #188067)
- Add action enums to timer, counter and group (@epenet - #188086)
- Pin off to the front of grouped light effect lists (@alexbbt - #187227)
- Add a state attribute enum to group and remove unused constants (@epenet - #188738)
Growatt
- Raise config entry errors when migration fails in growatt_server (@gjohansson-ST - #185316)
- Use UnitOfApparentPower constant in Growatt sensor (@joostlek - #187804)
Guntamatic
- Translate guntamatic coordinator errors and exception translations (@JensTimmerman - #179928)
H
Habitica
- Pass name placeholder explicitly in habitica notify exceptions (@gjohansson-ST - #185877)
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Hanna
- Add Hanna coordinator error tests and mark test coverage done (@SridharNeti - #184391)
Happiest Baby Snoo
- Add reauthentication flow to Happiest Baby Snoo (@joostlek - #186394)
- Import EntityCategory from const in snoo (@epenet - #186578)
Hardkernel
- Raise ConfigEntryError instead of returning False in hardkernel setup (@gjohansson-ST - #185016)
Hase iQ
- Add Hase iQ integration (@bbayszczak - #184256)
- Return None from config entry methods in integrations (hase_iq, marantz_rs232) (@gjohansson-ST - #186706)
haven
HAVEN IAQ
- Add air quality category to HAVEN IAQ (@balloob - #187263)
- Return None from config entry methods in HAVEN IAQ (@gjohansson-ST - #187728)
Hayward Omnilogic
- Move omnilogic service registration to services module (@epenet - #184462)
- Raise ConfigEntryError on login failure in omnilogic (@gjohansson-ST - #185103)
Hegel Amplifier
- Fix Hegel connection watcher AttributeError (@surajvelip - #188518)
Helty Flow Cloud
- Add Helty Flow Cloud integration (@ebaschiera - #181364)
- Return None from config entry methods in Helty Flow Cloud (@gjohansson-ST - #187729)
- Bump pyheltycloud to 0.2.1 (@ebaschiera - #187916)
- Add reauthentication flow to Helty Flow Cloud (@ebaschiera - #187913)
- Add diagnostics to Helty Flow Cloud (@ebaschiera - #188239)
- Add filter alarm binary sensor to Helty Flow Cloud (@ebaschiera - #187914)
- Add sensor platform to Helty Flow Cloud (@ebaschiera - #187908)
- Bump pyheltycloud to 0.2.2 (@ebaschiera - #188730)
- Bump Helty Flow Cloud to silver quality scale (@ebaschiera - #188659)
HERE Travel Time
Heyu X10
Hikvision
- Mark action-exceptions as done for ovhcloud_ai_endpoints and hikvision (@epenet - #184051)
- Remove redundant motion translation name from Hikvision (@frenck - #185318)
- Add Hikvision thermometry binary sensor (@ptarjan - #186501)
- Bump pyHik to 0.4.8 (@ptarjan - #186502)
- Add “others” as a known Hikvision detection target (@ptarjan - #187204)
Hisense AEH-W4A1
- Use a typed key for Hisense AEH-W4A1 config (@erwindouna - #185609)
History
History Stats
- Use typed config entry in History Stats coordinator (@frenck - #185373)
- Use diagnostics registry entry helpers in history_stats diagnostics (@arturpragacz - #186891)
- Fix history_stats counting time past the end of the period (@raman325 - #187634)
Hive
- Remove user-configurable polling interval from hive (@tr4nt0r - #184251)
- Move hive service registration to services module (@epenet - #184607)
Holiday
- Add holiday country data description and province fallback test (@gjohansson-ST - #186024)
- Prevent duplicate entries from holiday options flow (@gjohansson-ST - #186723)
- Set holiday quality scale to bronze (@gjohansson-ST - #186026)
- Bump holidays to 0.107 (@gjohansson-ST - #187605)
- Pass step_id explicitly in holiday config flow (@gjohansson-ST - #187862)
Home Assistant Alerts
- Use issues refresh helper in homeassistant_alerts (@emontnemery - #188028)
Home Assistant Analytics Insights
- Add exception translations to Home Assistant Analytics Insights (@joostlek - #186315)
- Add diagnostics to Home Assistant Analytics Insights (@joostlek - #186505)
Home Assistant Cloud
- Move cloud service registration to services module (@epenet - #184683)
- Preserve pre-migration entity names as aliases in voice assistants (@arturpragacz - #184341)
- Allow setting owning config entry on repair issues (@emontnemery - #186197)
- Define public names of the cloud integration (@epenet - #187160)
- Add UTC offset to log timestamps (@agners - #186660)
- Bump hass-nabucasa to 2.8.0 (@javitonino - #187848)
- Convert backup tests in cloud to end-to-end (@emontnemery - #188342)
- Add an action enum to cloud (@epenet - #189248)
- Bump hass-nabucasa to 2.8.1 (@javitonino - #189295)
- Align cloud auth request timeouts with hass-nabucasa (@javitonino - #189309)
- Prefer cloud custom domains in get_url (@balloob - #189471)
Home Assistant Connect ZBT-1
- Raise ConfigEntryError for duplicate entries in homeassistant_sky_connect migration (@gjohansson-ST - #185357)
- Add support for ESPHome USB serial proxies (@puddly - #183645)
- Add diagnostics to Home Assistant Connect ZBT-1 (@joostlek - #189158)
- Add exception translations to Home Assistant Connect ZBT-1 (@joostlek - #189031)
- Show ZBT-2 and ZBT-1 connections via ESPHome serial proxies (@puddly - #189450)
Home Assistant Connect ZBT-2
- Raise ConfigEntryError for duplicate entries in homeassistant_connect_zbt2 migration (@gjohansson-ST - #185321)
- Add support for ESPHome USB serial proxies (@puddly - #183645)
- Bump universal-silabs-flasher to 1.2.0 (@puddly - #188817)
- Show ZBT-2 and ZBT-1 connections via ESPHome serial proxies (@puddly - #189450)
Home Assistant Core Integration
- Fix flaky homeassistant scene apply service test (@epenet - #183840)
- Use select and descriptive link text instead of click in strings (@frenck - #184543)
- Add a HomeAssistantService enum for the homeassistant actions (@epenet - #184456)
- Move homeassistant service registration to services module (@epenet - #184917)
- Add common translations for file read errors (@erwindouna - #185672)
- Add async_unload_platforms_or_raise to config entries (@gjohansson-ST - #185989)
- Remove placeholder and stray markdown from LLM live context prompt (@jimjaeger - #186286)
- Add test of state trigger with duration + list of states (@emontnemery - #186396)
- Add integration category names and descriptions (@frenck - #186870)
- Add integration category icons (@frenck - #186882)
- Add homeassistant.updated trigger (@frenck - #186894)
- Add restart and reboot required triggers and conditions (@frenck - #184049)
- Use a distinct icon for the homeassistant.updated trigger (@frenck - #186918)
- Add the Helpers integration category (@frenck - #186914)
- Add render template tool to the Home Assistant LLM API (@balloob - #185993)
- Define public names of the homeassistant integration (@epenet - #187166)
- Add elevation unit to set_location action selector (@klaasnicolaas - #187122)
- Remove orphaned system user of removed almond integration (@mib1185 - #186943)
- Dump the event trigger config with plain keys in the composite device warning (@epenet - #187684)
- Allow target to exclude entities (@jpbede - #187290)
- Only allow custom integrations to return a boolean from config entry methods (@gjohansson-ST - #187778)
- Add search actions tool to the Home Assistant LLM API (@balloob - #188640)
- Return changed entity IDs from expose entity websocket command (@jpbede - #188809)
- Add the connectivity manifest key (@frenck - #188806)
- Add call action tool to the Home Assistant LLM API (@balloob - #188641)
- Use the scene action enums in the homeassistant scene platform (@epenet - #189222)
- Add a state attribute enum to scene (@epenet - #189223)
- Enforce strict target format in exclude blocks (@arturpragacz - #189275)
Home Assistant frontend
- Add Marketplace integration (@frenck - #183502)
- Isolate frontend manifest between tests (@epenet - #184651)
- Move frontend theme helpers and manifest to helpers module (@epenet - #184905)
- Move frontend theme actions to services module (@epenet - #186460)
- Define public names of the frontend integration (@epenet - #187193)
- Add system info LLM tool (@balloob - #188522)
- Add the connectivity manifest key (@frenck - #188806)
- Export DEFAULT_THEME_COLOR from the frontend integration (@epenet - #189211)
- Update frontend to 20261028.0 (@bramkragten - #189286)
- Update frontend to 20261028.1 (@bramkragten - #189465)
- Update frontend to 20261028.2 (@bramkragten - #189624)
- Update frontend to 20261028.3 (@bramkragten - #190085)
- Update frontend to 20261028.4 (@bramkragten - #190359)
Home Assistant Green
- Raise ConfigEntryError instead of returning False in homeassistant_green setup (@gjohansson-ST - #185017)
Home Assistant Hardware
- Use freezer instead of coordinator refresh in homeassistant_hardware tests (@erwindouna - #185198)
- Define public names of the homeassistant_hardware integration (@epenet - #187218)
- Bump universal-silabs-flasher to 1.2.0 (@puddly - #188817)
- Bump ha-silabs-firmware-client to 0.4.0 (@puddly - #188829)
- Show ZBT-2 and ZBT-1 connections via ESPHome serial proxies (@puddly - #189450)
- Bump universal-silabs-flasher to 1.3.0 (@puddly - #189929)
Home Assistant Onboarding
- Allow IndieAuth client_ids matching the request netloc (@elupus - #186543)
- Define public names of the onboarding integration (@epenet - #187176)
Home Assistant Supervisor
- Advance time instead of refreshing coordinator in hassio tests (@erwindouna - #185186)
- Handle apps missing from the store in the hassio app manager (@agners - #184859)
- Adapt hassio to in-place entity ID change (@emontnemery - #184866)
- Remove redundant state translation key from Home Assistant Supervisor (@frenck - #185314)
- Add host reboot required to the system state (@frenck - #184046)
- Bump aiohasupervisor to 0.7.0 (@agners - #185468)
- Add disk mount test cases to hassio tests (@agners - #185566)
- Point app links at the apps panel (@timmo001 - #186629)
- Add the settings for automatic Home Assistant updates (@frenck - #186886)
- Remember skipped versions for automatic Home Assistant updates (@frenck - #186912)
- Add flow_step decorator to infer step_id in data entry flow results (@arturpragacz - #186059)
- Add last successful automatic backup size sensor (@erwindouna - #185641)
- Keep Supervisor helpers in Core and expose the registry fixture (@balloob - #187268)
- Install Home Assistant patch releases automatically on schedule (@frenck - #186923)
- Bump aiohasupervisor to 0.8.0 (@agners - #187578)
- Revert “Add flow_step decorator to infer step_id in data entry flow results” (@gjohansson-ST - #187624)
- Label hassio reboot repair button Reboot instead of Submit (@Markus98 - #187982)
- Bump aiohasupervisor to version 0.8.1 (@emontnemery - #187987)
- Add common reboot action translation key (@Markus98 - #187994)
- Log failed hassio ingress session validation at debug level (@agners - #188004)
- Improve closing of streams in backup (@emontnemery - #188038)
- Use issues refresh helper in hassio (@emontnemery - #188027)
- Set X-Hass-Source for aiohasupervisor client library calls (@mdegat01 - #188076)
- Add LLM tools to query the full logs (@balloob - #187971)
- Add dedicated websocket commands for add-on ingress sessions (@agners - #184773)
- Reload network adapters on Supervisor network events (@abmantis - #188065)
- Read the Supervisor log for the integration log history (@erwindouna - #189404)
Home Assistant WebSocket API
- Add Home Assistant restart required system state helper (@frenck - #184036)
- Allow admins to dismiss a pending restart (@frenck - #184475)
- Add host reboot required to the system state (@frenck - #184046)
- Define public names of the websocket_api integration (@epenet - #187209)
- Revoke the current token at once when deleting all refresh tokens (@zweckj - #187504)
- Redact secrets from received websocket messages in the debug log (@zweckj - #187909)
- Keep the deferred auth close tests from leaking their connection (@zweckj - #187906)
- Allow target to exclude entities (@jpbede - #187290)
- Reject exclude-only targets in trigger, condition and action configs (@jpbede - #188389)
- Limit request body size on unauthenticated auth endpoints (@erwindouna - #188808)
- Add websocket command to explain target excludes (@jpbede - #190119)
Home Assistant Yellow
- Raise ConfigEntryError instead of returning False in homeassistant_yellow setup (@gjohansson-ST - #185019)
- Remove redundant downgrade check in homeassistant_yellow migration (@gjohansson-ST - #185358)
- Define public names of the homeassistant_yellow integration (@epenet - #187774)
- Bump universal-silabs-flasher to 1.2.0 (@puddly - #188817)
Home Connect
- Fix stale program finish time and progress in Home Connect (@JulianHock - #187016)
- Add base program functionality to start selected program (@Diegorro98 - #188621)
Homee
- bump pyHomee 1.4.6 (@Taraman17 - #186475)
- Pass step_id explicitly in homee config flow (@gjohansson-ST - #187863)
- bump pyHomee to 1.4.7 (@Taraman17 - #188571)
HomeKit Bridge
- Move homekit YAML import and instance helpers to util module (@epenet - #184686)
- Move homekit service registration to services module (@epenet - #184883)
- Add Name characteristic to HomeKit HeaterCooler service (@blvosh2 - #185744)
- Use platform action enums in homekit (@epenet - #188082)
- Use input helper and timer action enums in integrations (@epenet - #188148)
- Avoid HomeKit errors for alarm panels without arm home (@SeoFood - #187915)
- Add ozone and sulphur dioxide sensors to HomeKit (@3011felix - #188533)
- Add exception translations to HomeKit Bridge (@joostlek - #189032)
- Add HomeKit connectivity metadata to integrations (@balloob - #189900)
HomeKit Device
- Redact AccessoryIPs in HomeKit Controller diagnostics (@BilalAtique - #183779)
- Clean up HomeKit Controller entity naming (@nijel - #177663)
- Remove redundant duration translation name from HomeKit Device (@frenck - #185319)
- Fix stale HomeKit characteristic entities after config changes (@jfremy - #177696)
- Add an accessory identifier method in homekit_controller (@epenet - #186614)
- Remove unused serial number workaround detection in homekit_controller (@epenet - #187346)
- Import names from their source modules in homekit_controller (@epenet - #187777)
- Fall back to default snapshot size for HomeKit cameras that reject th… (@trevornk - #187620)
- Add HomeKit connectivity metadata to integrations (@balloob - #189900)
HomeLink
- Add shared OAuth2 client authentication helper (@zweckj - #183240)
- HomeLink: Support browser-based login (@rjones-gentex - #181846)
HomematicIP Cloud
- Fix entity removal leaks in homematicip_cloud (@emontnemery - #183861)
- Add pull_latch action with PIN support to homematicip_cloud (@lackas - #179088)
- Use probatio.EnsureList in the HomematicIP Cloud pull latch schema (@frenck - #184678)
- Adapt homematicip_cloud to in-place entity ID change (@emontnemery - #184867)
- Raise ConfigEntryError when access point setup fails in homematicip_cloud (@gjohansson-ST - #185030)
- Build the homematicip_cloud switches from channels, not device classes (@lackas - #180966)
- Bump homematicip to 2.19.0 (@lackas - #186130)
- Return None from config entry methods in HomematicIP Cloud (@gjohansson-ST - #186253)
- Report failed HomematicIP Cloud calls that return a RestResult (@lackas - #185910)
- Add a heating output binary sensor for HomematicIP wall thermostats (@lackas - #186347)
- Start a HomematicIP Cloud reauthentication when the token is rejected at setup (@lackas - #186528)
- Build the homematicip_cloud covers from channels, not device classes (@lackas - #185695)
- Add distance and height sensors for the HomematicIP ELV-SH-DUSI (@lackas - #185701)
- Add the motion and illuminance entities of the HomematicIP HmIP-SMO230 (@lackas - #187876)
- Build the homematicip_cloud lights from channels, not device classes (@lackas - #188232)
- Add an identify button to HomematicIP Cloud devices (@lackas - #188221)
- Add the HomematicIP water supply stop valve and water alarm sensor (@lackas - #186498)
- Bump homematicip to 2.20.0 (@lackas - #188920)
- Set the wired push button LEDs on their channel (@lackas - #188936)
Homevolt
- Use freezer instead of coordinator refresh in homevolt tests (@erwindouna - #185185)
HomeWizard
- Fix orphaned HomeWizard external devices after unique ID migration (@matthiasdebaat - #172657)
- Use freezer instead of coordinator refresh in homewizard tests (@erwindouna - #185110)
- Remove redundant uptime translation key from HomeWizard (@frenck - #185320)
- Improve homewizard repair issue creation (@emontnemery - #187815)
Honeywell Lyric
- Move lyric service registration to services module (@epenet - #184476)
- Bump aiolyric to 2.2.1 (@timmo001 - #186370)
- Add Honeywell Lyric climate tests (@timmo001 - #186379)
- Tidy up Honeywell Lyric room priority select (@timmo001 - #186382)
- Fix Honeywell Lyric TCC thermostat mode (@timmo001 - #186385)
- Tidy up Honeywell Lyric climate entity (@timmo001 - #186380)
- Group sequential async_add_entities calls in Honeywell Lyric (@joostlek - #187520)
- Add Lyric room sensor tests for both priority schemas (@sstangle73 - #186467)
Honeywell String Lights
- Store transmitter entity ID in Honeywell String Lights config entry (@abmantis - #186546)
- Restrict to entity ID in RF transmitter consumer entity (@abmantis - #186704)
Honeywell Total Connect Comfort (Europe)
- Migrate evohome climate and water heater to native temperature properties (@emontnemery - #184820)
- Remove redundant constructor from evohome system reset button (@zxdavb - #185717)
- Remove deprecated evohome reset actions and reset preset (@zxdavb - #185704)
- Remove deprecated evohome set_system_mode action without entity_id (@zxdavb - #185705)
- Bump evohome-async to v3.0.0 (@zxdavb - #185694)
- Only pass hass to evohome async_setup_services (@zxdavb - #186055)
- Make evohome set_system_mode an entity action (@zxdavb - #186123)
- Merge evohome set_system_mode validation into the controller (@zxdavb - #186180)
- Prepare Evohome tests for multi-location accounts (@zxdavb - #186520)
- Extend Evohome test fixtures to include multi-location accounts (@zxdavb - #186400)
- Bump evohome-async to 3.1.0 (@zxdavb - #187026)
- Fetch evohome schedules only when stale, not on every poll (@zxdavb - #187577)
- Raise HomeAssistantError when an evohome action fails (@zxdavb - #187883)
- Optimize retrieval of evohome schedules (@zxdavb - #187958)
- Fix an evohome override duration that spans a change to/from DST (@zxdavb - #190109)
Honeywell Total Connect Comfort (US)
- Raise ConfigEntryError when no devices are found in honeywell (@gjohansson-ST - #185037)
Hot Spring
HP Printer
- Add new integration HP printer (@chemelli74 - #184161)
- Drop support for Uptime Kuma < 2.0.0 (@tr4nt0r - #187418)
- Return None from config entry methods in HP Printer (@gjohansson-ST - #187730)
- Bump aiohpprinter to 3.1.0 (@chemelli74 - #188612)
HTML5 Push Notifications
- Remove deprecated actions from HTML5 integration (@tr4nt0r - #182636)
- Pass step_id explicitly in html5 config flow (@gjohansson-ST - #187864)
- Mock registration save in html5 notify tests (@erwindouna - #188813)
HTTP
- Reject overlapping HTTP listen addresses when saving the config (@agners - #182258)
- Version http SSL profiles and offer upgrade to Mozilla v6 via repair (@Markus98 - #183916)
- Define public names of the http integration (@epenet - #187168)
- Count a failed login before looking up the remote host (@zweckj - #187215)
- Import names from their source modules in http (@epenet - #187464)
- Bound the reverse DNS lookup on invalid auth requests (@costajohnt - #182514)
- Limit request body size on unauthenticated auth endpoints (@erwindouna - #188808)
- Recommend Intermediate v6 and clarify the http SSL profile repair (@agners - #189341)
Huawei LTE
- Move huawei_lte service registration to services module (@epenet - #184684)
- Raise ConfigEntryError when serial number is missing in huawei_lte (@gjohansson-ST - #185045)
- Remove redundant battery translation key from Huawei LTE (@frenck - #185322)
- Remove logger-period disable in huawei_lte sensor (@gjohansson-ST - #185865)
- Improve huawei_lte device tracker tests (@emontnemery - #189215)
Humidifier
- Use TaggedUnion for device automation and ntfy action schemas (@balloobbot - #186178)
- Define public names of the humidifier integration (@epenet - #186622)
- Move humidifier entity classes to entity module (@epenet - #186810)
- Import constants directly in climate and humidifier device automation (@epenet - #188175)
Humidity
Hunter Douglas PowerView
- Raise ConfigEntryError when hub is not primary in hunterdouglas_powerview (@gjohansson-ST - #185066)
- Use typed config entry in Hunter Douglas PowerView coordinator (@frenck - #185375)
- Use _handle_coordinator_update in hunterdouglas_powerview (@gjohansson-ST - #185866)
- Automatically remove removed devices in hunter douglas powerview (@kjboyleii - #184976)
Hunter Hydrawise
- Bump pydrawise to 2026.9.1 (@dknowles2 - #183141)
- Move hydrawise service registration to services module (@epenet - #184606)
- Add frenck as codeowner of Hydrawise (@frenck - #185493)
- Add quality scale file to Hydrawise (@frenck - #185511)
- Add translated exceptions to Hydrawise entity actions (@frenck - #185538)
- Use icon translations for Hydrawise water use sensors (@frenck - #185682)
- Add duration device class to Hydrawise remaining watering time sensor (@frenck - #185683)
- Bump pydrawise to 2026.10.1 (@frenck - #185686)
- Fix Hydrawise reauth for legacy entries without username (@frenck - #187239)
- Add reconfigure flow to Hydrawise (@frenck - #187235)
- Add diagnostics to Hydrawise (@frenck - #187217)
- Add serial number and software version to Hydrawise controller devices (@frenck - #187292)
- Use Home Assistant’s aiohttp session in Hydrawise (@frenck - #187281)
- Set entity category on Hydrawise connectivity sensor (@frenck - #187280)
- Add state class to Hydrawise water use and watering time sensors (@frenck - #187291)
- Set Hydrawise valve state optimistically on open and close (@frenck - #187286)
Husqvarna Automower
- Import names from their source modules in husqvarna_automower (@epenet - #187693)
- Use child device in Husqvarna Automower for work areas (@Thomas55555 - #180563)
Huum
- Remove redundant humidity translation name from Huum (@frenck - #185323)
- Use UnitOfRatio.PERCENTAGE in Huum number (@joostlek - #187803)
HVV Departures
Hydro-Québec Peak Events
- Add Hydro-Quebec Peak Events integration (@Beat-YT - #179602)
- Add binary sensors to Hydro-Quebec Peak Events (@Beat-YT - #185148)
Hyperion
I
iBeacon Tracker
IDrive e2
- Convert backup tests in idrive_e2 to end-to-end (@emontnemery - #188472)
- Close backup download stream in idrive_e2 when not fully read (@emontnemery - #188687)
IFTTT
- Store ifttt API keys in hass.data (@epenet - #184658)
- Move ifttt service registration to services module (@epenet - #184699)
- Move ifttt push_alarm_state action to services module (@epenet - #186100)
igloohome
IKEA Idasen Desk
Image
- Add exception translations to image (@frenck - #184417)
- Add common translations for file system errors (@erwindouna - #184428)
- Raise translated errors when an image is unavailable (@joostlek - #186334)
- Define public names of the image integration (@epenet - #186623)
Image processing
- Define public names of the image_processing integration (@epenet - #186624)
- Move image_processing entity classes to entity module (@epenet - #186822)
Image upload
- Define public names of the image_upload integration (@epenet - #187768)
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
IMAP
Immich
- Use the common read error helper in immich (@mib1185 - #186937)
- Use fixed config entry ids in tests (@epenet - #188140)
Imou
- Add Imou alarm control panel platform (@Imou-OpenPlatform - #182481)
- Add Imou integration reconfiguration flow (@Imou-OpenPlatform - #185574)
- Add Imou switch entities for additional device settings (@Imou-OpenPlatform - #182469)
- Allow removing stale Imou devices from the device registry (@Imou-OpenPlatform - #185573)
- Translate Imou coordinator update failures (@Imou-OpenPlatform - #185896)
- Add Imou entity categories (@Imou-OpenPlatform - #185895)
- Disable Imou Live view HD camera by default (@Imou-OpenPlatform - #185575)
- Add Imou siren entities (@Imou-OpenPlatform - #185914)
- Mark the Imou stale-devices quality rule done (@Imou-OpenPlatform - #186381)
- Mark Imou repair-issues exempt and report quota in diagnostics (@Imou-OpenPlatform - #186595)
- Mark the Imou integration quality scale gold (@Imou-OpenPlatform - #188109)
Indevolt
- Fix/indevolt number limits 10800 (@indevolt-y - #185181)
- Use MockConfigEntry flow helpers in Indevolt tests (@joostlek - #186447)
INDI Allsky
- Remove redundant wind direction translation key from INDI Allsky (@frenck - #185325)
- indi_allsky: Bump aioindiallsky to V0.1.4 (@TN-1 - #185751)
- Indi_allsky: fix image endpoints (@TN-1 - #185676)
- indi_allsky: Fetch sensors on exposure completion and periodically (@TN-1 - #185680)
- indi_allsky: bump aioindiallsky to 0.1.6 (@TN-1 - #185770)
- Indi_allsky: Add authentication support (@TN-1 - #185756)
- Mock integration setup in INDI Allsky reauth flow tests (@zweckj - #187440)
- Bump aioindiallsky to 0.1.7 (@TN-1 - #188116)
- indi_allsky: Add zeroconf autodiscovery (@TN-1 - #186790)
Infrared
- Add the re-exported names to the infrared public names (@epenet - #186662)
- Remove the entity platform exemption from the class module pylint check (@epenet - #187147)
- Fix infrared receiver subscription for rx+tx consumers (@abmantis - #187385)
Input boolean
- Move input_boolean service registration to services module (@epenet - #184278)
- Move input_boolean entity to entity module (@epenet - #186358)
- Define public names of the input_boolean integration (@epenet - #187297)
- Use the enums in the input_boolean tests (@epenet - #188721)
Input button
- Move input_button service registration to services module (@epenet - #184286)
- Remove deprecated async_track_state_change from event (@gjohansson-ST - #184756)
- Move input_button entity to entity module (@epenet - #186356)
- Define public names of the input_button integration (@epenet - #187170)
- Add a state attribute enum to input_button (@epenet - #188692)
- Use the enums in the input_button tests (@epenet - #188736)
Input Datetime
- Move input_datetime service registration to services module (@epenet - #184285)
- Move input_datetime entity to entity module (@epenet - #186357)
- Define public names of the input_datetime integration (@epenet - #187219)
- Remove the unused ATTR_DATETIME and ATTR_TIMESTAMP constants from input_datetime (@epenet - #188718)
Input number
- Move input_number service registration to services module (@epenet - #184284)
- Migrate input_number to RestoreNumber (@jbouwh - #186367)
- Add device class support to input_number (@jbouwh - #185417)
- Move input_number entity to entity module (@epenet - #186355)
- Define public names of the input_number integration (@epenet - #187172)
- Remove the unused ATTR_INITIAL constant from input_number (@epenet - #188706)
Input select
- Move input_select service registration to services module (@epenet - #184283)
- Add exception translations to input_select (@frenck - #184414)
- Move input_select entity to entity module (@epenet - #186354)
- Define public names of the input_select integration (@epenet - #187246)
- Use the enums in the input_select tests (@epenet - #188720)
- Simplify the input_select reproduce state options check (@epenet - #188695)
Input text
- Move input_text service registration to services module (@epenet - #184279)
- Move input_text entity to entity module (@epenet - #186353)
- Define public names of the input_text integration (@epenet - #187173)
- Remove the unused attribute constants from input_text (@epenet - #188703)
Insteon
- Use probatio named validators instead of hand-rolled ranges (@frenck - #183815)
- Adapt insteon to in-place entity ID change (@emontnemery - #184868)
- Register insteon actions in async_setup (@epenet - #185928)
- Fix changing advanced Insteon device properties (@connorgallopo - #184967)
- Add Insteon connectivity metadata to integrations (@balloob - #189903)
Instituto Português do Mar e Atmosfera (IPMA)
Integral
- Add Device Class config option to Integral Sensor (@TCWORLD - #174545)
- Fix integration sensor restoring as unknown when its state is 0 (@raman325 - #187638)
- Add a state attribute enum to integration (@epenet - #189168)
IntelliClima
- Fix IntelliClima setup entry mock patching the wrong integration (@dvdinth - #184337)
- Bump pyintelliclima to 0.5.0 (@dvdinth - #184332)
- Report the IntelliClima fan running state and add fan state diagnostic binary sensors (@dvdinth - #184994)
Intent
- Adjust intent tests to use renamed climate properties (@emontnemery - #184843)
- Use platform action enums when calling platform actions (@epenet - #188071)
- Run delayed commands as the user who set the timer (@balloob - #190287)
Intent Script
- Split intent_script into const and helpers modules (@epenet - #184434)
- Move intent_script service registration to services module (@epenet - #184882)
International Space Station (ISS)
- Use freezer instead of coordinator refresh in iss tests (@erwindouna - #185189)
Internet Printing Protocol (IPP)
- Bump aioipp to 0.20.0 (@brianegge - #185810)
- Add exception translations to Internet Printing Protocol (IPP) (@joostlek - #189034)
iotty
- Add reauthentication flow to iotty (@joostlek - #186303)
- Remove redundant entity constructor in iotty (@joostlek - #189266)
Iperf3
- Move iperf3 constants to const module (@epenet - #184646)
- Move iperf3 service registration to services module (@epenet - #184708)
IRM KMI Weather Belgium
- Do not mutate coordinator data in irm_kmi weather forecasts (@YP30 - #182796)
- Follow the Home Assistant language in irm_kmi by default (@YP30 - #182938)
- Use fixed config entry ids in tests (@epenet - #188140)
iRobot Roomba and Braava
- Raise ConfigEntryError when connection fails in roomba (@gjohansson-ST - #185122)
- Migrate roomba to roombapy 2.0.2. (@johnnyh1975 - #184198)
- Support
runtimeStatsfield on run stats (@ussaka - #186691) - Fix Roomba 900-series pairing timeout and dynamic telemetry state updates (@Horghe20 - #188731)
- Add diagnostics to iRobot Roomba and Braava (@joostlek - #189132)
IronOS
- Remove redundant uptime translation name from IronOS (@frenck - #185327)
- Import binary sensor state constants from const in tests (@epenet - #186583)
ista EcoTrend
Ituran
- Use freezer instead of coordinator refresh in ituran tests (@erwindouna - #185183)
iZone
- Move iZone config entry discovery heal into async_migrate_entry (@Swamp-Ig - #182674)
- Move izone service registration to services module (@epenet - #184619)
- Test izone config flow error recovery (@erwindouna - #185490)
- Bump python-izone to 1.3.11 (@Swamp-Ig - #185808)
- Read native target temperature of the izone control zone (@epenet - #185929)
- Expose iZone control zone source on the controller climate (@Swamp-Ig - #178753)
- Bump python-izone to 1.3.12 (@Swamp-Ig - #188460)
J
Jandy iAquaLink
Jellyfin
- Bump jellyfin-apiclient-python to 1.19.0 (@mkowalski - #183948)
Jewish Calendar
JVC Projector
- Use freezer instead of coordinator refresh in jvc_projector tests (@erwindouna - #185176)
- Bump pyjvcprojector to 2.1.0 (@SteveEasley - #185970)
- Bump pyjvcprojector to 2.1.1 (@SteveEasley - #189751)
K
KACO Modbus
- Add a reconfigure flow to KACO Modbus (@g4bri3lDev - #181767)
- Add rest of the sensors to KACO Modbus (@g4bri3lDev - #181764)
KACO RS485
- Add KACO RS485 integration (@g4bri3lDev - #182109)
- Return None from config entry methods in KACO RS485 (@gjohansson-ST - #187731)
- Add more sensors to KACO RS485 (@g4bri3lDev - #187479)
- Add fault binary sensor to KACO RS485 (@g4bri3lDev - #187481)
- Add diagnostics to KACO RS485 (@g4bri3lDev - #188194)
- Bump kaco-serial to 1.0.3 (@g4bri3lDev - #189750)
Kaleidescape
- Bump pykaleidescape to 1.1.7 (@SteveEasley - #185742)
- Bump pykaleidescape to 1.2.0 (@SteveEasley - #185840)
Keenetic NDMS2 Router
- Remove user-configurable polling interval from keenetic_ndms2 (@tr4nt0r - #184257)
- Raise instead of returning False when unloading Keenetic NDMS2 Router (@gjohansson-ST - #186269)
- Improve keenetic_ndms2 device tracker tests (@emontnemery - #189216)
KEF
- Move kef service registration to services module (@epenet - #184830)
- Bump getmac to 0.9.6 (@chemelli74 - #184162)
Keyboard Remote
Keymitt MicroBot Push
Knocki
- Add exception translations to Knocki (@joostlek - #186317)
- Add diagnostics to Knocki (@joostlek - #186506)
KNX
- KNX: Derive binary sensor device class from project DPT (@farmio - #184474)
- Type the KNX weather and cover UI entity configurations (@farmio - #182731)
- Type the KNX fan, light and climate UI entity configurations (@farmio - #184523)
- Use device class selector for KNX sensor (@jbouwh - #185533)
- Type the KNX select and button UI entity configs (@farmio - #185187)
- Support response data in the KNX read action (@farmio - #185759)
- Type the KNX expose and time server store configs (@farmio - #185614)
- Add translations for KNX config panel validation errors (@farmio - #185839)
- Add missing label for the KNX payload selector’s number base (@farmio - #186094)
- Recognise the KNX interface device by its device id (@epenet - #186611)
- Update xknx to 4.0.0 (@farmio - #186650)
- Add knx.save_scene action (@farmio - #186719)
- Bump knx-telegram-store to 0.15.2 (@farmio - #187296)
- Lock the KNX telegram database while a backup copies it (@farmio - #187309)
- Track disabled KNX entities in the group address map (@farmio - #185902)
- Fix KNX entity test import (@piitaya - #187888)
- Use StrEnums for KNX action names and arguments (@farmio - #187935)
- Initialize the KNX telegram store in the background (@farmio - #186006)
- Stop the KNX telegram store when the config entry setup fails (@farmio - #188884)
- Update knx-frontend to 2026.10.29.192948 (@farmio - #189505)
- Add KNX connectivity metadata to integrations (@balloob - #189904)
- Bump xknx to 4.1.0 (@farmio - #190116)
- Bump knx-frontend to 2026.11.2.195507 (@farmio - #190120)
Kodi
- Raise ConfigEntryError on invalid auth in kodi (@gjohansson-ST - #185076)
- Add reauth flow to kodi (@gjohansson-ST - #185850)
- Add tests for Kodi media player (@olympia - #185763)
Kostal Plenticore Solar Inverter
- Raise ConfigEntryError on authentication failure in kostal_plenticore (@gjohansson-ST - #185078)
- Add reauth flow to kostal_plenticore (@gjohansson-ST - #185841)
Kraken
- Remove user-configurable polling interval from
kraken(@tr4nt0r - #184381) - Fix Kraken trading volume sensor units (@eifinger - #187441)
Kuler Sky
- Raise ConfigEntryError when migration finds no devices in kulersky (@gjohansson-ST - #185359)
KWB Easyfire
- Use TaggedUnion for filter, bayesian, modbus, kwb and opentherm_gw schemas (@balloobbot - #186179)
L
La Marzocco
- Catch all library errors in La Marzocco entity actions (@epenet - #184057)
- Bump pylamarzocco to 2.5.0 (@zweckj - #184120)
- Support bluetooth shot timer in lamarzocco (@zweckj - #184119)
- Bump pylamarzocco to 2.5.1 (@zweckj - #184247)
- Bump pylamarzocco to 2.5.2 (@zweckj - #184304)
- Add bluetooth connectivity sensor to lamarzocco (@zweckj - #184248)
- Bug fixes for lamarzocco bluetooth handling (@zweckj - #184302)
- Raise config entry errors when migration fails in lamarzocco (@gjohansson-ST - #185369)
- Handle missing steam boiler widget in La Marzocco steam level select (@zweckj - #185908)
- Define init before other methods in La Marzocco (@joostlek - #187553)
- Use device-reported La Marzocco coffee temperature limits (@ayn - #188840)
- Bump pylamarzocco to 2.5.3 (@zweckj - #189408)
- Ask to accept the La Marzocco privacy policy in config and reauth flows (@zweckj - #189414)
LaMetric
- Bump demetriek to 2.0.0 (@frenck - #184149)
- Add time platform to LaMetric (@joostlek - #181982)
- Mark the already covered LaMetric quality scale rules as done (@frenck - #184157)
- Set parallel updates for LaMetric (@frenck - #184155)
- Translate the exceptions of LaMetric (@frenck - #184158)
- Add a reconfigure flow to LaMetric (@frenck - #184160)
- Show invalid authentication for a wrong LaMetric API key during setup (@frenck - #184195)
- Do not send a sound to a LaMetric device without audio (@frenck - #184196)
- Mark the LaMetric supported devices as documented (@frenck - #184300)
- Set the LaMetric quality scale to platinum (@frenck - #184310)
- Use freezer instead of coordinator refresh in lametric tests (@erwindouna - #185082)
- Add playing a sound from a URL to LaMetric notifications (@frenck - #184206)
- Bump demetriek to 2.1.0 (@frenck - #185779)
- Add setting up LaMetric with a press on its button (@frenck - #184197)
- Add a screensaver switch to LaMetric (@frenck - #184210)
- Add a screensaver mode select to LaMetric (@frenck - #184212)
- Add sound repeat option to LaMetric notifications (@ElYoM - #184601)
Last.fm
- Use freezer instead of coordinator refresh in lastfm tests (@erwindouna - #185111)
- Use typed config entry in Last.fm coordinator (@frenck - #185376)
- Add exception translations to Last.fm (@joostlek - #186314)
- Add diagnostics to Last.fm (@joostlek - #186507)
laundrify
Lawn mower
- Define public names of the lawn_mower integration (@epenet - #186625)
- Move lawn_mower entity classes to entity module (@epenet - #186791)
LED Infrared
- Set up the LED Infrared entry once per device type in tests (@balloob - #180348)
- Add generic 21-key remote to LED Infrared (@tr4nt0r - #186957)
- Fix led_infrared generic 21-key snapshots (@gjohansson-ST - #188288)
- Add 10-key remote code set detection to LED Infrared (@joostlek - #185537)
Lektrico Charging Station
Leviton Decora Wi-Fi
- Remove legacy quality_scale entry from Decora Wi-Fi manifest (@tr4nt0r - #185545)
- Remove YAML import in Leviton Decora Wi-Fi (@tr4nt0r - #187101)
LG Infrared
- Fix LG infrared temperature restoration using the saved unit (@abmantis - #185508)
- Add turn on and turn off to LG Infrared climate (@Dr-Blank - #186466)
- Add reconfigure flow to LG Infrared (@Dr-Blank - #186588)
- Add diagnostics to LG Infrared (@Dr-Blank - #187713)
- Bump LG Infrared to platinum quality scale (@Dr-Blank - #188125)
LG ThinQ
- Avoid logging error when LG ThinQ appliance is disconnected (@allenporter - #187357)
- Add diagnostics to LG ThinQ (@joostlek - #189130)
LG TV via Serial
- Bump lg-rs232-tv to 1.3.0 (@balloob - #185584)
- Bump lg-rs232-tv to 1.3.1 to retry serial connection failures (@balloob - #186964)
LG webOS TV
- Remove double spaces in strings (@frenck - #184494)
- Describe the LG webOS TV turn on trigger for the automation editor (@darkrain-nl - #178544)
- Add MAC address connections to LG webOS TV (@thecode - #188604)
- Bump aiowebostv to 1.0.0 (@thecode - #190265)
Libre Hardware Monitor
- Bump librehardwaremonitor-api to version 1.12.0 (@Sab44 - #183830)
- Add Sensor Device Classes to Libre Hardware Monitor (@Sab44 - #182203)
- Fix data sensors unit to use MiB or GiB as values are binary based (@Sab44 - #184243)
- Check docs criteria in quality scale after updating docs (@Sab44 - #185254)
- Reconfigure flow for Libre Hardware Monitor (@Sab44 - #185216)
- Add entity category ‘diagnostic’ to all sensors for Libre Hardware Monitor integration (@Sab44 - #186378)
- Extend dynamic devices with dynamic sensors and grace period (@Sab44 - #184754)
- Refactor sensor tests in libre_hardware_monitor integration (@Sab44 - #189246)
- Add exception translations to Libre Hardware Monitor (@Sab44 - #189258)
LibreSync
- Add LibreSync integration (@drsound - #183209)
- Fix LibreSync tests after config entry and snapshot changes (@joostlek - #188922)
Lichess
Liebherr
LIFX
- Raise a LIFX repair issue for an entry that cannot be migrated (@Djelibeybi - #184191)
- Add the LIFX quality scale record (@Djelibeybi - #182921)
- Set the LIFX quality scale to platinum (@Djelibeybi - #182922)
- Use component DOMAIN constants for entity_domain in action registrations (@epenet - #184405)
- Bump lifx-async to 7.8.1 (@Djelibeybi - #184503)
- Add LIFX Ceiling and Mirror component lights and the Color Sweep effect (@Djelibeybi - #183789)
- Adapt lifx to in-place entity ID change (@emontnemery - #184869)
- Bump lifx-async to 7.9.3 (@Djelibeybi - #185416)
- Return True for the removed legacy entry in lifx migration (@gjohansson-ST - #185374)
- Refactor LIFX component light methods and entity_id changes (@Djelibeybi - #185421)
- Bump lifx-async to 7.10.1 (@Djelibeybi - #185640)
- Bump lifx-async to 7.13.1 (@Djelibeybi - #188981)
Light
- Define public names of the light integration (@epenet - #186644)
- Move light entity classes to entity module (@epenet - #186834)
- Fix color temperature emulation on RGBWW lights (@jayhemnani9910 - #185795)
- Export the toggle action types from device_automation (@epenet - #187480)
- Use the service enums in the light platform’s own code (@epenet - #188049)
LinkPlay
- Adapt linkplay to in-place entity ID change (@emontnemery - #184870)
- Use typed keys for shared LinkPlay data (@erwindouna - #185607)
- Make linkplay group members follow entity ID rename (@emontnemery - #184962)
- Treat empty LinkPlay album art as no image (@ccristal - #187145)
Linn / OpenHome
- Expand the Openhome test coverage (@bazwilliams - #181686)
LiteLLM
- Add LiteLLM speech-to-text support (@korasino - #183073)
- Remove HTTPX compatibility casts for openai client (@Shulyaka - #184751)
- Use freezer instead of coordinator refresh in litellm tests (@erwindouna - #185112)
- Add reauthentication flow to LiteLLM (@joostlek - #186211)
- Hide LiteLLM STT prompt and keywords behind their toggle (@balloobbot - #187967)
- Import LiteLLM client resources outside the event loop (@cpruijsen - #189833)
LIVISI Smart Home
- Bump livisi to 1.0.2 (@JamieMagee - #181695)
llama.cpp
- Handle mid-stream API errors in llama.cpp conversation (@epenet - #184056)
- Remove HTTPX compatibility casts for openai client (@Shulyaka - #184751)
- Handle the delta in the llama.cpp chunk that carries finish_reason (@hifiberry - #186030)
- Add reauthentication flow to llama.cpp (@joostlek - #186298)
- Pass a context in conversation tests instead of None (@balloob - #187975)
- Hide llama.cpp advanced options behind the recommended toggle (@balloobbot - #187966)
LLM
- Add Home Assistant LLM API and system log tool (@allenporter - #181958)
- Rename the Assist LLM API to Device control (@balloob - #185999)
- Define public names of the llm integration (@epenet - #187334)
Local calendar
- Use the common write error helper in camera, reolink, file, local_todo and local_calendar (@erwindouna - #185677)
- Bump ical to 14.3.1 (@allenporter - #187546)
- Add exception translations to Local calendar (@joostlek - #189035)
Local file
- Move local_file service registration to services module (@epenet - #184465)
- Use file name as local_file config entry title (@gjohansson-ST - #185882)
Local to-do
- Use the common write error helper in camera, reolink, file, local_todo and local_calendar (@erwindouna - #185677)
- Bump ical to 14.3.1 (@allenporter - #187546)
- Add exception translations to Local to-do (@joostlek - #189036)
Lock
- Define public names of the lock integration (@epenet - #186374)
- Move lock entity classes to entity module (@epenet - #186823)
Logger
- Move logger service registration to services module (@epenet - #184426)
- Restore the root logger level after logger tests (@erwindouna - #186780)
- Define public names of the logger integration (@epenet - #187220)
- Add action enums to logger (@epenet - #189284)
Logitech Harmony Hub
- Move harmony service registration to services module (@epenet - #184611)
- Add exception translations to Logitech Harmony Hub (@joostlek - #189022)
- Add diagnostics to Logitech Harmony Hub (@joostlek - #189147)
LoJack
- Remove dead battery_level property from LoJack device tracker (@devinslick - #184511)
- Add shared LoJack entity base and migrate device tracker (@devinslick - #184512)
- Use typed config entry in LoJack coordinator (@frenck - #185379)
- Add sensor platform to LoJack (@devinslick - #184390)
London Air
- Migrate London Air to the pylondonair library (@MichaelMKKelly - #188163)
LOQED Touch Smart Lock
- Report LOQED lock state as unknown when the bridge does not know it (@alaraun - #183879)
- Reject LOQED webhooks without signature headers (@alaraun - #183877)
- Bump loqedAPI to 2.1.16 (@mikewoudenberg - #183930)
- Improve Loqed code quality by adding tests and improved error handling (@mikewoudenberg - #181586)
- Set the LOQED quality scale to Bronze (@mikewoudenberg - #184750)
LoRaWAN
- Add LoRaWAN integration (@balloobbot - #185577)
- Bump lorawan-connection to 1.0.0 (@balloobbot - #186758)
- Bump lorawan-connection to 1.2.0 (@balloob - #186904)
- Refactor LoRaWAN connection registration (@balloob - #186920)
- Expose LoRaWAN devices and connection metadata (@balloob - #186906)
- Add The Things Network connection integration (@balloobbot - #186760)
- Add LoRaWAN connectivity metadata to integrations (@balloob - #189905)
Lunatone
- Update lunatone quality scale file (@MoonDevLT - #183463)
- Enhance connection error exception handling for light entities of lunatone (@MoonDevLT - #184294)
- Extend DALI scan status entity with single line status on lunatone (@MoonDevLT - #182474)
- Remove
DALIBroadcastslist from the config entry runtime data of lunatone (@MoonDevLT - #184669) - Bump lunatone-rest-api-client to 0.11.0 (@MoonDevLT - #184921)
- Use freezer instead of coordinator refresh in lunatone tests (@erwindouna - #185177)
- Make tests of lunatone more robust (@MoonDevLT - #184713)
- Improve translations by adding
translation_keysto devices and exceptions of lunatone (@MoonDevLT - #184652) - Enhance availability checks of Lunatone entities (@MoonDevLT - #186138)
- Bump lunatone-rest-api-client to 0.11.2 (@MoonDevLT - #187330)
- Pass a DeviceInfo to async_get_or_create_device in lunatone (@epenet - #187687)
- Fix DALI scan status entity being stuck as unavailable in lunatone (@MoonDevLT - #188132)
- Refactor lunatone sensor entity creation to use translation framework (@MoonDevLT - #187792)
- Fix lunatone sensor snapshot breaking CI (@TheJulianJES - #188391)
- Add automatic removal of stale devices to lunatone (@MoonDevLT - #185212)
- Fix lunatone tests after stale device removal (@erwindouna - #188934)
- Add DALI connectivity metadata to integrations (@balloob - #189896)
Lupus Electronics LUPUSEC
- Raise ConfigEntryError when unable to connect in lupusec (@gjohansson-ST - #185085)
Lutron
- Retry Lutron setup on network errors instead of failing the entry (@cdheiser - #182080)
- Fire one Lutron single press per tap on buttons that report press and release (@rqi14 - #185509)
Lutron Caséta
- Raise ConfigEntryError on invalid certificate in lutron_caseta (@gjohansson-ST - #185086)
- Split bridge subscription from async_added_to_hass in lutron_caseta (@gjohansson-ST - #185868)
- Add event platform to Lutron Caseta (@davidrecordon - #184266)
- Bump pylutron-caseta to 0.30.1 (@TheJulianJES - #188432)
- Add exception translations to Lutron Caséta (@joostlek - #189021)
- Add support for Lutron Athena processors to lutron_caseta (@ImperatorRuscal - #182609)
Lutron Homeworks
Lyngdorf
- Bump lyngdorf to 2.2.1 (@fishloa - #184317)
- Raise HomeAssistantError when Lyngdorf actions fail (@fishloa - #184318)
M
Magic Home
- Move flux_led service registration to services module (@epenet - #184618)
- Assert the unique ID in flux_led config flow tests (@erwindouna - #185305)
- Add readable effect labels to Magic Home lights (@sidevesh - #187545)
Manual alarm control panel
- Move the manual domain to a const module and define public names (@epenet - #188755)
- Add a state attribute enum to manual (@epenet - #189169)
Manual MQTT alarm control panel
- Fix entity removal leaks in manual_mqtt (@emontnemery - #183863)
Marantz RS-232
- Add Marantz RS-232 integration (@balloobbot - #182657)
- Return None from config entry methods in integrations (hase_iq, marantz_rs232) (@gjohansson-ST - #186706)
- Bump marantz-rs232 to 2.1.1 to retry serial connection failures (@balloob - #186966)
Marketplace
- Add Marketplace integration (@frenck - #183502)
- Use a Restart button in the Marketplace restart repair (@Markus98 - #184718)
- Invalidate translations after updating or removing Marketplace integrations (@balloobbot - #184230)
- Raise instead of returning False when unloading Marketplace (@gjohansson-ST - #186229)
- Allow removing a Marketplace theme without a known folder (@frenck - #186926)
- Test Marketplace refuses a catalog update that needs a newer core (@epenet - #187870)
- Raise header size limits of the marketplace websession (@silamon - #188322)
- Read integration categories from the Marketplace data (@frenck - #187446)
- Revert “Raise header size limits of the marketplace websession” (@silamon - #188677)
- Update Marketplace update entities when a repository is refreshed from its page (@Markus98 - #189452)
- Add a title and icon to the Marketplace panel (@piitaya - #189511)
- Add China mirror support to the Marketplace (@frenck - #190251)
Mastodon
- Refactor idempotency key validation in Mastodon integration (@tr4nt0r - #185153)
- Raise config entry errors when migration fails in mastodon (@gjohansson-ST - #185418)
- Migrate media upload in
mastodon.postaction from absolute path to Media Selector (@tr4nt0r - #181901) - Bump Mastodon.py to 2.3.3 (@tr4nt0r - #187146)
- Support alt text for profile picture and header in Mastodon update profile action (@tr4nt0r - #187190)
Matrix
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Matter
- Fix entity removal leaks in matter (@emontnemery - #183864)
- Add mock Matter Solar Battery Storage to tests (@lboue - #184277)
- Add dynamic unit of measurement for Matter concentration sensors (@valeronm - #167177)
- Remove redundant translation names from Matter (@frenck - #185330)
- Allow battery binary_sensor even when Matter BatPercentRemaining is present (@lboue - #185551)
- Add Matter fixture for Aqara W500 with presets (fw 1.0.4.2) (@lboue - #185904)
- Raise instead of returning False when unloading Matter (@gjohansson-ST - #186230)
- Translate Matter firmware update release notes (@lboue - #187107)
- Pin Matter TemperatureOffset legacy/extended schema ordering with a test (@lboue - #187110)
- Fix Matter climate
hvac_actionwhenThermostatRunningStateis0(idle) (@burmistrzak - #187084) - Ignore stale moving operational status for position aware Matter covers (@agners - #177571)
- Discover Matter FlowSensor even when value is null at startup (@lboue - #186941)
- Add power-on color temperature number entity to Matter (@urbozz - #184168)
- Add Matter fixtures for real multi-endpoint devices (@TheJulianJES - #187514)
- Bump matter-python-client to 1.5.0 (@lboue - #187593)
- Show a null Matter power-on color temperature as previous (@epenet - #187759)
- Import MatterEntityInfo from the matter models module (@epenet - #187761)
- Bump matter-python-client to 1.5.2 (@TheJulianJES - #187882)
- Support Matter cameras (@arturpragacz - #176080)
- Add Matter travel time mode select for the WAGO Home Blind Control (@agners - #187772)
- Support for Matter Thermostat Setpoint attributes (@lboue - #185945)
- Add reverse motor direction switch for Matter window coverings (@agners - #178373)
- Support two-way audio for Matter cameras (@arturpragacz - #187963)
- Restore the last HVAC mode when turning on Matter thermostats (@wardmatter - #181458)
- Bump matter-python-client to 1.5.4 (@lboue - #188260)
- Add Aqara Camera Hub G350 node fixture for Matter camera device type (@lboue - #188245)
- Fix Matter vacuum locate action not working due to missing identifyTime (@lboue - #188314)
- Bump matter-python-client to 1.5.5 (@lboue - #188369)
- Speed up Matter platform snapshot tests (@balloob - #188516)
- Add blind type select for Matter WAGO Home Blind Control (@agners - #187769)
- Add music sync entities for Aqara LED Strip T2 (@lanthaler - #187920)
- Ask before installing the Matter Server during onboarding on hosts with little memory (@RaHehl - #188890)
- Revert “Translate Matter firmware update release notes” (@TheJulianJES - #188908)
- Unify Matter
EveTemperatureOffsetinto genericTemperatureOffsetentity (@lboue - #180520) - Fix state and buttons of tilt-only Matter covers (@TheJulianJES - #188787)
- Move Matter TemperatureOffset migration to config entry migration (@TheJulianJES - #189200)
- Fix Matter battery time sensors not discovered when value is null (@lboue - #189804)
- Add Matter connectivity metadata to integrations (@balloob - #189906)
Mealie
- Add Mealie parser to to-do lists (@andrew-codechimp - #183099)
- Add parse_ingredient action to Mealie (@andrew-codechimp - #184142)
- Wording change to Mealie action (@andrew-codechimp - #187379)
- Add add_ingredient action to Mealie (@andrew-codechimp - #187468)
- Migrate to use Mealie Service constants (@andrew-codechimp - #187490)
- Bump aiomealie to 2.1.3 (@andrew-codechimp - #187905)
Media extractor
- Remove leftover YAML configuration reads from media_extractor (@epenet - #184657)
- Move media_extractor service registration to services module (@epenet - #184698)
- Add exception translations to Media extractor (@joostlek - #186322)
- Use enums for media_extractor action names and arguments (@epenet - #188173)
- Add extra to the media player service argument enum (@epenet - #188746)
Media player
- Use TaggedUnion for cover and media player device automation schemas (@balloobbot - #186277)
- Raise translated error when media_player cannot determine URL (@joostlek - #186330)
- Define public names of the media_player integration (@epenet - #186627)
- Move media_player entity classes to entity module (@epenet - #186876)
- Add media player current source condition (@nielsrowinbik - #176695)
- Use the service enums in the media_player, notify and tts platforms’ own code (@epenet - #188050)
- Set caller context on media player websocket search (@felixschndr - #187743)
- Use the state attribute enums in conditions/intents/triggers (@epenet - #188176)
- Add extra to the media player service argument enum (@epenet - #188746)
- Expose media player group members without grouping support (@arturpragacz - #188390)
Mediaroom
MELCloud
- Move melcloud service registration to services module (@epenet - #184483)
- Retry MELCloud setup on communication errors (@frenck - #184615)
- Assert the unique ID in melcloud, portainer, sma and tado config flow tests (@erwindouna - #185252)
- Use typed config entry in MELCloud coordinator (@frenck - #185381)
MELCloud Home
- Raise translated errors for all MELCloud Home action failures (@erwindouna - #184029)
- Keep MELCloud Home devices when the account returns no units (@erwindouna - #185729)
- Handle unexpected MELCloud Home API errors in coordinators (@erwindouna - #185727)
- Keep MELCloud Home ATW zone control mode on HVAC mode change (@erwindouna - #185725)
- Fix MELCloud Home energy last reset at month change (@erwindouna - #185724)
- Start MELCloud Home reauth on action auth errors (@erwindouna - #184062)
- Read MELCloud Home ATW energy from its own measure (@erwindouna - #185773)
- Show MELCloud Home holiday mode only while active (@erwindouna - #185824)
- Add MELCloud Home frost protection operation status (@erwindouna - #185822)
- Add MELCloud Home protection active binary sensors (@erwindouna - #185823)
- Set MELCloud Home climate temperature step (@erwindouna - #185728)
- Create MELCloud Home ATA outdoor temperature sensor (@erwindouna - #185821)
- Reuse MELCloud Home context in telemetry coordinator (@erwindouna - #185732)
- Bump aiomelcloudhome to 0.3.1 (@erwindouna - #186512)
- Add websocket support to MELCloud Home (@erwindouna - #176527)
Melnor Bluetooth
- Import EntityDescription from the entity helper in melnor (@epenet - #186849)
- Group sequential async_add_entities calls in Melnor (@joostlek - #187521)
- Remove redundant entity constructors in Melnor Bluetooth (@joostlek - #189267)
Met Office
- Add missing data to properties and forecasts (@hickford - #184080)
- Use typed config entry in Met Office coordinator (@frenck - #185383)
- Use
LocationSelectorinmetofficeintegration (@tr4nt0r - #188649)
Met Éireann
- Use typed config entry in Met Éireann coordinator (@frenck - #185382)
- Remove name field from
met_eireannconfig flow (@tr4nt0r - #188638) - Use
LocationSelectorinmet_eireannintegration (@tr4nt0r - #188646)
Meteorologisk institutt (Met.no)
- Raise ConfigEntryError when home location is not set in met (@gjohansson-ST - #185089)
- Set up Met weather tests with a config entry instead of the user flow (@joostlek - #186480)
- Remove name field from Met.no config flow (@mstu01 - #176994)
- Return None from config entry methods in Meteorologisk institutt (Met.no) (@gjohansson-ST - #187732)
- Use
LocationSelectorin Met.no integration (@tr4nt0r - #188447)
Midea
- Use TextSelectors in Midea (@chemelli74 - #184033)
- Add washing machine controls to Midea (@rokam - #184228)
- Assert the unique ID in midea config flow tests (@erwindouna - #185306)
- Add Midea washing and drying machines sensors (@rokam - #184331)
- Test midea config flow error recovery (@erwindouna - #185489)
- Add prompt tone switch for Midea dehumidifiers (@devPalacio - #185674)
- Add refrigerator door binary sensors to Midea (@jebentancour - #185452)
- Add missing water heater entities to Midea (@rokam - #185735)
- Bump midealocal to 12.3.0 (@rokam - #186133)
- Add reset_filter button to mark Midea AC filter clean (@rokam - #184372)
- Add MegaWater and Memo U switches to Midea water heater appliances (@rokam - #186401)
- Bump midea-local to 13.0.0 (@chemelli74 - #187256)
- Fix Midea prompt tone turning back on after restart (@mcinteerj - #187705)
- Bump midea-local to 14.0.0 (@chemelli74 - #182986)
- Update IQS to platinum for Midea (@chemelli74 - #188494)
- Add power switch for Midea air purifiers (@vrpolice - #188177)
- Bump midea-local to 15.0.0 (@rokam - #189508)
Midea ccm15 AC Controller
- Fix CCM15 availability on failed updates (@erwindouna - #185495)
- Import core constants from homeassistant.const in climate platforms (@epenet - #186851)
Miele
- Define init before other methods in Miele (@joostlek - #187555)
- Add missing Miele program codes for WXI860 and TXI680WP appliances (@Dextheking1 - #182724)
Mijn Farmad Apotheek
- Add Mijn Farmad Apotheek integration (@DaanVervacke - #184055)
- Return None from config entry methods in Mijn Farmad Apotheek (@gjohansson-ST - #187733)
- Add two-factor authentication to Mijn Farmad Apotheek (@DaanVervacke - #187700)
- Add diagnostics to the Mijn Farmad Apotheek integration (@DaanVervacke - #188183)
- Add reauthentication flow to Mijn Farmad Apotheek (@DaanVervacke - #188235)
- Bump aiofarmad to 0.6.5 (@DaanVervacke - #188697)
- Bump Mijn Farmad Apotheek quality scale to silver (@DaanVervacke - #188689)
MikroTik
- Fix flaky mikrotik config flow reload tests (@epenet - #183839)
- Use TextSelectors in Mikrotik (@chemelli74 - #184028)
- Build Mikrotik device info without unpacking a device info (@epenet - #184922)
- Connect to Mikrotik and get hub details in a single executor job (@joostlek - #187953)
- Read external device data keys as plain strings in integrations (@epenet - #188152)
- Adapt mikrotik device tracker to base class changes (@emontnemery - #189202)
Mill
Min/Max
- Do not inherit a device class that does not allow measurement in min_max (@Bascht74 - #186485)
- Add a state attribute enum to min_max (@epenet - #189170)
Minecraft Server
- minecraft_server: initialize mcstatus’ objects using
rawdata (@PerchunPak - #181340) - Remove stray spaces after newlines in strings (@frenck - #184504)
- Raise ConfigEntryError when address lookup fails in minecraft_server migration (@gjohansson-ST - #185420)
- Add missing exception translations to minecraft_server (@elmurato - #187009)
- Add server address to exception translations in minecraft_server (@elmurato - #187137)
- Improve data update failed exception message (@elmurato - #187203)
- Add reconfiguration flow to minecraft_server (@elmurato - #186852)
- Add missing device class of latency sensor in minecraft_server (@elmurato - #188178)
- Set device entry type of minecraft_server to service (@elmurato - #188182)
- Raise tier of minecraft_server to platinum (@elmurato - #188147)
Minio
Mitsubishi Comfort
- Allow Mitsubishi Comfort setup with offline devices (@nikolairahimi - #188528)
Mobile App
- Raise instead of returning False when unloading Mobile App (@gjohansson-ST - #186231)
- Add diagnostics to Mobile App (@joostlek - #189157)
Mochad
Modbus
- Adapt modbus to in-place entity ID change (@emontnemery - #184871)
- Fix Modbus temperature restoration using the saved unit (@abmantis - #185991)
- Use TaggedUnion for filter, bayesian, modbus, kwb and opentherm_gw schemas (@balloobbot - #186179)
- Fix NaN values in Modbus custom structures reported as 0 (@rasadregmi - #182862)
- Define init before other methods in Modbus (@joostlek - #187557)
- Bump modbus-connection to 4.12.6 (@balloob - #187709)
- Bump modbus-connection to 4.12.7 and tmodbus to 1.1.0 (@balloobbot - #188774)
- Add exception translations to Modbus (@joostlek - #189039)
- Close shared modbus connections when HA stops or restarts (@WillCodeForCats - #189514)
Model Context Protocol
- Return HTTP 403 for MCP permission failures (@hunterjm - #184253)
- Rename Model Context Protocol integrations (@balloob - #185707)
- Rename the Assist LLM API to Device control (@balloob - #185999)
- Add read-only option to the MCP server (@balloob - #185959)
- Bump mcp to 2.3.0 in mcp and mcp_server (@allenporter - #187050)
- Hide the MCP server LLM API picker with a visibility condition (@balloobbot - #187968)
- Deduplicate equal LLM tools and prefix only conflicting names (@balloob - #188511)
- Advertise Home Assistant icon in MCP server metadata (@balloob - #188797)
- Add exception translations to Model Context Protocol (@joostlek - #189037)
- Add diagnostics to Model Context Protocol (@joostlek - #189153)
- Use the request origin for MCP server icon URLs (@balloob - #189460)
Model Context Protocol Client
- Use typed config entry in Model Context Protocol coordinator (@frenck - #185380)
- Rename Model Context Protocol integrations (@balloob - #185707)
- Use one httpx client factory in the MCP integration (@zweckj - #185194)
- Bump mcp to 2.3.0 in mcp and mcp_server (@allenporter - #187050)
- Simplify MCP transport and client tests using respx (@allenporter - #187259)
- Increase MCP client timeout to 30 seconds (@cpruijsen - #188179)
- Fix MCP transport fallback and error handling (@allenporter - #188422)
- Add diagnostics to Model Context Protocol Client (@joostlek - #189159)
- Fix blocking jsonschema load in MCP tool calls (@lukelloyd1985 - #189516)
Modern Forms
- Move modern_forms service registration to services module (@epenet - #184603)
- Use freezer instead of coordinator refresh in modern_forms tests (@erwindouna - #185166)
- Use typed config entry in Modern Forms coordinator (@frenck - #185386)
Mold Indicator
Monarch Money
- Add budget sensors to Monarch Money (@bradleyseanf - #182774)
- Use freezer instead of coordinator refresh in monarch_money tests (@erwindouna - #185190)
Monoprice 6-Zone Amplifier
- Raise instead of returning False when unloading Monoprice 6-Zone Amplifier (@gjohansson-ST - #186234)
Monoprice Blackbird Matrix Switch
Motionblinds
- Move motion_blinds service registration to services module (@epenet - #184464)
- Fix Motionblinds availability on failed updates (@erwindouna - #185498)
- Reduce Motionblinds error log spam on retries (@surajvelip - #188456)
- Bump motionblinds to 0.6.31 (@starkillerOG - #188578)
Motionblinds Bluetooth
motionEye
- Move motioneye service registration to services module (@epenet - #184605)
- motioneye: support motionEye 0.44 session authentication (@mkrawcz1 - #181994)
- Use get_camera_from_entity_id in motioneye and shelly camera tests (@epenet - #186594)
MQTT
- Adjust mqtt to not override Entity.add_to_platform_xxx methods (@emontnemery - #183776)
- MQTT: Validate entity category for read-only platforms (@farmio - #182382)
- Move MQTT config check and issue cleanup helpers to util (@epenet - #184322)
- Move MQTT actions to services module (@epenet - #184326)
- Replace unreachable MQTT discovery teardown guard with TYPE_CHECKING assert (@jbouwh - #183913)
- Remove double spaces in strings (@frenck - #184494)
- Add unit of measurement selector (@jbouwh - #183337)
- Migrate mqtt climate and water heater to native temperature properties (@emontnemery - #184814)
- Adapt mqtt to in-place entity ID change (@emontnemery - #184872)
- Remove deprecated MQTT via_hub device option (@jbouwh - #185917)
- Use TaggedUnion for schema dispatch in ZHA, Z-Wave JS, MQTT, Energy and Assist pipeline (@balloobbot - #186177)
- Raise translated ServiceValidationError for invalid text values (@joostlek - #186311)
- Fix removing a single MQTT device discovery component removing the whole device (@jbouwh - #186084)
- Warn when an MQTT default_entity_id has the wrong domain (@Bascht74 - #186568)
- Update links to the new contributors website (@frenck - #186884)
- Import names from their source modules in mqtt (@epenet - #187466)
- Clean up the previous MQTT device when an entity is added to another device (@jbouwh - #186864)
- Pass a DeviceInfo to async_get_or_create_device in bluetooth, device_tracker, google_assistant and mqtt (@epenet - #187571)
- Fix invalid MQTT device trigger and tag discovery updates (@jbouwh - #187854)
- Handle MQTT device registration errors of device triggers and tags (@jbouwh - #187855)
- Ignore the MQTT device config of entities without a unique ID (@jbouwh - #187856)
- Use issues refresh helper in mqtt (@emontnemery - #188029)
- Log topic when MQTT discovery payload is not valid JSON (@jbouwh - #188534)
- Add MQTT child device support (@jbouwh - #186015)
- Fix MQTT discovery updates without device and invalid device discovery components (@jbouwh - #188780)
- Parse an MQTT payload as JSON once per message (@RaHehl - #188815)
- Fix MQTT entry reload with discovered tags or device triggers (@jbouwh - #190275)
Music Assistant
- Bump music-assistant-client to 1.6.0 (@MarvinSchenkel - #184309)
- Add dashboard display media players to Music Assistant (@MarvinSchenkel - #179386)
- Add start_item to Music Assistant’s play_media action (@tjbaker - #184500)
- Install app in Music Assistant config flow (@arturpragacz - #184948)
- Rename music_assistant register_actions to async_setup_services (@epenet - #186076)
- Use MockConfigEntry flow helpers in Music Assistant tests (@joostlek - #186449)
- Explain Music Assistant connection failures when its app is offline (@balloob - #188510)
- Search Music Assistant as the calling user (@felixschndr - #182857)
- Add reconfigure flow to Music Assistant (@joostlek - #189106)
- Add diagnostics to Music Assistant (@joostlek - #189116)
- Handle unset favorite state in Music Assistant actions (@arturpragacz - #189634)
Music Player Daemon (MPD)
- Always disconnect the MPD config flow client (@mattias-arrelid - #184479)
- Report wrong or missing MPD passwords as invalid auth (@mattias-arrelid - #184480)
MusicCast
my-PV
- Consistent entity configuration for my-PV integration boost entities (@rrooggiieerr - #183901)
- Fix rate limiting issue in my-PV integration (@rrooggiieerr - #184075)
- Create switch entity when no temp sensor installed for my-PV integration (@rrooggiieerr - #184124)
- Bump my-PV library to 0.0.14 (@rrooggiieerr - #186989)
- Adds Update platform to my-PV integration (@rrooggiieerr - #182119)
- my-PV code improvements (@rrooggiieerr - #187615)
- Add diagnostics to my-PV (@rrooggiieerr - #187683)
- Improve tests for my-PV integration (@rrooggiieerr - #186646)
- Fix my-PV switch entity registry snapshot (@erwindouna - #188496)
- Inject websession into my-PV connection (@rrooggiieerr - #187998)
- Bump my-pv to 0.0.16 (@rrooggiieerr - #189205)
- Add climate to my-PV (@rrooggiieerr - #188041)
MyNeomitis
- Add reauthentication flow to MyNeomitis (@joostlek - #186212)
- Bumping pyaxencoapi to 1.0.7.post1 (@Epyes - #187776)
MySensors
- Raise ConfigEntryError when gateway setup fails in mysensors (@gjohansson-ST - #185090)
- Raise instead of returning False when unloading MySensors (@gjohansson-ST - #186235)
- Raise translated ServiceValidationError for invalid text values (@joostlek - #186311)
myStrom
- Raise ConfigEntryError for unsupported devices in mystrom (@gjohansson-ST - #185097)
myUplink
- Set longer timeout for myuplink polling (@astrandb - #189009)
- Exclude Myuplink datapoints (@astrandb - #189191)
Météo-France
- Split user flow init and data submission in meteo_france config flow tests (@tr4nt0r - #183752)
- Refine codeowners for Freebox and Meteo-France integrations (@Giga77 - #187042)
- Add diagnostics to Météo-France (@joostlek - #189155)
N
Nanoleaf
- Add Nanoleaf single and double tap events (@SeoFood - #183637)
- Add reconfigure flow to Nanoleaf (@joostlek - #186262)
- Add exception translations to Nanoleaf (@joostlek - #186325)
- Bump aionanoleaf2 to 1.2.0 (@loebi-ch - #186488)
- Improve error handling in Nanoleaf (@loebi-ch - #186516)
- Handle Nanoleaf event listener errors (@loebi-ch - #187352)
- Bump aionanoleaf2 to 1.2.1 (@loebi-ch - #187410)
- Add Nanoleaf 4D screen mirroring modes as light effects (@loebi-ch - #187408)
- Add tests for the Nanoleaf device triggers (@epenet - #187510)
- Don’t create the Nanoleaf identify button for devices without identify support (@loebi-ch - #187847)
- Remove deprecated device trigger from nanoleaf (@MartinHjelmare - #188656)
NASweb
- Simplify chained comparisons flagged by pylint 4.1 (@Markus98 - #184666)
- Import core constants from homeassistant.const in climate platforms (@epenet - #186851)
National Weather Service (NWS)
- Move nws service registration to services module (@epenet - #184463)
- Use freezer instead of coordinator refresh in nws tests (@erwindouna - #185167)
- Use atmospheric pressure device class for NWS pressure sensors (@zerafachris - #187721)
- Use
LocationSelectorinnwsintegration (@tr4nt0r - #188654) - Avoid duplicate NWS forecast updates for subscribers (@iulianmac - #188547)
- Add exception translations to National Weather Service (NWS) (@joostlek - #189043)
Nature Remo
- Add Nature Remo integration (@tnj - #177918)
- Return None from config entry methods in Nature Remo (@gjohansson-ST - #187734)
Nederlandse Spoorwegen (NS)
- Remove redundant coordinator refresh in nederlandse_spoorwegen tests (@erwindouna - #185171)
- Use MockConfigEntry flow helpers in Nederlandse Spoorwegen tests (@joostlek - #186450)
NeoPool
- Bump neopool-modbus to 4.9.0 (@svasek - #183949)
- Bump neopool-modbus to 4.10.0 (@svasek - #184101)
- Add select platform to NeoPool (@svasek - #184066)
- Fix pylint W7439 in NeoPool select tests (@jbouwh - #185520)
- Bump neopool-modbus to 4.13.0 (@svasek - #185803)
- Borrow a shared Modbus connection in neopool (@svasek - #185813)
- Add direct serial connection support to neopool (@svasek - #185995)
- Render NeoPool unit ID as a number input box instead of a slider (@svasek - #187487)
- Clean up neopool sensor entry import and dead attribute (@svasek - #187503)
- Add intelligent-mode temperature setpoint to NeoPool (@svasek - #187689)
- Add filtration time remaining sensor to NeoPool (@svasek - #187590)
- Extract shared debounced-write lifecycle for number and time (@svasek - #187844)
Ness Alarm
- Remove YAML import in Ness Alarm (@tr4nt0r - #184550)
- Remove unused constants in Ness Alarm (@tr4nt0r - #184913)
Netatmo
- Add power sensors for Netatmo dimmers (@andregdias - #184107)
- Move netatmo camera and climate service registrations to services module (@epenet - #184422)
- Register the Netatmo webhook once per cloud reconnect (@cgtobi - #179189)
- Reauthenticate Netatmo when granted token scopes are incomplete (@speijnik - #179251)
- Drop a stale Netatmo webhook on teardown (@cgtobi - #186827)
- Report cooling hvac action for Netatmo Smarther thermostats (@Tagliax - #184482)
- Count Netatmo API calls in a trailing window (@cgtobi - #179190)
- Handle a Netatmo home without a selected schedule (@cgtobi - #187314)
- Retry Netatmo setup when the homes cannot be fetched (@Tagliax - #187956)
- Expose setpoint end time on Netatmo climate entities (@lboue - #188320)
- Add exception translations to Netatmo (@joostlek - #189041)
- Fix Netatmo update failing when the publisher queue changes mid-fetch (@cgtobi - #190262)
Nettigo Air Monitor
- Add data descriptions to the NAM config flow (@bieniu - #188504)
- Fix a reconfigure flow for the NAM integration (@bieniu - #188521)
- Add an entity module to the NAM (@bieniu - #189231)
- Set
PARALLEL_UPDATESto0for the NAM sensor platform (@bieniu - #189232) - Abort NAM zeroconf flow when the device is already configured (@bieniu - #189234)
- Add IQS to the NAM integration and set the IQS level to bronze (@bieniu - #189252)
- Use a mocked client in NAM tests (@bieniu - #189290)
Network Configuration
- Allow setting owning config entry on repair issues (@emontnemery - #186197)
- Define public names of the network integration (@epenet - #187247)
- Reload network adapters on Supervisor network events (@abmantis - #188065)
Network UPS Tools (NUT)
- Remove redundant UPS power translation key from Network UPS Tools (NUT) (@frenck - #185337)
- Add ‘charged’ to NUT battery charger status options (@dineshyadav03 - #179585)
- Pass a DeviceInfo to async_get_or_create_device in nut (@epenet - #187573)
Neurio energy
NexBlue
- Use freezer instead of coordinator refresh in nexblue tests (@erwindouna - #185172)
- Add reauthentication flow to NexBlue (@joostlek - #186213)
Nexia/American Standard/Trane
- Move nexia service registration to services module (@epenet - #184625)
- Raise ConfigEntryError on invalid credentials in nexia (@gjohansson-ST - #185100)
- Adapt nexia to in-place entity ID change (@emontnemery - #184881)
- Use typed config entry in Nexia/American Standard/Trane coordinator (@frenck - #185387)
- Construct each nexia zone DeviceInfo in one call (@epenet - #185289)
- Add reauth flow to nexia (@gjohansson-ST - #185852)
- Nexia: Migrate unique IDs to strings, preserving existing entities (@jrhillery - #181791)
NextBus
- Raise instead of returning False when unloading NextBus (@gjohansson-ST - #186236)
NextDNS
- Raise HomeAssistantError when nextdns actions fail on invalid API key (@bieniu - #184060)
- Bump nextdns to 5.2.0 (@bieniu - #187485)
- Add new NextDNS security options as switch entities (@bieniu - #187537)
Nibe Heat Pump
- Mark mapping sensors as enum for nibe heatpump (@elupus - #184117)
- Fix stale Nibe Heat Pump values at the end of polling (@petermnt - #184222)
- Use freezer instead of coordinator refresh in nibe_heatpump tests (@erwindouna - #185196)
- Fix Nibe availability on failed updates (@erwindouna - #185499)
- Avoid blocking startup on the initial NIBE refresh (@Zarvinx - #181490)
Nightscout
- Add measurement state class to Nightscout sensor (@EarMaster - #188525)
- Use a DataUpdateCoordinator in Nightscout (@EarMaster - #188546)
Niko Home Control
NINA
- Use typed config entry in NINA coordinator (@frenck - #185389)
- Remove deprecated attributes in NINA (@DeerMaximum - #188355)
Nintendo Switch parental controls
- Use select and descriptive link text instead of click in strings (@frenck - #184543)
- Add service to update individual day restrictions in Nintendo Parental Controls (@pantherale0 - #180956)
- Use the singular NintendoParentalService name for the action enum (@epenet - #187879)
Nissan Leaf
Nmap Tracker
- Bump getmac to 0.9.6 (@chemelli74 - #184162)
- Don’t name nmap tracker devices after an IP address (@emontnemery - #189219)
NMBS
- Type the nmbs station list with a HassKey (@gjohansson-ST - #185831)
- Bump pyrail to 0.6.1 (@DaanVervacke - #187927)
NOAA Tides
- Use the dt helpers instead of datetime.now (@erwindouna - #185620)
- Mark NOAA Tides sensor unavailable on API errors (@costajohnt - #188807)
Nobø Ecohub
Nord Pool
- Remove redundant entity constructor in Nord Pool (@joostlek - #189268)
- Use stored data in Nord Pool get prices action (@gjohansson-ST - #189455)
Notifications
- Clarify legacy notification actions (@fdmarcin - #186406)
- Define public names of the notify integration (@epenet - #186628)
- Move notify entity classes to entity module (@epenet - #186789)
- Use the service enums in the media_player, notify and tts platforms’ own code (@epenet - #188050)
Notifications for Android TV / Fire TV
- Add
nfandroidtv.send_messageaction to NFAndroidTV (@tr4nt0r - #174509) - Use the common read error helper in nfandroidtv (@tr4nt0r - #187098)
Novy Cooker Hood
- Store transmitter entity ID in Novy Cooker Hood config entry (@abmantis - #186549)
- Use diagnostics registry entry helpers in novy_cooker_hood diagnostics (@arturpragacz - #186892)
- Restrict to entity ID in RF transmitter consumer entity (@abmantis - #186704)
- Add receiver support to Radio Frequency (@abmantis - #186720)
NRGkick
- Remove redundant RSSI translation name from NRGkick (@frenck - #185334)
- Update quality scale with blueprint and usage example from docs for NRGkick (@andijakl - #185388)
- Fix missing translations for NRGkick action errors (@andijakl - #185923)
- Bump nrgkick-api to 1.8.1 (@andijakl - #186413)
- Use translatable error codes from new NRGkick library version (@andijakl - #186432)
- Fix NRGkick power factor scale and attachment temperatures (@andijakl - #187770)
- Fix NRGkick host normalization for URLs (@andijakl - #190166)
ntfy
- Adapt ntfy to in-place entity ID change (@emontnemery - #184884)
- Use TaggedUnion for device automation and ntfy action schemas (@balloobbot - #186178)
- Bump aiontfy to 0.8.6 (@tr4nt0r - #188249)
NuHeat
- Simplify chained comparisons flagged by pylint 4.1 (@Markus98 - #184666)
- Raise ConfigEntryError on login failure in nuheat (@gjohansson-ST - #185101)
Nuki Bridge
Number
- Warn when a number entity uses a unit not valid for its device class (@jbouwh - #185526)
- Add the re-exported names to the number public names (@epenet - #186654)
- Move number entity classes to entity module (@epenet - #186830)
NX584
- Test nx584 setup failures through the binary sensor platform (@epenet - #184829)
- Move nx584 service registration to services module (@epenet - #184878)
- Add config flow to NX584 (@chrodriguez - #186739)
NYT Games
- Add reauthentication flow to NYT Games (@joostlek - #186263)
- Add reconfigure flow to NYT Games (@joostlek - #186280)
- Add exception translations to NYT Games (@joostlek - #186321)
- Add diagnostics to NYT Games (@joostlek - #186508)
O
OctoPrint
Ohme
- Use MockConfigEntry flow helpers in Ohme tests (@joostlek - #186452)
- Group sequential async_add_entities calls in Ohme (@joostlek - #187523)
OKOK Scale
- Add diagnostics to OKOK scale integration (@rrooggiieerr - #187406)
- Auto use mock_bluetooth fixture for OKOK scale (@rrooggiieerr - #187414)
- Return None from config entry methods in OKOK Scale (@gjohansson-ST - #187735)
- Bump okokscale to 0.0.5 (@rrooggiieerr - #190089)
- Add extra bluetooth registrations for OKOK Scale (@rrooggiieerr - #190099)
- Fix No devices found translation for OKOK Scale (@rrooggiieerr - #190360)
okokscale
- Add integration for OKOK Scales (@rrooggiieerr - #175629)
Ollama
- Raise instead of returning False when unloading Ollama (@gjohansson-ST - #186237)
- Remove myself as codeowner (@synesthesiam - #186680)
- Reuse the LLM API instance and system prompt between turns (@balloob - #188523)
- Read Ollama image attachments outside the event loop (@cpruijsen - #188214)
- Add diagnostics to Ollama (@joostlek - #189151)
Ombi
Ondilo ICO
- Use typed config entry in Ondilo ICO coordinator and drop redundant assignment (@frenck - #185390)
- Add reauthentication flow to Ondilo ICO (@joostlek - #186305)
One-Time Password (OTP)
OneDrive
- Download OneDrive backup metadata concurrently (@zweckj - #184044)
- Raise ConfigEntryError when migration fails in onedrive (@gjohansson-ST - #185422)
- Translate backup agent exceptions (@zweckj - #185957)
- Bump onedrive-personal-sdk to 0.2.0 (@zweckj - #187205)
- Improve backup tests in onedrive (@emontnemery - #188474)
- Normalize OneDrive drive IDs to uppercase (@zweckj - #188468)
OneDrive for Business
- Download OneDrive backup metadata concurrently (@zweckj - #184044)
- Translate backup agent exceptions (@zweckj - #185957)
- Bump onedrive-personal-sdk to 0.2.0 (@zweckj - #187205)
- Define init before other methods in OneDrive for Business (@joostlek - #187558)
- Improve backup tests in onedrive_for_business (@emontnemery - #188475)
- Normalize OneDrive drive IDs to uppercase (@zweckj - #188468)
Onkyo
- Set device class for OnkyoMediaPlayer to RECEIVER (@Spartan-II-117 - #184186)
- Use async_call_later for delayed queries in Onkyo (@arturpragacz - #185626)
- Add diagnostics to Onkyo (@joostlek - #189122)
ONVIF
Open-Meteo
- Bump open-meteo to 1.0.1 (@frenck - #184329)
- Add the quality scale to Open-Meteo (@frenck - #184345)
- Test the connection in the Open-Meteo config flow (@frenck - #184348)
- Add parallel updates, exception translations, and full test coverage to Open-Meteo (@frenck - #184360)
- Don’t use the zone as unique ID for Open-Meteo config entries (@frenck - #185209)
- Add reconfiguration flow to Open-Meteo integration (@nomi25home - #186068)
OpenAI
- Enable OpenAI task web search for supported models (@KRZ303 - #183801)
- Preserve explicit empty assistant messages (@Shulyaka - #182754)
- Remove HTTPX compatibility casts for openai client (@Shulyaka - #184751)
- Consolidate OpenAI AI Task tests (@balloob - #187273)
- Hide OpenAI advanced options behind the recommended toggle (@piitaya - #176704)
- Fix flaky OpenAI config flow tests (@balloob - #188128)
- Add OpenAI GPT-6.1 Terra support (@Shulyaka - #189180)
- Add diagnostics to OpenAI Conversation (@joostlek - #189152)
OpenDisplay
- Use MockConfigEntry flow helpers in OpenDisplay tests (@joostlek - #186453)
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
OpenEVSE
- Bump python-openevse-http to 1.8.0 (@firstof9 - #183925)
- Advance time instead of refreshing coordinators directly in openevse tests (@firstof9 - #185091)
- Remove redundant restart translation key from OpenEVSE (@frenck - #185333)
- Use MockConfigEntry flow helpers in OpenEVSE tests (@joostlek - #186454)
- Add OpenEVSE station status binary sensor (@firstof9 - #187076)
- Fix OpenEVSE charging status sensor tracking (@firstof9 - #187074)
- Add manual override action to OpenEVSE (@firstof9 - #185514)
OpenGarage
- Split user flow init and data submission in opengarage config flow tests (@tr4nt0r - #183885)
- Add light platform to OpenGarage (@ziptbm - #179923)
- Remove redundant entity constructor in OpenGarage (@joostlek - #189269)
OpenRGB
- Bump openrgb-python to 0.3.8 (@TRusselo - #185747)
- Fix OpenRGB duplicating devices when the connection path changes (@TRusselo - #179046)
- Return None from config entry methods in OpenRGB (@gjohansson-ST - #187736)
- Handle unreachable host in OpenRGB (@j99-droid - #187931)
OpenRouter
- Switch OpenRouter to streamed responses (@nicoladen05 - #182780)
- Remove HTTPX compatibility casts for openai client (@Shulyaka - #184751)
- Add image generation support to OpenRouter AI Task (@jlpouffier - #174139)
- Raise config entry errors when migration fails in open_router (@gjohansson-ST - #185423)
- Add exception translations to OpenRouter (@joostlek - #186327)
- Add diagnostics to OpenRouter (@joostlek - #186509)
- Bump python-open-router to 0.5.0 (@joostlek - #189401)
- Fix OpenRouter calling tools twice (@RyabovNick - #189701)
OpenSky Network
- Add exception translations to OpenSky Network (@joostlek - #186316)
- Add diagnostics to OpenSky Network (@joostlek - #186510)
- Use
LocationSelectorinopenskyintegration (@tr4nt0r - #188973)
OpenTherm Gateway
- Use TaggedUnion for filter, bayesian, modbus, kwb and opentherm_gw schemas (@balloobbot - #186179)
- Add control setpoint override functionality to opentherm_gw (@mvn23 - #182856)
OpenThread Border Router
- Bump python-otbr-api to 3.1.0 (@LorbusChris - #184582)
- Raise ConfigEntryError when border agent ID is unsupported in otbr (@gjohansson-ST - #185106)
- Use the correct OpenThread spelling in the otbr integration name (@frenck - #188359)
- Add exception translations to OpenThread Border Router (@joostlek - #189046)
- Add diagnostics to OpenThread Border Router (@joostlek - #189115)
- Add reconfigure flow to Open Thread Border Router (@joostlek - #189098)
- Fix hanging OTBR reconfigure and diagnostics tests (@Markus98 - #189285)
OpenUV
- Split user flow init and data submission in openuv config flow tests (@tr4nt0r - #183911)
- Use
LocationSelectorin openuv integration (@tr4nt0r - #188819)
OpenWeatherMap
- Move openweathermap service registration to services module (@epenet - #184623)
- Bump pyopenweathermap to 0.3.0 (@pike00 - #188827)
- Add exception translations to OpenWeatherMap (@joostlek - #189045)
- Add diagnostics to OpenWeatherMap (@joostlek - #189154)
OpenWrt (luci)
- Luci fix known_devices.yaml clash (@kristbaum - #178426)
- Adapt luci device tracker to base class changes (@emontnemery - #189201)
OpenWrt (ubus)
- Migrate ubus from DeviceScanner to ScannerEntity and add config flow (@apoorva-01 - #175799)
- Adapt ubus device tracker to base class changes (@emontnemery - #189208)
OPNsense
- Adapt opnsense device tracker to base class changes (@emontnemery - #189204)
Opower
- Raise ConfigEntryError for unsupported utility in opower (@gjohansson-ST - #185105)
- Use freezer instead of coordinator refresh in opower tests (@erwindouna - #185173)
- Bump opower to 0.22.4 (@tronikos - #188298)
Oral-B
Orvibo
OSO Energy
Ouman EH-800
- Add autumn drying and optional measurement sensor entities to Ouman EH-800 (@Markus98 - #183482)
- Use valve platform icons for Ouman EH-800 valve position sensor (@Markus98 - #185310)
- Add summer function binary sensor to Ouman EH-800 (@Markus98 - #185279)
- Use child devices for Ouman EH-800 heating circuits (@Markus98 - #189235)
OurGroceries
- Raise ConfigEntryError on invalid login in ourgroceries (@gjohansson-ST - #185107)
- Add reauth flow to ourgroceries (@gjohansson-ST - #185858)
Overkiz
- Migrate overkiz water heater to native temperature properties (@emontnemery - #184746)
- Migrate overkiz climate to native temperature properties (@emontnemery - #184743)
- Bump pyoverkiz to 2.2.2 (@iMicknl - #185861)
- Import core constants from homeassistant.const in climate platforms (@epenet - #186851)
- Update links to the new contributors website (@frenck - #186884)
- Fix Overkiz sensors reporting unknown for 0 values (@iMicknl - #187068)
- Add error code sensor to Overkiz (@koukihai - #186940)
- Add speed support to Overkiz covers and deprecate low speed cover entity (@iMicknl - #187131)
- Do not fail cover actions on an unsupported speed (@Bascht74 - #188271)
- Bump pyoverkiz to 2.3.0 (@iMicknl - #188370)
- Add Somfy multi-account (email/password) config flow to Overkiz (@iMicknl - #176211)
- Rename the Overkiz cover speed low to slow (@Bascht74 - #188327)
- Poll Overkiz executions instead of refreshing after every command (@iMicknl - #188375)
- Reuse the batch command path for single Overkiz commands (@iMicknl - #188566)
- Type running executions in Overkiz (@iMicknl - #188772)
- Never let the Overkiz rate limit back off speed polling up (@Diaoul - #188861)
- Create dynamic goToAlias buttons based on device supported aliases in Overkiz (@iMicknl - #175567)
- Mark entities unavailable while their Overkiz gateway is down (@Diaoul - #183190)
- Send each Overkiz water heater action as a single execution (@iMicknl - #188863)
- Fix Overkiz electrical heater hvac action never reporting heating (@iMicknl - #188979)
- Bump pyoverkiz to 2.3.1 (@iMicknl - #189247)
- Use the standard cover speeds in Overkiz (@Bascht74 - #188980)
OVHcloud AI Endpoints
- Mark action-exceptions as done for ovhcloud_ai_endpoints and hikvision (@epenet - #184051)
- Remove HTTPX compatibility casts for openai client (@Shulyaka - #184751)
- Use diagnostics registry entry helpers in ovhcloud_ai_endpoints diagnostics (@arturpragacz - #186893)
OVO Energy
- Handle missing OVO Energy daily usage in sensors (@jslponcev-ui - #185519)
OwnTone
- Move media_player entity classes to entity module (@epenet - #186876)
- Fix OwnTone updates after an empty queue response (@jslponcev-ui - #184276)
OwnTracks
- Migrate OwnTracks to entry runtime data (@erwindouna - #185608)
P
P1 Monitor
PAJ GPS
- Use freezer instead of coordinator refresh in paj_gps tests (@erwindouna - #185178)
- Bump pajgps-api required version to 0.4.2 (@skipperro - #188222)
Palazzetti
- Bump pypalazzetti to 0.1.21 (@dotvav - #190076)
- Fix palazzetti slow communication (@dotvav - #190080)
Panasonic Viera
- Add input source selection to Panasonic Viera (@jerome-pouiller - #183266)
- Honour num_repeats and delay_secs in Panasonic Viera remote (@jerome-pouiller - #183238)
- Define init before other methods in Panasonic Viera (@joostlek - #187559)
- Create Panasonic Viera remote and get device info in a single executor job (@joostlek - #187949)
- Add MAC address device connection to Panasonic Viera (@jerome-pouiller - #183195)
- Remove name field from Panasonic Viera config flow (@jerome-pouiller - #188101)
- Read external device data keys as plain strings in integrations (@epenet - #188152)
- Fix Panasonic Viera TVs without the PAC service reported as off (@jerome-pouiller - #189767)
Paperless-ngx
Peblar
- Set the Peblar Custom Solar thresholds from Home Assistant (@frenck - #184813)
- Describe the device in entity registry entry snapshots (@epenet - #188133)
Pentair ScreenLogic
Persistent Notification
- Split persistent_notification into const and helpers modules (@epenet - #184656)
- Move persistent_notification service registration to services module (@epenet - #184680)
- Define public names of the persistent_notification integration (@epenet - #187179)
- Add action enums to persistent_notification (@epenet - #189282)
Person
- Add a runtime data class to person (@epenet - #184431)
- Move person YAML filtering to helpers module (@epenet - #184690)
- Move person service registration to services module (@epenet - #184836)
- Move person entity to entity module (@epenet - #186360)
- Define public names of the person integration (@epenet - #187283)
- Remove unused constants from person and add an action enum (@epenet - #188719)
- Stop using the person ATTR_USER_ID constant in core (@epenet - #188742)
Philips Hue
- Move hue activate_scene registration to services module (@epenet - #184402)
- Raise ConfigEntryError instead of returning False in hue setup (@gjohansson-ST - #185053)
- Use freezer instead of coordinator refresh in hue tests (@erwindouna - #185184)
- Raise instead of returning False when unloading Philips Hue (@gjohansson-ST - #186254)
- Fall back to default mireds for zeroed Hue group color temp schemas (@joostlek - #181177)
- Define init before other methods in Hue (@joostlek - #187551)
- Pass a DeviceInfo to async_get_or_create_device in hue (@epenet - #187686)
- Remove deprecated effect “None” from hue (@MartinHjelmare - #188867)
Philips Hue BLE
- Use latest HueBLE (@flip-dots - #188588)
Philips Infrared
- Add Philips Infrared integration (@javitonino - #188153)
- Fix Philips Infrared media player snapshot after config subentry change (@jbouwh - #188905)
Philips TV
- Fix philips_js remote turn_off waking a TV already in standby (@83noit - #180668)
- Bump ha-philipsjs to 3.3.0 (@elupus - #186534)
Pi-hole
- Move pi_hole service registration to services module (@epenet - #184486)
- Add state_class to Pi-hole sensors (@bob-laz - #180689)
Picnic
- Test picnic config flow error recovery (@erwindouna - #185483)
- Add GTIN support to the Picnic add product action (@hmmbob - #188256)
Ping (ICMP)
- Use fixed config entry ids in tests (@epenet - #188140)
- Report 100% packet loss for unreachable hosts in Ping (@zivgin - #188394)
PJLink
- Add device class Projector for PJLink media player (@Spartan-II-117 - #184752)
Plaato
- Remove user-configurable polling interval from plaato (@tr4nt0r - #184376)
- Raise instead of returning False when unloading Plaato (@gjohansson-ST - #186255)
Plant Monitor
- Fix entity removal leaks in plant (@emontnemery - #183865)
- Move plant entity to entity module (@epenet - #186359)
PlayStation Network
- Fix flaky playstation_network trophy title coordinator test (@zweckj - #183843)
- Use select and descriptive link text instead of click in strings (@frenck - #184543)
- Bump PyrateLimiter to 4.5.1 (@tr4nt0r - #187601)
Plex Media Server
- Migrate Plex to entry runtime data (@erwindouna - #185611)
- Resume a Plex show at its on deck episode (@siemon-geeroms - #187141)
- Add diagnostics to Plex Media Server (@joostlek - #189119)
Plugwise
- Enable Plugwise DHW two-mode select, replacing the DHW comfort mode switch (@bouwew - #184353)
- Deprecate dhw_temperature number for Plugwise (@bouwew - #186513)
- Add common reboot action translation key (@Markus98 - #187994)
- Bump plugwise to v1.14.8 (@bouwew - #188366)
- Fix Plugwise removing the started listener twice (@joostlek - #189313)
PoolSense
- Raise ConfigEntryError on invalid authentication in poolsense (@gjohansson-ST - #185113)
Portainer
- Bump pyportainer to 1.0.48 (@erwindouna - #183807)
- Add prune build cache action to Portainer (@erwindouna - #183907)
- Make Portainer prune images action admin-only (@erwindouna - #183982)
- Add helper for Portainer service errors (@erwindouna - #183984)
- Use StrEnum for Portainer service names and arguments (@erwindouna - #183985)
- Share the Portainer error helper with switches and buttons (@erwindouna - #183996)
- Start Portainer reauth on an invalid API key (@erwindouna - #184002)
- Add Portainer version update entity (@erwindouna - #183810)
- Bump pyportainer to 1.0.49 (@erwindouna - #184408)
- Report Portainer update install progress (@erwindouna - #184409)
- Update Portainer container state from Docker events (@erwindouna - #183271)
- Assert the unique ID in melcloud, portainer, sma and tado config flow tests (@erwindouna - #185252)
- Raise config entry errors when migration fails in portainer (@gjohansson-ST - #185426)
- Add build cache and network prune buttons to Portainer (@erwindouna - #183808)
- Bump pyportainer to 1.0.50 (@erwindouna - #188491)
- Refactor Portainer to subentries (@erwindouna - #181295)
- Create Portainer environments on setup (@erwindouna - #189011)
Powerfox Cloud
- Use the dt helpers instead of datetime.now (@erwindouna - #185620)
Private BLE Device
Probe Plus
- Add multi-probe support to Probe Plus (@pantherale0 - #181020)
- Return None from config entry methods in Probe Plus (@gjohansson-ST - #187737)
Profiler
- Use a typed key for Profiler data (@erwindouna - #185612)
Prosegur Alarm
Prowl
- Remove name field from prowl config flow (@tr4nt0r - #184156)
- Deprecate YAML configuration of the prowl notify platform (@jbouwh - #184225)
- Add prowl.send_message action and deprecate legacy Prowl notify action (@jbouwh - #184141)
Proximity
- Fix spelling and grammar in strings (@frenck - #184507)
- Adapt proximity to in-place entity ID change (@emontnemery - #184885)
- Stop using the person ATTR_USER_ID constant in core (@epenet - #188742)
Proxmox VE
- Mark action-exceptions as done for gold integrations (@epenet - #183998)
- Use freezer instead of coordinator refresh in proxmoxve tests (@erwindouna - #185179)
- Remove redundant translation keys from Proxmox VE (@frenck - #185335)
- Fix Proxmox VE availability on failed updates (@erwindouna - #185500)
- Use a node URL helper instead of reading the DeviceInfo in proxmoxve (@epenet - #186609)
- Ensure ProxmoxVE update entity reports pending package updates (@CoMPaTech - #186800)
- Fix name of the Proxmox VE resume button (@cpruijsen - #188583)
PrusaLink
- Remove redundant downgrade check in prusalink migration (@gjohansson-ST - #185427)
- Handle all httpx errors in PrusaLink coordinator (@joostlek - #190392)
Pterodactyl
- Bump py-dactyl to 2.1.3 and make pterodactyl async (@elmurato - #187018)
- Add button tests to pterodactyl (@elmurato - #188406)
- Improve button tests of pterodactyl (@elmurato - #188617)
- Improve config flow tests of pterodactyl (@elmurato - #188618)
- Improve binary sensor tests of pterodactyl (@elmurato - #188616)
- Add init tests to pterodactyl (@elmurato - #188614)
Pure Energie
PurpleAir
- Split user flow init and data submission in purpleair config flow tests (@tr4nt0r - #184152)
- Use
LocationSelectorinpurpleairintegration (@tr4nt0r - #188859)
Pushbullet
- Raise ConfigEntryError on invalid API key in pushbullet (@gjohansson-ST - #185115)
- Add reauth flow to pushbullet (@gjohansson-ST - #185854)
- Use account name as pushbullet config entry title (@gjohansson-ST - #185855)
Pushover
PVOutput
- Translate the PVOutput authentication failed exception (@frenck - #184361)
- Make PVOutput config flow error tests recover (@frenck - #184359)
- Use suggested values and add field descriptions in the PVOutput config flow (@frenck - #184365)
- Use the PVOutput system name as config entry title (@frenck - #184489)
- Fix PVOutput loading without entities when fetching system info fails (@frenck - #184368)
- Use snapshot tests for the PVOutput sensors (@frenck - #184780)
- Fix system_id type annotation in PVOutput sensor (@epenet - #184849)
- Disable PVOutput temperature and voltage sensors by default (@frenck - #184874)
- Only add PVOutput optional sensors once they report a value (@frenck - #184937)
- Add quality scale to PVOutput and mark it platinum (@frenck - #184786)
- Update pvo to v4.0.0 (@frenck - #185259)
- Add last reported sensor to PVOutput (@frenck - #185265)
pyLoad
- Raise HomeAssistantError for pyLoad action failures (@epenet - #184061)
- Import EntityDescription from the entity helper in pyload (@epenet - #186797)
Python Scripts
- Move python_script execution to helpers module (@epenet - #186081)
- Move python_script actions to services module (@epenet - #186580)
Q
qBittorrent
- Move qbittorrent service registration to services module (@epenet - #184641)
- Use UnitOfInformation constants in qBittorrent sensor (@joostlek - #187798)
- Fetch qBittorrent data in a single executor job (@joostlek - #187947)
Qbus
- Fix Qbus weather binary sensors with boolean state values (@xiajiahang - #187124)
Qingping
- Set PARALLEL_UPDATES to 0 for Qingping platforms (@tengfeili-qingping - #184796)
- Add diagnostics support for Qingping (@tengfeili-qingping - #184794)
- Allow removing unavailable Qingping devices from the device registry (@tengfeili-qingping - #184795)
- Promote Qingping integration to gold quality scale (@tengfeili-qingping - #182386)
QNAP
QR Code
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Qube heat pump
- Bump python-qube-heatpump to 1.15.0 (@MattieGit - #183870)
- Raise Qube heat pump to the silver quality scale (@MattieGit - #183881)
- Add diagnostics to Qube heat pump (@MattieGit - #184364)
- Translate Qube heat pump coordinator exceptions (@MattieGit - #184362)
- Add icon translations to Qube heat pump (@MattieGit - #184363)
- Bump python-qube-heatpump to 1.16.0 (@MattieGit - #184430)
- Mark repair issues as exempt for Qube heat pump (@MattieGit - #184436)
- Use the controller’s mDNS uuid as unique id for Qube heat pump (@MattieGit - #184437)
- Add zeroconf discovery to Qube heat pump (@MattieGit - #184491)
- Add reconfigure flow to Qube heat pump (@MattieGit - #184685)
- Bump python-qube-heatpump to 1.17.0 (@MattieGit - #184693)
- Use typed config entry in Qube heat pump coordinator (@frenck - #185409)
- Set Qube heat pump quality scale to gold (@MattieGit - #185918)
- Keep two Qube heat pumps from taking each other’s address (@MattieGit - #186096)
- Show the Qube device as Qube by HR-energy (@MattieGit - #186194)
- Add a Visit link to the Qube device (@MattieGit - #186377)
- Show the anti-legionella cycle in the Qube heat pump status (@MattieGit - #186384)
- Set Qube heat pump quality scale to platinum (@MattieGit - #186529)
- Add thermostat and water heater categories to Qube heat pump (@MattieGit - #187902)
QVR Pro
R
Rachio
- Move rachio switch service registrations to services module (@epenet - #184399)
- Raise ConfigEntryError instead of returning False in rachio setup (@gjohansson-ST - #185118)
- Use typed config entry in Rachio coordinator (@frenck - #185391)
- Add reauth flow to rachio (@gjohansson-ST - #185848)
- Add diagnostics to Rachio (@joostlek - #189133)
Radio Browser
- Translate the Radio Browser media source errors (@frenck - #184079)
- Test the connection in the Radio Browser config flow (@frenck - #184069)
- Cover the Radio Browser media source in tests (@frenck - #184084)
- Stop catching DNSError in Radio Browser (@frenck - #184083)
- Translate the Radio Browser setup error (@frenck - #184194)
- Bump radios to 2.0.1 (@frenck - #184205)
- Add the quality scale to Radio Browser, at platinum (@frenck - #184085)
Radio frequency
- Remove the entity platform exemption from the class module pylint check (@epenet - #187147)
- Remove entity id tracking from RF helpers (@abmantis - #186550)
- Restrict to entity ID in RF transmitter consumer entity (@abmantis - #186704)
- Add receiver support to Radio Frequency (@abmantis - #186720)
- Return None from config entry method mocks in integration tests (batch 21: nest–sky_hub) (@gjohansson-ST - #188161)
- Add regression test for RF receiver resubscription (@abmantis - #188229)
Rain Bird
- Fix spelling and grammar in strings (@frenck - #184507)
- Add program next run sensors to Rain Bird (@pavandave - #183489)
- Raise ConfigEntryError for duplicate entry in rainbird (@gjohansson-ST - #185120)
- Add sync time button to Rain Bird (@airdrummingfool - #186967)
- Add zone run times to Rain Bird calendar event descriptions (@pavandave - #183487)
RainbowMiner
- Add RainbowMiner integration (@El1t3Mult1pl3x0r - #179604)
Rainforest Eagle
RainMachine
- Split user flow init and data submission in rainmachine config flow tests (@tr4nt0r - #184164)
- Move rainmachine switch service registrations to services module (@epenet - #184420)
- Remove old code from deprecation in Rainmachine (@tr4nt0r - #188667)
Random
- Use unit of measurement selector in random config flow (@jbouwh - #185377)
- Test random sensor config flow without unit of measurement (@jbouwh - #186701)
- Add a state attribute enum to random (@epenet - #189172)
Raspberry Pi
- Raise ConfigEntryError instead of returning False in raspberry_pi setup (@gjohansson-ST - #185121)
- Add exception translations to Raspberry Pi (@joostlek - #189047)
Raspberry Pi Power Supply Checker
- Improve rpi_power repair issue creation (@emontnemery - #187818)
Raw Serial
- Bump serialx to 1.14.0 (@puddly - #186575)
- Bump serialx to 1.15.0 (@puddly - #188084)
- Rename Serial integration to Raw Serial (@balloob - #188758)
- Bump serialx to 1.15.1 (@puddly - #188894)
ReCollect Waste
Recorder
- Fix flaky recorder test_commit_before_commits_pending_writes (@balloob - #186342)
- Add time range to recorder/clear_statistics (@balloob - #186071)
- Define public names of the recorder integration (@epenet - #187180)
- Make recorder schema helpers usable from pytest-home-assistant (@balloob - #187089)
- Roll back the session before retrying recorder queries (@raman325 - #178204)
- Import names from their source modules in recorder (@epenet - #187469)
- Fix race in Recorder.async_get_commit_future (@emontnemery - #187455)
- Simplify Recorder.async_get_commit_future (@emontnemery - #187495)
- Fix statistics dropping last period spanning a DST fall-back (@raman325 - #187653)
- Fix entity filter excluding an explicitly included entity (@raman325 - #187666)
- Fix recorder calendar hour period around DST changes (@raman325 - #187674)
- Fix deadlock when priming conditions relying on recorder history (@emontnemery - #187612)
- Resolve recorder calendar hour offsets without stepping every hour (@raman325 - #187846)
- Use statement-level distinct in recorder queries (@gjohansson-ST - #188669)
- Fix recorder and usage_prediction type annotations (@gjohansson-ST - #188670)
- Don’t unit convert last_reset of statistics (@erwindouna - #188508)
- Use bulk update when changing statistics unit (@erwindouna - #188785)
- Use bulk queries when importing statistics (@erwindouna - #188801)
- Stream statistics rows and reduce per statistic (@erwindouna - #188492)
- Fix statistics initialization selecting oldest history samples (@jslponcev-ui - #188407)
- Fix flaky recorder startup batch test (@erwindouna - #188860)
- Use plain selects for shared data lookups (@erwindouna - #188850)
- Unpack statistics rows instead of using Result.tuples (@gjohansson-ST - #188957)
- Remove unused time window from execute_stmt_lambda_element (@erwindouna - #188848)
Recovery mode
Refoss
- Use typed config entry in Refoss coordinator (@frenck - #185393)
- Bump refoss-ha to 1.2.6 (@ashionky - #186309)
Rejseplanen
- Add reauthentication flow to Rejseplanen (@joostlek - #186204)
- Rejseplanen Quality scale (@Jawar19 - #185780)
Remember The Milk
- Use select and descriptive link text instead of click in strings (@frenck - #184543)
- Deprecate the remember_the_milk account actions (@epenet - #184906)
Remote
- Define public names of the remote integration (@epenet - #186630)
- Move remote entity classes to entity module (@epenet - #186788)
Remote Calendar
- Add event status to remote_calendar (@1358 - #183849)
- Add reconfigure flow to remote calendar (@eseverson - #182957)
- Bump ical to 14.3.1 (@allenporter - #187546)
Remote Python Debugger
- Split debugpy into const and helpers modules (@epenet - #184687)
- Move debugpy service registration to services module (@epenet - #184695)
Renault
- Use enum for renault service names (@epenet - #183983)
- Bump renault-api to 0.6.0 (@epenet - #186073)
- Bump renault-api to 0.6.1 (@epenet - #186119)
- Add two-factor authentication to Renault (@epenet - #186126)
- Trigger Renault reauth when the login expires (@epenet - #186769)
- Mark Renault docs quality scale rules as done (@epenet - #187151)
- Add exception translations to Renault (@epenet - #187197)
- Set up Renault entities per vehicle (@epenet - #187254)
- Remove stale Renault devices on setup (@epenet - #187282)
- Add dynamic devices to Renault (@epenet - #187301)
- Set entity categories on Renault entities (@epenet - #187484)
- Use the masked email as Renault entry title (@epenet - #187511)
- Bump Renault to platinum quality scale (@epenet - #187500)
- Use Renault service argument enum members as schema keys (@epenet - #187877)
- Bump renault-api to 0.6.2 (@der-eismann - #188743)
Renson
Reolink
- Add Reolink snapshot past action (@starkillerOG - #183812)
- Use freezer instead of coordinator refresh in reolink tests (@erwindouna - #185080)
- Use typed config entry in Reolink coordinator (@frenck - #185413)
- Use the common write error helper in camera, reolink, file, local_todo and local_calendar (@erwindouna - #185677)
- Translate hardcoded exception messages in Reolink (@erwindouna - #185616)
- Add two way audio camera support (@starkillerOG - #184716)
- Bump reolink_aio to 0.22.0 (@starkillerOG - #188556)
- Use child devices for Reolink dual lens sub-devices (@starkillerOG - #188816)
- Speedup Reolink light turn on (@starkillerOG - #188874)
- Reolink two-way audio in options flow (@starkillerOG - #190354)
Repairs
- Hide repairs owned by disabled config entries (@emontnemery - #186369)
- Deprecate omitting step_id in data entry flow results (@gjohansson-ST - #187682)
RESTful
- Simplify chained comparisons flagged by pylint 4.1 (@Markus98 - #184666)
- Move rest config processing to util module (@epenet - #186079)
- Move rest reload action to services module (@epenet - #186117)
- Define public names of the rest integration (@epenet - #187771)
- Add exception translations to RESTful (@joostlek - #189048)
RESTful Command
- Fix rest_command reload when the rest_command key is removed (@jesserockz - #187262)
- Move rest_command actions to services module (@epenet - #187444)
RFLink
- Improve handling of entity_id change in rflink (@emontnemery - #183856)
- Move rflink service registration to services module (@epenet - #184460)
- Adapt rflink to in-place entity ID change (@emontnemery - #184886)
- Split lookup registration from async_added_to_hass in rflink (@gjohansson-ST - #185872)
RFXCOM RFXtrx
- Bump pyRFXtrx to 0.34.0 (@pdecat - #168891)
- Remove redundant wind direction translation key from RFXCOM RFXtrx (@frenck - #185339)
- Migrate RFXtrx to entry runtime data (@erwindouna - #185606)
- Raise instead of returning False when unloading RFXCOM RFXtrx (@gjohansson-ST - #186239)
- Switch rfxtrx to sub entries (@elupus - #181466)
Rheem EcoNet Products
- Raise ConfigEntryError on invalid credentials in econet (@gjohansson-ST - #185000)
- Add reauth flow to econet (@gjohansson-ST - #185846)
- Fix EcoNet sensor names and add entity icons (@sarabveer - #188096)
- Fix stale config_subentry_id snapshots in econet, teslemetry and watergate (@joostlek - #188971)
- Handle missing EcoNet energy usage (@sarabveer - #188987)
Ridder HortiMaX Pro
Ridwell
Ring
- Import RTCIceCandidateInit from webrtc_models in ring (@epenet - #186879)
- Import names from their source modules in ring (@epenet - #187696)
- Remove deprecated sensors from Ring integration (@tr4nt0r - #187592)
- Remove deprecated binary sensors from Ring (@tr4nt0r - #187596)
- Remove deprecated switch from Ring integration (@tr4nt0r - #188108)
Risco
- Remove user-configurable polling interval from risco (@tr4nt0r - #184386)
- Raise ConfigEntryError on local authentication failure in risco (@gjohansson-ST - #185142)
- Use typed config entry in Risco coordinator (@frenck - #185395)
- Raise instead of returning False when unloading Risco (@gjohansson-ST - #186257)
- Remove redundant entity constructor in Risco (@joostlek - #189270)
Rituals Perfume Genie
- Migrate Rituals Perfume Genie to ritualsgenie (@frenck - #184313)
- Poll Rituals Perfume Genie hubs and sensors separately (@frenck - #184328)
- Store the Rituals Perfume Genie token in the config entry (@frenck - #184519)
- Add firmware update entity to Rituals Perfume Genie (@frenck - #186978)
- Use the model of Rituals Perfume Genie diffusers as reported by Rituals (@frenck - #186973)
- Add standby LED switch to Rituals Perfume Genie (@frenck - #186981)
- Add cartridge binary sensor to Rituals Perfume Genie (@frenck - #186988)
- Report the Rituals Perfume Genie fill level as a percentage (@frenck - #186995)
- Add field descriptions to the Rituals Perfume Genie config flow (@frenck - #187035)
- Raise translated errors for Rituals Perfume Genie actions (@frenck - #187020)
- Translate the Rituals Perfume Genie coordinator and setup errors (@frenck - #187039)
- Set the Rituals Perfume Genie room size in square meters as well (@frenck - #187024)
- Add and remove Rituals Perfume Genie diffusers without a reload (@frenck - #187012)
Roborock
- Add map image for Roborock B01 Q7 devices (@MS2620 - #183884)
- Fix Q7 map image refresh handling (@MS2620 - #184333)
- Use freezer instead of coordinator refresh in roborock tests (@erwindouna - #185180)
- Add repeat state select entity for Roborock Q7 (@rdallevi - #186040)
- Fix Roborock dock dust collection mode parameters (@danielmigueltejedor - #186486)
- Add a translation for Roborock’s missing map exception. (@Lash-L - #187964)
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
- Add Roborock dock error resolution button (@paolostivanin - #183768)
- Fix stale config_subentry_id in snapshots (@chemelli74 - #188956)
Roku
Rollease Acmeda Automate
- Remove dead setup failure path in acmeda (@gjohansson-ST - #184972)
- Raise instead of returning False when unloading Rollease Acmeda Automate (@gjohansson-ST - #186222)
RoonLabs music player
- Adapt roon to in-place entity ID change (@emontnemery - #184887)
- Raise ConfigEntryError when server setup fails in roon (@gjohansson-ST - #185123)
- Make roon group members follow entity ID rename (@emontnemery - #184963)
- Add roon event test (@emontnemery - #184965)
- Raise instead of returning False when unloading RoonLabs music player (@gjohansson-ST - #186240)
Roth Touchline SL
Ruckus
- Improve ruckus_unleashed device tracker tests (@emontnemery - #189217)
Russound RIO
Ruuvi Gateway
- Use typed config entry in Ruuvi Gateway coordinator (@frenck - #185397)
- Register a device for the Ruuvi Gateway Bluetooth scanner (@tillo - #181826)
S
SAJ Solar Inverter
- Fix spelling and grammar in strings (@frenck - #184507)
- Add reauthentication flow to SAJ Solar Inverter (@joostlek - #186299)
- Switch SAJ to aiosaj (@Rsarrechia - #187343)
Samsung Family Hub
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Samsung Infrared
Samsung Smart TV
- Use TextSelectors in Samsung TV (@chemelli74 - #184020)
- Split user flow init and data submission in samsungtv config flow tests (@tr4nt0r - #184097)
- Bump getmac to 0.9.6 (@chemelli74 - #184162)
- Bump samsungtvws to 3.0.7 (@chemelli74 - #190087)
Samsung SyncThru Printer
- Raise ConfigEntryError when API is not supported in syncthru (@gjohansson-ST - #185132)
- Shorten SyncThru toner and drum entity names (@piitaya - #185228)
Samsung TV via ExLink
- Bump samsung-exlink to 1.2.0 (@balloobbot - #185581)
- Add Art mode as input source to Samsung ExLink (@balloob - #186292)
- Bump samsung-exlink to 1.2.1 to retry serial connection failures (@balloob - #186963)
Satel Integra
- Clean up connection callbacks for Satel Integra during unload (@Tommatheussen - #187329)
- Bump satel-integra to 1.6.0 (@Tommatheussen - #187457)
- Validate user access code length for Satel Integra (@Tommatheussen - #187756)
- Migrate Satel Integra callbacks (@Tommatheussen - #187470)
- Log message when Satel Integra devices become unavailable (@Tommatheussen - #181080)
- Improve options flow for Satel Integra (@Tommatheussen - #188205)
- Apply late review changes for Satel Integra (@Tommatheussen - #188671)
- Add system status sensors to Satel Integra (@Tommatheussen - #188170)
- Update the satel_integra binary sensor snapshots (@epenet - #188696)
- Handle output switching failures for Satel Integra (@Tommatheussen - #187583)
- Handle alarm panel action failures for Satel Integra (@Tommatheussen - #189178)
- Fixed some missing action validation cases for Satel Integra (@Tommatheussen - #189415)
Saunum
- Use freezer instead of coordinator refresh in saunum tests (@erwindouna - #185168)
Scenes
- Define public names of the scene integration (@epenet - #186632)
- Move scene entity classes to entity module (@epenet - #186787)
- Use the scene action enums in the homeassistant scene platform (@epenet - #189222)
- Add a state attribute enum to scene (@epenet - #189223)
Schedule
- Move schedule service registration to services module (@epenet - #184288)
- Move schedule schemas to schema module (@epenet - #186351)
- Move schedule entity to entity module (@epenet - #186368)
- Fix schedule busy loop in the repeated DST fall-back hour (@raman325 - #187626)
- Use enums for utility_meter and schedule action names (@epenet - #188089)
- Use the enums in the schedule tests (@epenet - #188722)
- Define public names of the schedule integration (@epenet - #188759)
Schlage
- Move schlage service registration to services module (@epenet - #184459)
- Add temporary access code support to Schlage (@abpei - #180909)
ScorpionTrack
- Add ScorpionTrack share reconfiguration (@Herbertmt978 - #182089)
- Use scheduled polling in ScorpionTrack diagnostics tests (@Herbertmt978 - #185119)
- Report missing ScorpionTrack readings as unknown (@Herbertmt978 - #187701)
- Promote ScorpionTrack to Gold (@Herbertmt978 - #187765)
- Enable strict typing for ScorpionTrack (@Herbertmt978 - #188541)
- Promote ScorpionTrack to Platinum (@Herbertmt978 - #188563)
Scrape
- Use typed config entry in Scrape coordinator (@frenck - #185398)
- Use unit of measurement selector in scrape config flow (@jbouwh - #185364)
- Move rest config processing to util module (@epenet - #186079)
- Allow no unit of measurement for scrape sensor config entries (@jbouwh - #186700)
- Define public names of the rest integration (@epenet - #187771)
- Remove the unit of measurement null guard from scrape sensor config entries (@jbouwh - #188199)
- Bump lxml to 6.1.3 (@gjohansson-ST - #188598)
- Bump beautifulsoup4 to 4.15.0 (@gjohansson-ST - #188597)
- Set manual trigger sensors to unknown when the value template renders none (@gjohansson-ST - #188502)
Scripts
- Fix flaky script shared context test (@epenet - #183838)
- Adapt script to in-place entity ID change (@emontnemery - #184889)
- Keep broken automations and scripts linked to their blueprint (@frenck - #184984)
- Remove deprecated async_track_state_change from event (@gjohansson-ST - #184756)
- Add the run to automation triggered and script started events (@Xyolyp - #184957)
- Move script entities to entity module (@epenet - #186083)
- Move script config processing to util module (@epenet - #186461)
- Move script actions to services module (@epenet - #186579)
- Define public names of the script integration (@epenet - #187181)
- Use issues refresh helper in script (@emontnemery - #188030)
- Export ATTR_LAST_TRIGGERED from the script integration (@epenet - #189196)
- Add a state attribute enum to script (@epenet - #189193)
- Add an action enum to script (@epenet - #189250)
Seafile
- Add Seafile integration (@erwindouna - #186612)
- Add backup agent to Seafile (@erwindouna - #189002)
Search
SEKO PoolDose
- Use freezer instead of coordinator refresh in pooldose tests (@erwindouna - #185174)
Select
- Use TaggedUnion for device automation and ntfy action schemas (@balloobbot - #186178)
- Move select entity classes to entity module (@epenet - #186811)
- Test the for option of the climate and select device triggers (@epenet - #187508)
Sense
sensecap
- Add SenseCAP LoRaWAN integration (@balloobbot - #186344)
SenseCAP
- Return None from config entry methods in SenseCAP (@gjohansson-ST - #187738)
- Add LoRaWAN connectivity metadata to integrations (@balloob - #189905)
Sensibo
- Raise config entry errors when migration fails in sensibo (@gjohansson-ST - #185429)
Sensor
- Adjust sensor to not override Entity.add_to_platform_xxx methods (@emontnemery - #183777)
- Allow setting owning config entry on repair issues (@emontnemery - #186197)
- Complete the public names of the sensor integration (@epenet - #186649)
- Move sensor entity classes to entity module (@epenet - #186863)
- Don’t let an unhashable sensor attribute stop statistics compilation (@raman325 - #178258)
- Fix energy_distance sensor failing on 0 between inverse units (@raman325 - #187657)
- Use issues refresh helper in sensor (@emontnemery - #188031)
Sensor.Community
Seven Segments OCR
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
SFR Box
- Bump sfrbox-api to 0.1.2 (@epenet - #183903)
- Fix SFR Box configuration URL when host is a URL (@epenet - #186669)
- Bump sfrbox-api to 0.2.0 (@epenet - #186675)
- Start SFR Box reauthentication on button authentication failure (@epenet - #186684)
- Mark SFR Box documentation rules as done (@epenet - #186683)
- Bump sfrbox-api to 0.2.1 (@epenet - #186765)
SFTP Storage
- Add SFTP Storage backup upload progress (@KapJI - #186703)
- Convert backup tests in sftp_storage to end-to-end (@emontnemery - #188476)
- Close backup download stream in sftp_storage when not fully read (@emontnemery - #188690)
Shark IQ
- Remove myself as code owner/maintainer (@TheOneOgre - #184396)
- Raise ConfigEntryError on sign-in failure in sharkiq (@gjohansson-ST - #185124)
Shell Command
- Move shell_command actions to services module (@epenet - #187445)
- Use issues refresh helper in shell_command (@emontnemery - #188032)
Shelly
- Use TextSelectors in Shelly (@chemelli74 - #184023)
- Add
updateentity for Shelly BLU TRV (@bieniu - #182682) - Raise ConfigEntryError for custom integration entries in shelly (@gjohansson-ST - #185125)
- Assert the unique ID in shelly config flow tests (@erwindouna - #185307)
- Add a
last seensensor for Shelly RPC sleeping devices (@bieniu - #185637) - Add service to set Shely RPC cover position and tilt in a single call (@thecode - #185715)
- Support the Shelly ir_code component (@bieniu - #185466)
- Support the Shelly ledstrip component (@bieniu - #185781)
- Improve state restore in shelly (@emontnemery - #185979)
- Infrared platform support in the Shelly integration (@bieniu - #185804)
- Add Shelly last command source sensor (@thecode - #186082)
- Add power factor sensor for Shelly Power Strip (@thecode - #186132)
- Raise instead of returning False when unloading Shelly (@gjohansson-ST - #186258)
- Use get_camera_from_entity_id in motioneye and shelly camera tests (@epenet - #186594)
- Prevent
NotInitializedexception in the Shelly integration (@bieniu - #186685) - Fix Shelly climate platform test coverage back to 100% (@thecode - #186693)
- Bump aioshelly to 13.35.0 (@bieniu - #186712)
- Add effect control entities for the Shelly ledstrip component (@bieniu - #186679)
- Add categories to the Shelly manifest (@frenck - #186921)
- Add a repair issue to enable
raw_receivefor the Shelly infrared platform (@bieniu - #187005) - Support a
camerazonecomponent in the Shelly integration (@bieniu - #187395) - Improve shelly repair issue creation (@emontnemery - #187819)
- Pass step_id explicitly in shelly repairs (@gjohansson-ST - #187865)
- Shelly fix not initialized (@thecode - #186799)
- Improve firmware updates for the Shelly BLU TRV (@bieniu - #188008)
- Always secure Shelly device after BLE Wi-Fi provisioning (@thecode - #188073)
- Add an entity to control the effect palette for the Shelly ledstrip (@bieniu - #187345)
- Allow firmware update of Shelly devices running unsupported firmware (@thecode - #188381)
- Skip Shelly entry reload when plug LED settings change (@cpruijsen - #188575)
- Remove redundant entity constructor in Shelly (@joostlek - #189271)
- Match the Shelly outbound WebSocket repair on the URL path (@cpruijsen - #189255)
Shopping list
- Remove deprecated YAML from
shopping_list(@tr4nt0r - #187238) - Define public names of the shopping_list integration (@epenet - #187248)
- Import EVENT_SHOPPING_LIST_UPDATED from homeassistant.const (@epenet - #187305)
- Add action enums to shopping_list (@epenet - #189288)
Sighthound
- Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Silla Prism
SilverCrest Infrared
Simple Service Discovery Protocol (SSDP)
SimpliSafe
- Use select and descriptive link text instead of click in strings (@frenck - #184543)
- Use typed config entry in SimpliSafe coordinator (@frenck - #185363)
- Improve SimpliSafe websocket reconnects (@rlippmann - #185749)
Siren
- Raise translated ServiceValidationError for invalid siren tones (@joostlek - #186312)
- Define public names of the siren integration (@epenet - #186633)
- Move siren entity classes to entity module (@epenet - #186786)
- Use the siren action argument enum for the turn_on parameters (@epenet - #188174)
Sky Hub
- Migrate sky_hub integration to use ScannerEntity and config flow (@jackstevenson - #187258)
- Return None from config entry method mocks in integration tests (batch 21: nest–sky_hub) (@gjohansson-ST - #188161)
- Add quality_scale.yaml to sky_hub integration (@jackstevenson - #188191)
- Adapt sky_hub device tracker to base class changes (@emontnemery - #189206)
Skybeacon
Slack
- Raise ConfigEntryError on invalid API key in slack (@gjohansson-ST - #185126)
- Add reauth flow to slack (@gjohansson-ST - #185842)
Slide Local
SlimProto (Squeezebox players)
SMA Solar
- Bump pysma to 1.1.9 (@erwindouna - #183876)
- Assert the unique ID in melcloud, portainer, sma and tado config flow tests (@erwindouna - #185252)
- Use typed config entry in SMA Solar coordinator (@frenck - #185400)
- Remove obsolete config-flow-field-not-translated disables (@gjohansson-ST - #185878)
Smappee
- Add reauthentication flow to Smappee (@joostlek - #186304)
- Import SmappeeLocalApi from pysmappee directly in smappee (@epenet - #187790)
Smart Meter B Route
Smart Meter Texas
- Raise ConfigEntryError on authentication error in smart_meter_texas (@gjohansson-ST - #185127)
- Add reauth flow to smart_meter_texas (@gjohansson-ST - #185860)
SmartThings
- Add washer and dryer progress sensors to SmartThings (@xthree - #178501)
- Add shared OAuth2 client authentication helper (@zweckj - #183240)
- Add exception translations to SmartThings (@joostlek - #186328)
- SmartThings: add values for “Manufacturer” for Zigbee devices (@csstup - #179444)
- Add TV picture mode select and sound mode to SmartThings (@zivgin - #185932)
- Pass a DeviceInfo to async_get_or_create_device in smartthings (@epenet - #187688)
- Handle partial power consumption reports in SmartThings (@zivgin - #188393)
SmartTub
- Move smarttub service registration to services module (@epenet - #184620)
- Import binary sensor state constants from const in tests (@epenet - #186583)
- Make SmartTub polling tolerate slow API responses (@mdz - #188595)
SmartyPlants
- Add SmartyPlants integration (@bigbimbs - #180437)
- Add reauthentication flow to SmartyPlants (@joostlek - #186393)
SMHI
- Set parallel updates for smhi weather platform (@gjohansson-ST - #187367)
- Add diagnostics to smhi (@gjohansson-ST - #187371)
- Add exception translations to smhi (@gjohansson-ST - #187372)
- Improve smhi test coverage (@gjohansson-ST - #187369)
- Migrate smhi sensor unique IDs when reconfiguring the location (@gjohansson-ST - #187373)
- Skip taken unique IDs when reconfiguring the smhi location (@gjohansson-ST - #187607)
- Set smhi quality scale to bronze (@gjohansson-ST - #187366)
- Bump pysmhi to 2.1.0 (@gjohansson-ST - #187907)
- Add smhi reconfigure already configured test (@gjohansson-ST - #188210)
- Remove unused fwi translation from smhi (@gjohansson-ST - #188211)
- Set smhi quality scale to platinum (@gjohansson-ST - #187880)
SMLIGHT SLZB
- Authenticate SMLIGHT entries with stored credentials first (@Jason-Morcos - #186526)
SMTP
- Add diagnostics platform to SMTP (@tr4nt0r - #184091)
- Fix SMTP integration not starting reauth flow on authentication error (@tr4nt0r - #184135)
- Update quality scale of SMTP integration to platinum 🏆️ (@tr4nt0r - #182619)
- Add SilverCrest Infrared integration (@tr4nt0r - #187438)
- Use the common read error helper in
smtp(@tr4nt0r - #188876)
Snapcast
- Add Snapcast stream playback controls (@Chreece - #184100)
- Expose media player group members without grouping support (@arturpragacz - #188390)
Snooz
- Move snooz service registration to services module (@epenet - #184488)
- Bump pysnooz to 0.10.1 (@AustinBrunkhorst - #190140)
Sofar
- Merge duplicate UpdateFailed raises in the Sofar coordinator (@darkrain-nl - #183797)
- Share the Sofar config flow probe between setup and reconfigure (@darkrain-nl - #183832)
- Add serial connection support to the Sofar integration (@darkrain-nl - #183850)
- Index stored states by entity registry ID instead of by entity ID (@emontnemery - #183906)
- Let Sofar reconfigure change the line settings of the port in use (@darkrain-nl - #184214)
- Read only the identity in the Sofar config flow probe (@darkrain-nl - #184847)
- Bump sofar-modbus to 0.19.0 (@darkrain-nl - #184897)
- Decouple the Sofar tuner tests from the link timeout ask (@darkrain-nl - #185721)
- Wait for background tasks in the Sofar timed refresh tests (@darkrain-nl - #185731)
- Bump sofar-modbus to 0.20.0 (@darkrain-nl - #185766)
- Fix Sofar enum sensors by taking their options from the library (@darkrain-nl - #185790)
- Let Sofar set up while the inverter sleeps (@darkrain-nl - #185922)
- Let Sofar set up inverters detected from their address masks (@darkrain-nl - #185943)
- Bump sofar-modbus to 0.21.0 (@darkrain-nl - #185986)
- Take the Sofar device rules from sofar-modbus (@darkrain-nl - #186085)
- Bump sofar-modbus to 0.22.0 (@darkrain-nl - #186153)
- Drop the unused timeout lookup from the Sofar coordinator (@darkrain-nl - #185954)
- Take the unrecognized Sofar inverter verdict from sofar-modbus (@darkrain-nl - #186160)
- Drop the redundant Sofar total sensor seed (@darkrain-nl - #185966)
- Let a Sofar entry move between network and serial connections (@darkrain-nl - #184763)
- Let sofar-modbus own the Sofar poll retry and link tuning (@darkrain-nl - #186190)
- Let sofar-modbus read the Sofar inverter identity (@darkrain-nl - #186161)
- Test the Sofar clock result sensor on PV inverters (@darkrain-nl - #186159)
- Tell a silent Sofar inverter apart from an unreachable adapter (@darkrain-nl - #186422)
- Patch the Sofar total seed the integration calls (@darkrain-nl - #186774)
- Bump sofar-modbus to 0.23.0 (@darkrain-nl - #186773)
- Keep Sofar meter sensors while the inverter type is unsettled (@darkrain-nl - #186496)
- Log Sofar component failures only when something answered (@darkrain-nl - #186589)
- Simplify the Sofar total sensor (@darkrain-nl - #186495)
- Bump sofar-modbus to 0.25.0 (@darkrain-nl - #187380)
- Add Sofar battery cut-off SOC sensors (@darkrain-nl - #187387)
- Group sequential async_add_entities calls in Sofar (@joostlek - #187525)
- Add Sofar fault event entity (@darkrain-nl - #187389)
- Bump sofar-modbus to 0.25.1 (@darkrain-nl - #189413)
- Bump sofar-modbus to 0.25.2 (@darkrain-nl - #189437)
- Bump sofar-modbus to 0.25.3 (@darkrain-nl - #189540)
- Fix Sofar reload loop and phantom sensors after a night setup (@darkrain-nl - #189423)
- Fix Sofar fault event replaying old faults after a night setup (@darkrain-nl - #190165)
SolarEdge
- Raise ConfigEntryError when site is not active in solaredge (@gjohansson-ST - #185128)
- Remove redundant battery power translation key from SolarEdge (@frenck - #185336)
- Remove myself as codeowner of SolarEdge (@frenck - #185492)
- SolarEdge: Allow removing credentials in reconfigure flow (@tronikos - #186306)
- Skip non-PV equipment in SolarEdge module statistics (@tronikos - #187055)
- Fix SolarEdge power flow TypeError on null API response (@surajvelip - #188454)
- Prevent SolarEdge API key from leaking into logs (@surajvelip - #188452)
- Add diagnostics to SolarEdge (@joostlek - #189145)
SolarEdge Modbus
Solarman
- Solarman gold/docs examples use cases (@Yves-Xu - #182980)
- Remove redundant power factor translation key from Solarman (@frenck - #185338)
- Mark Solarman docs-examples and docs-use-cases as done (@Yves-Xu - #186122)
solyx_energy
- Add Solyx Energy Cloud integration (@MartinaeyNL - #176572)
Sonarr
Sonos
- Bump soco to 0.31.5 (@nicolerenee - #184765)
- Fix Sonos polling error logging (@ronaldvdmeer - #188203)
- Set config entry id on sonos repair issues (@emontnemery - #187822)
- Add exception translations to Sonos (@joostlek - #189049)
- bump soco to 0.32.1 (@PeteRager - #189917)
Sony Bravia TV
- Read external device data keys as plain strings (@epenet - #187299)
- Add
data_descriptionto the Bravia TV config flow (@bieniu - #188341) - Improve config_flow tests for the Bravia TV integtration (@bieniu - #188343)
- Add IQS and set its value to
bronzefor the BraviaTV integration (@bieniu - #188529) - Set
PARALLEL_UPDATESto1in the BraviaTV integration (@bieniu - #188882) - Raise
ServiceValidationErrorinstead ofValueErrorin the Bravia TV (@bieniu - #189220)
Sony PlayStation 4
- Raise ConfigEntryError when region migration fails in ps4 (@gjohansson-ST - #185428)
Sony Songpal
Soundavo WS66i 6-Zone Amplifier
Specialized Turbo
Speech-to-text (STT)
- Add partial transcripts to Speech-to-Text entity (@synesthesiam - #184336)
- Move stt entity classes to entity module (@epenet - #186866)
Speedtest.net
- Use freezer instead of coordinator refresh in speedtestdotnet tests (@erwindouna - #185169)
- Add exception translations to Speedtest.net (@joostlek - #189050)
- Add diagnostics to Speedtest.net (@joostlek - #189156)
Spin EV Charger
spin_ble
- Return None from config entry methods in Spin EV Charger (@gjohansson-ST - #187740)
- Add charging switch to Spin EV Charger (@Dr-Blank - #187719)
- Update Spin EV Charger switch snapshot to the registry entry format (@joostlek - #188923)
- Add binary sensors to Spin EV Charger (@Dr-Blank - #188916)
- Add diagnostics to Spin EV Charger (@Dr-Blank - #188988)
spinev
Spotify
- Add exception translations to Spotify (@joostlek - #186326)
- Add reconfigure flow to Spotify (@joostlek - #189079)
- Bump spotifyaio to 2.1.0 (@joostlek - #190363)
Squeezebox (Lyrion Music Server)
- Add missing async_step_reauth step in Squeezebox config_flow (@peteS-UK - #186519)
- Pass a DeviceInfo to async_get_or_create_device in squeezebox (@epenet - #187575)
SRP Energy
- Remove obsolete config-flow-field-not-translated disables (@gjohansson-ST - #185878)
Starlink
- Add Starlink positioning exclusive switch (@berezhinskiy - #184021)
- Use freezer instead of coordinator refresh in starlink tests (@erwindouna - #185175)
- Use the dt helpers instead of datetime.now (@erwindouna - #185620)
Statistics
- Fix statistics average_linear and average_step crashing on samples with the same timestamp (@raman325 - #187627)
- Coalesce statistics purges of samples expiring together (@zivgin - #184807)
- Wait for recorder in statistics preview tests (@balloob - #188642)
- Fix statistics initialization selecting oldest history samples (@jslponcev-ui - #188407)
- Add a state attribute enum to statistics (@epenet - #189173)
Steamist
- Migrate Steamist to entry runtime data (@erwindouna - #185613)
SteamVR Base Station
- Add sensor platform to SteamVR Base Station (@g4bri3lDev - #187544)
- Return None from config entry methods in SteamVR Base Station (@gjohansson-ST - #187741)
- Add identify button to SteamVR Base Station (@g4bri3lDev - #187572)
- Add power mode and channel selects to SteamVR Base Station (@g4bri3lDev - #188257)
- Add diagnostics to SteamVR Base Station (@g4bri3lDev - #188263)
- Add fault binary sensor to SteamVR Base Station (@g4bri3lDev - #188261)
- Bump Quality Scale of SteamVR Base station to Platinum (@g4bri3lDev - #188265)
steamvr_lighthouse
- Add SteamVR Base Station integration (@g4bri3lDev - #183503)
STIEBEL ELTRON
- Bump pystiebeleltron to 0.9.0 (@Optic00 - #184366)
- Use MockConfigEntry flow helpers in STIEBEL ELTRON tests (@joostlek - #186457)
- Bump pystiebeleltron to 0.9.2 (@Optic00 - #186702)
- Bump pystiebeleltron to 0.10.0 (@Optic00 - #188691)
- Bump pystiebeleltron to 0.10.1 (@Optic00 - #189495)
Stookwijzer
- Mark action-exceptions as todo for no-tier integrations (@epenet - #184004)
- Raise ConfigEntryError when location migration fails in stookwijzer (@gjohansson-ST - #185430)
Stream
- Add exception translations to stream recording (@frenck - #184438)
- Keep stream recordings monotonic across a worker restart (@alaraun - #188198)
Subaru
- Raise ConfigEntryError on invalid credentials in subaru (@gjohansson-ST - #185129)
- Remove redundant is charging translation key from Subaru (@frenck - #185340)
- Add reauth flow to subaru (@gjohansson-ST - #185862)
- Return None from config entry method mocks in integration tests (batch 20: enocean–thethingsnetwork_lorawan) (@gjohansson-ST - #187993)
Suez Water
- fix: bump pySuezV2 to 2.0.8 (@jb101010-2 - #185589)
Sun
- Define public names of the sun integration (@epenet - #187298)
- Use a signed offset in sun and calendar triggers (@piitaya - #184855)
- Add a state attribute enum to sun (@epenet - #189194)
Sunricher DALI
- Update action-exceptions exemption reason for Sunricher DALI (@epenet - #184053)
- Add DALI connectivity metadata to integrations (@balloob - #189896)
Sunsynk
- Remove redundant translation names from Sunsynk (@frenck - #185341)
- Add reauthentication flow to Sunsynk (@joostlek - #186215)
Sure Petcare
- Split user flow init and data submission in surepetcare config flow tests (@tr4nt0r - #184099)
- Bump surepy to 0.10.0 (@frenck - #185699)
Swisscom Internet-Box
- Add reauthentication flow to Swisscom Internet-Box (@joostlek - #186300)
- Adapt swisscom device tracker to base class changes (@emontnemery - #189207)
Switch
- Define public names of the switch integration (@epenet - #186634)
- Move switch entity classes to entity module (@epenet - #186776)
SwitchBot Bluetooth
- Assert the unique ID in switchbot config flow tests (@erwindouna - #185308)
- Add SwitchBot Circulator Fan Pro support (@Onero-testdev - #173262)
- Add Climate Panel keystate sensors to SwitchBot (@Onero-testdev - #176386)
- Assert the unique ID in the SwitchBot Circulator Fan Pro flow test (@darkrain-nl - #185768)
- Fix flaky SwitchBot fan tests (@zweckj - #185913)
- Fix flaky SwitchBot fan tests teardown (@epenet - #185987)
- Migrate SwitchBot device types for PySwitchbot 3.0.0 (@zerzhang - #184863)
- Assert the unique ID in the SwitchBot curtain flow test (@erwindouna - #186220)
- Add sync date and time button for SwitchBot Meter Pro (@skirmess - #176435)
- Bump PySwitchbot to 3.1.0 (@FutureGUIs - #186880)
- Wait for background tasks after setup in SwitchBot tests (@epenet - #187213)
- Stop SwitchBot Meter Pro CO2 connecting during platform setup (@fromeijn - #180898)
- Switchbot filter usage public api (@FutureGUIs - #186874)
- Fix OverflowError in time period validation for huge values (@raman325 - #187639)
- Fix weekly refresh of SwitchBot Meter Pro CO2 config entities (@fromeijn - #187757)
- Do not fail cover actions on an unsupported speed (@Bascht74 - #188271)
- Add random image button to SwitchBot Art Frame (@italo-lombardi - #182123)
- Don’t block SwitchBot migration when only passive scanners hear the device (@joostlek - #189400)
SwitchBot Cloud
- Raise ConfigEntryError on invalid authentication in switchbot_cloud (@gjohansson-ST - #185131)
- Use typed config entry in SwitchBot Cloud coordinator (@frenck - #185401)
- Fix SwitchBot Cloud temperature restoration using the saved unit (@abmantis - #185992)
- Add reauth flow to switchbot_cloud (@gjohansson-ST - #185847)
- Add exception translations to SwitchBot Cloud (@joostlek - #189023)
- Add diagnostics to SwitchBot Cloud (@joostlek - #189141)
Switcher
- Move switcher_kis service registration to services module (@epenet - #184608)
- Use typed config entry in Switcher coordinator (@frenck - #185402)
- Bump aioswitcher to 6.3.0 (@chemelli74 - #188610)
- Bump aioswitcher to 6.4.0 (@thecode - #189818)
Synology DSM
- Split user flow init and data submission in synology_dsm config flow tests (@tr4nt0r - #184102)
- Advance time instead of refreshing coordinators directly in Synology DSM (@mib1185 - #185104)
- Remove redundant translation keys from Synology DSM (@frenck - #185342)
- Bump py-synologydsm-api to 2.11.0 (@mib1185 - #185689)
- Synology DSM handle privilege and enforced otp errors (@mib1185 - #185700)
- Add Synology DSM backup upload progress (@KapJI - #186709)
- Fix Synology DSM not detecting USB drives connected after integration startup (@partymola - #182786)
- Advance time instead of refreshing the coordinator in Synology DSM (@epenet - #187230)
- Simplify Synology DSM first USB device test (@partymola - #187252)
- Pass step_id explicitly in synology_dsm repairs (@gjohansson-ST - #187866)
- Add common reboot action translation key (@Markus98 - #187994)
- Convert backup tests in synology_dsm to end-to-end (@emontnemery - #188478)
- Remove redundant entity constructors in Synology DSM (@joostlek - #189272)
- Bump py-synologydsm-api to 2.11.1 (@mib1185 - #189479)
System Bridge
- Bump systembridgeconnector to 5.5.0 (@timmo001 - #185220)
- Fix System Bridge follow-ups from the 5.5.0 bump (@timmo001 - #185256)
- Test system_bridge config flow error recovery (@erwindouna - #185481)
- Bump systembridgeconnector to 5.12.1 (@timmo001 - #185791)
- Fix System Bridge memory free sensor ignoring reclaimable memory (@timmo001 - #185798)
- Fix System Bridge WebSocket not closing on Home Assistant stop (@timmo001 - #186383)
- Remove System Bridge reload update listener (@timmo001 - #184925)
- Add System Bridge entity categories, parallel updates and ratio unit (@timmo001 - #185267)
- Bump systembridgeconnector to 5.16.0 (@timmo001 - #188421)
- Add load average sensors to System Bridge (@timmo001 - #188569)
- Bump systembridgeconnector to 5.18.0 (@timmo001 - #188512)
- Add network sensors to System Bridge (@timmo001 - #188555)
- Add disk read and write rate sensors to System Bridge (@timmo001 - #188678)
- Fix System Bridge sensor snapshot after config subentry change (@erwindouna - #188798)
- Add battery state, AC power and per-battery sensors to System Bridge (@timmo001 - #188564)
System Health
- Define public names of the system_health integration (@epenet - #187186)
- Add system info LLM tool (@balloob - #188522)
System Log
- Move system_log constants to const module (@epenet - #184647)
- Move system_log service registration to services module (@epenet - #184709)
- Add Home Assistant LLM API and system log tool (@allenporter - #181958)
- Add live log stream to system log (@erwindouna - #185595)
- Add UTC offset to log timestamps (@agners - #186660)
- Add LLM tools to query the full logs (@balloob - #187971)
- Read the Supervisor log for the integration log history (@erwindouna - #189404)
System monitor
- Adapt systemmonitor to in-place entity ID change (@emontnemery - #184890)
- Create System Monitor psutil wrapper and get disk mounts in a single executor job (@joostlek - #187948)
- Fix System Monitor IP sensor setup with missing addresses (@jagostinhoj - #189353)
Škoda
- Add new Skoda integration (@TomVSB - #181591)
- Add categories to Skoda manifest (@epenet - #187356)
- Return None from config entry methods in Škoda (@gjohansson-ST - #187739)
- Bump skoda-public-api to 1.4.0 (@DavidMagyarics - #189997)
T
Tado
- Use enums for tado service names and arguments (@epenet - #183980)
- Move tado platform service registrations to services module (@epenet - #184398)
- Use freezer instead of coordinator refresh in tado tests (@erwindouna - #185170)
- Assert the unique ID in melcloud, portainer, sma and tado config flow tests (@erwindouna - #185252)
Tags
- Move tag entity to entity module (@epenet - #186361)
- Define public names of the tag integration (@epenet - #187208)
- Add a state attribute enum to tag (@epenet - #189195)
Tailscale
- Add OAuth client credentials support to Tailscale (@ra8844 - #176874)
- Import binary sensor state constants from const in tests (@epenet - #186583)
Tank Utility
- Re-enable Tank Utility integration with tank-utility 1.5.1 (@krismolendyke - #185827)
- Fix flaky Tank Utility token refresh test (@balloob - #186017)
Taps Aff
Tasmota
- Adapt tasmota to in-place entity ID change (@emontnemery - #184891)
- Adjust tasmota to not override Entity.add_to_platform_xxx methods (@emontnemery - #183778)
- Raise instead of returning False when unloading Tasmota (@gjohansson-ST - #186241)
- Add exception translations to Tasmota (@joostlek - #189051)
- Add diagnostics to Tasmota (@joostlek - #189127)
- Tasmota total sensor mappings (@jziolkowski - #190133)
Tautulli
Tedee
- Allow a grace period for Tedee bridge auth errors before reauth (@zweckj - #190338)
- Unregister Tedee webhooks on config entry unload (@zweckj - #190328)
Telegram
Telegram bot
- Translate invalid API token error in telegram_bot (@frenck - #184442)
- Translate telegram_bot errors instead of passing raw text (@frenck - #184571)
- Use the common write error helper in Telegram bot downloads (@erwindouna - #185678)
- Raise instead of returning False when setting up Telegram bot (@gjohansson-ST - #186242)
- Define public names of the telegram_bot integration (@epenet - #187773)
- Use the client read timeout for Telegram bot actions without a timeout (@weitheng - #188142)
Teleinfo
Telldus Live
- Raise ConfigEntryError when session is not authorized in tellduslive (@gjohansson-ST - #185135)
- Migrate tellduslive to use runtime_data (@gjohansson-ST - #185835)
- Remove YAML import from tellduslive (@gjohansson-ST - #185838)
Teltonika
- bump teltonika to 0.4.1 (@karlbeecken - #187041)
- Preserve configured Teltonika URL during DHCP rediscovery (@Sam-mon7 - #185856)
Template
- Move template config processing into the helpers module (@epenet - #184303)
- Import template names from the modules that define them (@epenet - #184316)
- Move template service registration to services module (@epenet - #184319)
- Remove double spaces in strings (@frenck - #184494)
- Update template cover to use assumed attribute framework (@Petro31 - #182507)
- Update template light to use assumed attribute framework (@Petro31 - #182491)
- Remove stray spaces after newlines in strings (@frenck - #184504)
- Adapt template to in-place entity ID change (@emontnemery - #184892)
- Simplify entity ID change entity hooks (@emontnemery - #184943)
- Add speed support to template cover (@Bascht74 - #185617)
- Use unit of measurement selector in template number config flow (@jbouwh - #185396)
- Use unit of measurement selector in template config flow (@jbouwh - #185360)
- Define public names of the template integration (@epenet - #187187)
- Add trigger_variables to trigger based template entities (@Petro31 - #187067)
- Import names from their source modules in template (@epenet - #187467)
- Fix template helpers (UI) can never enable assumed_state (@wilfreddijksman - #181676)
- Handle validator errors in trigger-based template entities (@jslponcev-ui - #187978)
- Add water heater support to Template integration (@lboue - #186544)
- Fix zone calculation in template device tracker previews (@jslponcev-ui - #188036)
- Fix invalid log for template event types (@elupus - #184664)
- Name template tracker preview test cases explicitly (@jslponcev-ui - #188224)
- Do not fail cover actions on an unsupported speed (@Bascht74 - #188271)
- Fix composite devices leaking into child-only async_get lookups (@arturpragacz - #188428)
- Add an action enum to template (@epenet - #188748)
- Add media player template entity (@Petro31 - #186934)
Tesla Fleet
- Add navigation actions to Tesla Fleet (@qvr - #183114)
- Rename Tesla climate keeper “Dog mode” to “Pet mode” (@Bre77 - #186364)
- Add navigate_to_waypoints action to Tesla Fleet (@sabaatworld - #184627)
- Bump tesla-fleet-api to 1.18.0 (@Bre77 - #186741)
- Show a scheduled Tesla Fleet software update as available (@Bre77 - #186733)
- Send the Teslemetry tonneau over Bluetooth when in range (@Bre77 - #186731)
- Enable strict typing for Tesla Fleet (@Bre77 - #188660)
- Log Tesla Fleet rate limits once until recovery (@Bre77 - #188319)
- Bump tesla-fleet-api to 1.19.0 (@Bre77 - #188985)
Tesla Powerwall
- Raise ConfigEntryError when the API has changed in powerwall (@gjohansson-ST - #185114)
Tesla Wall Connector
Teslemetry
- Make entry strings consistent in Teslemetry (@Bre77 - #183816)
- Restore the Teslemetry streaming media channel (@Bre77 - #183780)
- Only create Teslemetry battery and solar history sensors for sites that have them (@Bre77 - #183466)
- Add 502 gateway-unreachable handling to Teslemetry Powerwall pairing (@Bre77 - #183792)
- Show the Teslemetry server’s reason when a command fails (@Bre77 - #183787)
- Keep Teslemetry energy history unavailable while the stream is down (@Bre77 - #184224)
- Migrate teslemetry climate to native temperature properties (@emontnemery - #184822)
- Request live status updates in teslemetry tests (@erwindouna - #185199)
- Always return True after migration in teslemetry (@gjohansson-ST - #185431)
- Fix Teslemetry charge energy added and charger power while DC charging (@Bre77 - #184626)
- Improve state restore in teslemetry (@emontnemery - #185983)
- Bump aiopowerwall to 0.6.0 (@Bre77 - #185594)
- Rename Tesla climate keeper “Dog mode” to “Pet mode” (@Bre77 - #186364)
- Add keep accessory power buttons to Teslemetry (@Bre77 - #186348)
- Use DeviceInfo attributes in teslemetry (@epenet - #186608)
- Add Teslemetry Bluetooth binary sensors (@Bre77 - #182585)
- Read Powerwall live and config values locally for paired Teslemetry sites (@Bre77 - #184808)
- Bump teslemetry-stream to 1.3.0 (@Bre77 - #186721)
- Wire Bluetooth passive broadcasts into the Teslemetry stream (@Bre77 - #184816)
- Show which entities keep a Teslemetry vehicle polling in diagnostics (@Bre77 - #186586)
- Bump tesla-fleet-api to 1.18.0 (@Bre77 - #186741)
- Log Bluetooth reachability diagnostics when Teslemetry routes to cloud (@Bre77 - #186591)
- Add Bluetooth to Teslemetry diagnostics (@Bre77 - #186732)
- Accept is_charging when starting a charge on Teslemetry (@Bre77 - #187288)
- Send the Teslemetry tonneau over Bluetooth when in range (@Bre77 - #186731)
- Add local Powerwall grid and site binary sensors to Teslemetry (@Bre77 - #186730)
- Keep restored Teslemetry media player playback state after restart (@Bre77 - #186735)
- Use issues refresh helper in teslemetry (@emontnemery - #188033)
- Bump aiopowerwall to 0.7.0 (@Bre77 - #188293)
- Add Labs charge-on-solar switch and lower limit to Teslemetry (@Bre77 - #186075)
- Add Teslemetry Wall Connector daily energy sensor (@Bre77 - #187295)
- Name the Teslemetry windows cover Vent windows (@Bre77 - #188315)
- Describe the Teslemetry driver seat belt sensor as a safety warning (@Bre77 - #188317)
- Keep Teslemetry media player off while the display is off (@Bre77 - #188318)
- Add local Powerwall battery dispatch actions to Teslemetry (@Bre77 - #188303)
- Bump aiopowerwall to 0.8.0 (@Bre77 - #188709)
- Add reconfigure flow to Teslemetry Bluetooth vehicle subentry (@Bre77 - #183834)
- Add local Powerwall solar string sensors to Teslemetry (@Bre77 - #188658)
- Fix stale config_subentry_id snapshots in econet, teslemetry and watergate (@joostlek - #188971)
- Bump tesla-fleet-api to 1.19.0 (@Bre77 - #188985)
- Bump aiopowerwall to 0.9.0 (@Bre77 - #188986)
- Bump aiopowerwall to 0.10.0 (@Bre77 - #189424)
- Add temperature device class to Teslemetry module temperature sensors (@Bre77 - #189012)
- Clear Teslemetry gateway repair on first successful local poll (@Bre77 - #189947)
Tessie
- Rename Tesla climate keeper “Dog mode” to “Pet mode” (@Bre77 - #186364)
- Bump tesla-fleet-api to 1.18.0 (@Bre77 - #186741)
- Send the Teslemetry tonneau over Bluetooth when in range (@Bre77 - #186731)
- Bump tesla-fleet-api to 1.19.0 (@Bre77 - #188985)
Text
- Raise translated ServiceValidationError for invalid text values (@joostlek - #186311)
- Add the re-exported names to the text public names (@epenet - #186656)
- Move text entity classes to entity module (@epenet - #186821)
Text-to-speech (TTS)
- Add exception translations to tts (@frenck - #184490)
- Raise translated errors for missing TTS provider and audio (@joostlek - #186332)
- Stream TTS audio to ffmpeg as raw PCM samples (@synesthesiam - #179020)
- Add the re-exported names to the tts public names (@epenet - #186661)
- Avoid unneeded ffmpeg runs in TTS (@balloob - #186713)
- Use the service enums in the media_player, notify and tts platforms’ own code (@epenet - #188050)
- Use platform action enums when calling platform actions (@epenet - #188071)
- Add raw PCM audio streams to TTS result streams (@synesthesiam - #188223)
The Things Network
- Add The Things Network connection integration (@balloobbot - #186760)
- Return None from config entry method mocks in integration tests (batch 20: enocean–thethingsnetwork_lorawan) (@gjohansson-ST - #187993)
- Link ChirpStack and The Things Network connections to their admin console (@balloob - #188296)
Theben Conexa Smart Meter Gateway
- Add reauthentication flow to Theben Conexa Smart Meter Gateway (@joostlek - #186301)
- Latest pypi package ignores archived / stale usage points (@mdluhosch - #186416)
Thread
- Bump python-otbr-api to 3.1.0 (@LorbusChris - #184582)
- Add support for Thread Integration to Display Icons for Heffeix (@wardmatter - #186518)
- Add exception translations to Thread (@joostlek - #189052)
Threema
- Add reauthentication flow to Threema (@LukasQ - #182876)
- Bump Threema quality scale to silver (@LukasQ - #184130)
- Bump aiothreema to v0.2.0 with improved logging (@LukasQ - #185965)
Threshold
Tibber
- Remove redundant translation names from Tibber (@frenck - #185345)
- Use typed config entry in Tibber coordinator (@frenck - #185412)
- Use typed config entry in Velux coordinator (@frenck - #185403)
- Fix Tibber Data API range.remaining sensor display unit (@NikolajChristensen - #182010)
- Bump pyTibber to 0.39.1 (@Danielhiversen - #187542)
- Add reconfigure flow to Tibber (@joostlek - #189044)
Time
- Add the re-exported names to the time public names (@epenet - #186658)
- Move time entity classes to entity module (@epenet - #186785)
Timer
- Move timer service registration to services module (@epenet - #184287)
- Add exception translations to timer (@frenck - #184410)
- Move timer entity to entity module (@epenet - #186362)
- Define public names of the timer integration (@epenet - #187251)
- Add action enums to timer, counter and group (@epenet - #188086)
- Remove the unused attribute constants from timer (@epenet - #188704)
Times of the Day
To-do list
Todoist
- Use typed config entry in Todoist coordinator (@frenck - #185414)
- Use a verb for the Todoist new_task action name (@claytonjn - #188441)
- Ignore a None section in the Todoist new_task action (@claytonjn - #188439)
- Refresh Todoist tasks after the new_task action (@claytonjn - #188443)
ToGrill
TOLO Sauna
- Refresh TOLO state right after sending a command (@MatthiasLohr - #187884)
Tomorrow.io
- Split user flow init and data submission in tomorrowio config flow tests (@tr4nt0r - #184176)
- Migrate Tomorrow.io to entry per API key with subentries (@raman325 - #177911)
Tonewinner
- Use MockConfigEntry flow helpers in Tonewinner tests (@joostlek - #186458)
- Bump tonewinner-rs232 to 1.3.0 (@emma-sg - #187100)
- Use library probe to wake the receiver and read its model (@emma-sg - #187085)
Toon
- Raise ConfigEntryError when migrating version 1 entries in toon (@gjohansson-ST - #185432)
Total Connect
TP-Link Omada
- Remove redundant firmware translation key from TP-Link Omada (@frenck - #185347)
- Improve tplink_omada device tracker tests (@emontnemery - #189218)
TP-Link Smart Home
- Fix spelling and grammar in strings (@frenck - #184507)
- Fix flaky tplink stored credentials test (@epenet - #184653)
- Move tplink service registration to services module (@epenet - #184635)
- tplink: Fix new host ignored in reconfigure flow (@riverajo - #182184)
- Import names from their source modules in tplink (@epenet - #187697)
- Bump python-kasa to 0.12.0 (@rytilahti - #188594)
- Use the scene action enums in the homeassistant scene platform (@epenet - #189222)
Traccar Server
- Simplify chained comparisons flagged by pylint 4.1 (@Markus98 - #184666)
- Remove redundant motion translation name from Traccar Server (@frenck - #185346)
- Use MockConfigEntry flow helpers in Traccar Server tests (@joostlek - #186459)
- Stop traccar_server subscription loop when its task is cancelled (@costajohnt - #184072)
Trace
Tractive
- Bump aiotractive to 1.1.0 (@bieniu - #184450)
- Bump aiotractive to 1.1.1 (@bieniu - #184654)
- Bump aiotractive to 1.1.2 (@bieniu - #185240)
- Use DataUpdateCoordinator in the Tractive integration (@bieniu - #184681)
- Add the
data descriptionfor the Tractive config flow (@bieniu - #186028) - Update entity icons in the Tractive integration (@bieniu - #186051)
- Bump aiotractive to 1.2.0 (@bieniu - #186045)
- Add missing DeviceClass.DURATION for Tractive sensors (@bieniu - #186047)
- Fix the Tractive reauth flow (@bieniu - #186086)
- Set
PARALLEL_UPDATESin the Tractive integration (@bieniu - #186125) - Pass a websession and a
client_idto the Tractive client in the config flow (@bieniu - #186120) - Add logging after data recovery for Tractive (@bieniu - #186128)
- Add exception translations in the Tractive integration (@bieniu - #186137)
- Improve diagnostic data masking for the Tractive (@bieniu - #186417)
- Add a reconfigure flow to the Tractive integration (@bieniu - #186598)
- Add IQS to the Tractive integration (@bieniu - #186157)
- Disable less popular Tractive entities by default (@bieniu - #186770)
- Update IQS for the Tractive (@bieniu - #186705)
- Bump aiotractive to 1.3.0 (@bieniu - #186873)
- Add a pet weight sensor for Tractive integration (@bieniu - #186993)
- Bump aiotractive to 1.3.1 (@bieniu - #187850)
- Bump aiotractive to 2.0.0 (@bieniu - #188484)
- Improve entity states based on data availability in Tractive (@bieniu - #188486)
Trafikverket Camera
- Raise ConfigEntryError when migration fails in trafikverket_camera (@gjohansson-ST - #185434)
- Prevent duplicate cameras when reconfiguring trafikverket_camera (@gjohansson-ST - #186850)
- Add data descriptions and duplicate entry test to trafikverket_camera config flow (@gjohansson-ST - #186832)
- Set trafikverket_camera quality scale to bronze (@gjohansson-ST - #186833)
Trafikverket Train
- Raise ConfigEntryError when migration fails in trafikverket_train (@gjohansson-ST - #185436)
Trafikverket Weather Station
- Remove redundant wind direction translation name from Trafikverket Weather Station (@frenck - #185348)
- Prevent duplicate trafikverket_weatherstation entries (@gjohansson-ST - #187363)
- Add data descriptions to trafikverket_weatherstation config flow (@gjohansson-ST - #187362)
- Handle unknown errors in Trafikverket Weatherstation coordinator (@gjohansson-ST - #187394)
- Set trafikverket_weatherstation quality scale to bronze (@gjohansson-ST - #187364)
Trend
TRMNL
Tuya
- Add Tuya towel rack (mjj) fixture (@rngarcia - #184134)
- Add climate platform to Tuya mjj (towel rack) (@rngarcia - #184136)
- Add switch platform to Tuya mjj (towel rack) (@rngarcia - #184137)
- Add select platform to Tuya mjj (towel rack) (@rngarcia - #184138)
- Add Tuya select platform support for category hwsb (@alainmic - #183618)
- Add Tuya number platform support for category hwsb (@alainmic - #183758)
- Fix Tuya climate snapshot (@erwindouna - #184758)
- Revert “Keep Tuya channel entities on the main device (#183734)” (@epenet - #184915)
- Explain why Tuya keeps translation keys that match the device class (@frenck - #185355)
- Add Tuya residential lock pro (jtmspro) fixture (@thix1606 - #186345)
- Add Tuya zqq3cipq RCU fixture and discovery snapshots (@huangjt1 - #187753)
- Add missing numbered switches to Tuya kg devices (@huangjt1 - #187725)
- Add Tuya sensor platform support for category hwsb (@alainmic - #183759)
- Add water valve support for Tuya ggq irrigation devices (@tritter - #181308)
- Add Tuya wine cooler (jg) fixture (@thix1606 - #186338)
- Describe the device in entity registry entry snapshots (@epenet - #188133)
- Bump tuya-device-handlers to 0.0.32 (@rngarcia - #188226)
- Use child devices for Tuya multi-channel kg switches (@epenet - #188169)
- Use child devices for Tuya multi-channel cjkg switches (@epenet - #188237)
- Give Tuya categories their own entity descriptions (@epenet - #188240)
- Migrate Tuya ggq indexed switches to valves (@epenet - #188168)
- Add countdown end sensor to Tuya mjj (towel rack) (@rngarcia - #184218)
- Use child devices for Tuya multi-channel pc switches (@epenet - #188255)
- Use child devices for Tuya multi-channel cz switches (@epenet - #188258)
- Describe the parent device in child device registry entry snapshots (@epenet - #188724)
- Report switch-only HVAC mode while a Tuya climate runs a preset (@brealorg - #188792)
- Use child devices for Tuya multi-channel cz energy meters (@epenet - #188674)
- Use child devices for Tuya multi-channel wkcz switches (@epenet - #188675)
- Bump tuya-device-handlers to 0.0.33 (@LCouvry - #189556)
- Bump tuya-device-handlers to 0.0.34 (@epenet - #190327)
Twilio
Twilio Call
- Require E.164 phone numbers in twilio_call and clicksend_tts (@frenck - #183993)
- Add a Twilio client helper and define public names of the twilio integration (@epenet - #187796)
Twilio SMS
Twinkly
- Raise ConfigEntryNotReady when migration cannot connect in twinkly (@gjohansson-ST - #185437)
- Fix Twinkly not switching to the current movie from another mode (@chrisns - #186470)
- Fix Twinkly solid color sticking on the last effect (@alexbbt - #186976)
Twitch
- Add exception translations to Twitch (@joostlek - #186320)
- Add diagnostics to Twitch (@joostlek - #186511)
U
Ubiquiti airOS
- Use MockConfigEntry flow helpers in airOS tests (@joostlek - #186434)
- Bump airOS to include IsoStation 5AC (@CoMPaTech - #187021)
Ukraine Alarm
- Raise config entry errors when migration fails in ukraine_alarm (@gjohansson-ST - #185438)
UniFi Access
UniFi AP
- Adapt unifi_direct device tracker to base class changes (@emontnemery - #189210)
UniFi Network
- Bump aiounifi to v97 (@tomwilkie - #183854)
- Advance time instead of refreshing coordinators in unifi tests (@erwindouna - #185192)
- Match UniFi discovery against the devices a site manages (@RaHehl - #185698)
- Fix double reload of UniFi entry after reconfigure and reauth (@balloob - #186049)
- Raise instead of returning False when unloading UniFi Network (@gjohansson-ST - #186259)
- Follow UniFi site ID change in Network 11 (@bas-slats - #187420)
- Handle UniFi MFA accounts, login rate limits and site request errors (@RaHehl - #187782)
- Add a central connection manager to UniFi (@RaHehl - #187901)
- Fix SSL certificate verification in UniFi Network (@econstantin - #187981)
- Preserve UniFi sensors through telemetry gaps (@jimstrang - #185696)
- Keep UniFi network device trackers enabled by default (@emontnemery - #189221)
UniFi Protect
- Keep colons in UniFi Protect custom doorbell messages (@RaHehl - #184188)
- Call the UniFi Protect PTZ commands on the public camera (@RaHehl - #184264)
- Remove the deprecated UniFi Protect HDR switch (@RaHehl - #184425)
- Read and write the UniFi Protect doorbell text on the public camera (@RaHehl - #184355)
- Add UniFi Protect signal quality sensors (@RaHehl - #184451)
- Read and write the UniFi Protect chime ring volume on the public chime (@RaHehl - #184455)
- Read the UniFi Protect sensor signal strength from the public API (@RaHehl - #184447)
- Stop reading unused private fields in the UniFi Protect test helpers (@RaHehl - #184527)
- Use entity update instead of coordinator refresh in unifiprotect tests (@RaHehl - #185088)
- Remove redundant doorbell translation name from UniFi Protect (@frenck - #185350)
- Deprecate the UniFi Protect floodlight setting mirrors (@RaHehl - #184506)
- Remove the deprecated UniFi Protect sense setting mirrors (@RaHehl - #184473)
- Read the UniFi Protect doorbell messages from the public NVR (@RaHehl - #184493)
- Add UniFi Alarm Hub support to UniFi Protect (@SteveEdson - #172996)
- Fix UniFi Protect alarm hubs added at runtime and without a name (@RaHehl - #185774)
- Bump uiprotect to 23.1.0 (@RaHehl - #185787)
- Bump uiprotect to 23.1.1 (@RaHehl - #185805)
- Bump uiprotect to 23.1.2 (@RaHehl - #185863)
- Move UniFi Protect key fobs, sirens, alarm hubs and relays onto the shared entity base (@RaHehl - #185782)
- Mark the UniFi Protect mic volume unavailable while the mic is disabled (@RaHehl - #186352)
- Include the public cache in UniFi Protect hybrid diagnostics (@RaHehl - #186411)
- Add trigger_alarm_webhook action to UniFi Protect (@jzila - #185743)
- Bump uiprotect to 23.2.0 (@RaHehl - #187112)
- Keep UniFi Protect fobs, relays and sirens from removal in hybrid mode (@RaHehl - #186404)
- Bump uiprotect to 23.2.2 (@RaHehl - #187195)
- Bump uiprotect to 23.3.0 (@RaHehl - #187224)
- Bump uiprotect to 23.5.0 (@RaHehl - #187311)
- Bump uiprotect to 23.9.0 (@RaHehl - #187370)
- Raise the UniFi Protect migration repairs once startup is done (@RaHehl - #186171)
- Deprecate the UniFi Protect device setup and health entities on the private API (@RaHehl - #185761)
- Use the uiprotect light mode preset in UniFi Protect (@RaHehl - #187941)
- Use issues refresh helper in unifiprotect (@emontnemery - #188034)
- Pair UniFi Protect chime doorbells through the public chime (@RaHehl - #187930)
- Look up UniFi Protect alarm hub zones by id (@RaHehl - #187944)
- Use the library diagnostics dump for the UniFi Protect public cache (@RaHehl - #188187)
- Use the uiprotect public resync in UniFi Protect reconnects (@RaHehl - #188186)
- Stop reading private-only fields in the UniFi Protect tests (@RaHehl - #188233)
- Deprecate the UniFi Protect doorbell sensor and camera last event sensors (@RaHehl - #188242)
- Use the uiprotect detection slug for UniFi Protect event types (@RaHehl - #188278)
- Deprecate the UniFi Protect camera setting mirrors (@RaHehl - #186349)
- Enumerate the UniFi Protect chime ring volumes from the public chime (@RaHehl - #187249)
- Bump uiprotect to 24.0.0 (@RaHehl - #188353)
- Stop reading the private camera settings and chime ring settings in the UniFi Protect tests (@RaHehl - #188398)
- Give UniFi Protect speakers adopted at runtime their speaker unique ID (@RaHehl - #188403)
- Describe the UniFi Protect connection modes by API instead of an entity list (@RaHehl - #188408)
- Bump uiprotect to 25.0.0 (@RaHehl - #188751)
- Remove dead code from UniFi Protect (@RaHehl - #188765)
- Play UniFi Protect speaker audio through the public camera (@RaHehl - #188404)
Universal Devices ISY/IoX
- Fix entity removal leaks in isy994 (@emontnemery - #183862)
- Move isy994 lock service registration to services module (@epenet - #184401)
- Remove double spaces in strings (@frenck - #184494)
- Raise ConfigEntryError on invalid host in isy994 (@gjohansson-ST - #185075)
- Split event subscriptions from async_added_to_hass in isy994 (@gjohansson-ST - #185867)
- Bump pyisy to 3.8.0 (@shbatm - #186552)
- Enable automatic conversion for volume_flow_rate (@sarahseidman - #186188)
Universal media player
Universal Powerline Bus (UPB)
- Fix entity removal leaks in upb (@emontnemery - #183866)
- Move upb service registration to services module (@epenet - #184617)
UpCloud
- Split user flow init and data submission in upcloud config flow tests (@tr4nt0r - #184105)
- Raise ConfigEntryError on authentication failure in upcloud (@gjohansson-ST - #185136)
Update
- Add restart_required to update entities (@frenck - #184045)
- Add overridable update availability check (@tomer-w - #185158)
- Add the re-exported attribute names to the update public names (@epenet - #186652)
- Move update entity classes to entity module (@epenet - #186816)
UPnP/IGD
- Bump getmac to 0.9.6 (@chemelli74 - #184162)
- Add exception translations to UPnP/IGD (@joostlek - #189053)
- Remove redundant entity constructor in UPnP/IGD (@joostlek - #189273)
Uptime
Uptime Kuma
- Drop support for Uptime Kuma < 2.0.0 (@tr4nt0r - #187418)
- Deactivate average and ratio sensors by default in Uptime Kuma (@tr4nt0r - #187707)
UptimeRobot
- Use TextSelectors in Uptimerobot (@chemelli74 - #184019)
Usage Prediction
- Fix recorder and usage_prediction type annotations (@gjohansson-ST - #188670)
USB Discovery
- Add websocket command to list serial port integrations (@MindFreeze - #184720)
- Bump serialx to 1.14.0 (@puddly - #186575)
- List serial integrations by their use of the serial port selector (@MindFreeze - #186699)
- Add support for ESPHome USB serial proxies (@puddly - #183645)
- Bump serialx to 1.15.0 (@puddly - #188084)
- Add ESPHome USB serial proxy roaming support to ZHA (@puddly - #187613)
- Add @puddly to the USB integration codeowners (@puddly - #188895)
- Bump serialx to 1.15.1 (@puddly - #188894)
Utility Meter
- Move utility_meter calibrate registration to services module (@epenet - #184306)
- Use component DOMAIN constants for entity_domain in action registrations (@epenet - #184405)
- Raise ConfigEntryError for unknown source entity in utility_meter (@gjohansson-ST - #185137)
- Fix utility meter weekly cycle with an offset of 7 days or more (@raman325 - #187640)
- Fix integration sensor restoring as unknown when its state is 0 (@raman325 - #187638)
- Fix utility meter quarter-hourly resets with large offsets (@raman325 - #187643)
- Use enums for utility_meter and schedule action names (@epenet - #188089)
- Define public names of the utility_meter integration (@epenet - #188760)
- Add a state attribute enum to utility_meter and remove unused constants (@epenet - #189176)
V
V2C
Vacuum
- Define public names of the vacuum integration (@epenet - #186639)
- Move vacuum entity classes to entity module (@epenet - #186826)
- Fix vacuum reproduce state calling the removed turn_on and turn_off (@epenet - #188131)
- Remove the descriptions of unregistered vacuum actions (@epenet - #188149)
- Remove the unused vacuum start_pause constant and test helper (@epenet - #189237)
Vallox
- Add quality scale file for Vallox (@andre-richter - #188794)
- Refactor: Use shared fixtures in Vallox config flow tests (@andre-richter - #188932)
Valve
Velbus
- Show the cache path instead of the error text in Velbus clear cache (@erwindouna - #185675)
- Use the serial port selector in the Velbus config flow (@MindFreeze - #186692)
- Add Velbus button event entities (@fredericdepuydt - #175201)
- Fix velbus test import after tests.common removal (@erwindouna - #187374)
- Bump velbus-aio to 2026.9.0 (@WilliamCoenen - #187350)
- Fix gas and water counter channels on Velbus input modules (@WilliamCoenen - #181545)
Velux
- Use typed config entry in Velux coordinator (@frenck - #185403)
- Define init before other methods in Velux (@joostlek - #187560)
- Pass a DeviceInfo to async_get_or_create_device in velux (@epenet - #187576)
- Report estimated Velux cover position while moving (@Manu512 - #186011)
- Deprecate silent and default speeds in Velux covers (@gjohansson-ST - #189438)
Vera
- Vera integration - wire hvac_action (@maximvelichko - #184495)
- Add unique ID to Vera scenes (@millerjw3 - #186063)
- Don’t start the Vera user flow with data in tests (@joostlek - #186481)
- Add Z-Wave connectivity metadata to integrations (@balloob - #189916)
Verisure
- Show a hint when a Verisure password is longer than 30 characters (@Jensen95 - #184250)
- Move verisure service registration to services module (@epenet - #184630)
- Raise instead of returning False when unloading Verisure (@gjohansson-ST - #186243)
Version
- Raise ConfigEntryError for invalid board in version (@gjohansson-ST - #185138)
VeSync
Victron GX
- Add Victron GX firmware updates (@tomer-w - #181566)
- Bump victron-mqtt to 2026.10.1 (@tomer-w - #188069)
- Capitalize ID in victron_gx strings (@thecode - #188135)
- Bump victron-mqtt to 2026.10.3 (@tomer-w - #188927)
Viessmann ViCare
- Move vicare service registration to services module (@epenet - #184485)
- Log each ViCare API error once instead of on every read (@lackas - #183562)
- Set standby when turning a ViCare heating circuit off (@lackas - #185473)
- Add DHW circulation schedule services to ViCare water heater (@jastBytes - #185711)
- Define init before other methods in ViCare (@joostlek - #187561)
- Obtain ViCare token and remove legacy token file in a single executor job (@joostlek - #187952)
- Set up ViCare devices the API reports offline but still serves (@lackas - #187130)
- Remove the state class from the ViCare last seven days sensors (@lackas - #188087)
- ViCare: add missing pellet boiler sensors (@halfdan - #187762)
Vistapool
- Raise the Vistapool quality scale to gold (@fdebrus - #180827)
- Share the Vistapool cell unit and derive conditional keys once (@fdebrus - #183373)
- Bump aioaquarite to 0.13.0 and drop the Vistapool optimistic layer (@fdebrus - #184132)
- Remove thread bridging from the Vistapool user-pools callback (@fdebrus - #185601)
- Raise the Vistapool quality scale to platinum (@fdebrus - #184211)
- Bump aioaquarite to 0.13.1 (@fdebrus - #186291)
- Drop dead string comparisons from Vistapool on/off states (@fdebrus - #186290)
- Add a sync time button to Vistapool (@fdebrus - #186285)
Vitesy
- Bump aiovitesy to 1.4.0 (@chemelli74 - #185836)
- Add fan speed, power level and last update sensors to Vitesy (@chemelli74 - #185815)
- Add reauthentication flow to Vitesy (@joostlek - #186302)
- Bump aiovitesy to 1.4.4 (@chemelli74 - #187381)
VIZIO SmartCast
- Assert the unique ID in vizio config flow tests (@erwindouna - #185309)
VLC media player via Telnet
Vodafone Station
- Use TextSelectors in Vodafone Station (@chemelli74 - #184018)
- Adapt vodafone_station device tracker to base class changes (@emontnemery - #189212)
- Bump aiovodafone to 3.3.11 (@chemelli74 - #188591)
Vogel’s MotionMount
- Raise HomeAssistantError on MotionMount connection loss in actions (@epenet - #184058)
- Remove redundant motionmount is moving translation key from Vogel’s MotionMount (@frenck - #185331)
- Use MockConfigEntry flow helpers in MotionMount tests (@joostlek - #186448)
- Change code owner - MotionMount integration (@laiho-vogels - #186671)
Voice over IP
- Remove myself as codeowner (@synesthesiam - #186680)
- Fix VoIP satellite ignoring calls after a mid-pipeline hang-up (@jaminh - #187972)
- Voip increase hangup timeout (@jaminh - #188645)
- Bump VoIP utils to 0.5.1 (@jaminh - #189747)
Volkszaehler
- add reconfigure to volkszaehler config flow (@StefanSchoof - #182879)
Volvo
- Bump volvocarsapi to v0.5.0 (@thomasddn - #190380)
W
Wake on LAN
- Move wake_on_lan service registration to services module (@epenet - #184642)
- Adapt wake_on_lan to in-place entity ID change (@emontnemery - #184893)
Wake-word detection
Wallbox
- Avoid naive datetime in Wallbox token validity check (@jslponcev-ui - #178492)
Washington State Department of Transportation (WSDOT)
Water heater
- Add temperature_unit state attribute to water_heater (@emontnemery - #183977)
- Mark deprecated water_heater properties as final (@emontnemery - #184841)
- Fix typo in water_heater.const (@emontnemery - #184842)
- Use a shared helper for renamed climate and water_heater properties (@epenet - #184835)
- Raise for core integrations using deprecated temperature members (@epenet - #185984)
- Define public names of the water_heater integration (@epenet - #186641)
- Move water_heater entity classes to entity module (@epenet - #186815)
WaterFurnace
- Remove YAML import in WaterFurnace (@tr4nt0r - #184389)
- Raise ConfigEntryError when migration fails in waterfurnace (@gjohansson-ST - #185439)
- Bump waterfurnace to 1.10.0 (@sdague - #187257)
- Enable automatic conversion for volume_flow_rate (@sarahseidman - #186188)
- Waterfurnace new sensors (@sdague - #187415)
- Fix stale config_subentry_id in snapshots (@chemelli74 - #188956)
Watergate
- Raise HomeAssistantError when watergate valve actions fail (@adam-the-hero - #184671)
- Translate watergate switch and number action exceptions (@adam-the-hero - #185367)
- Import aiohttp types directly in watergate (@epenet - #187199)
- Use device state v2 in Watergate and add directional water meter sensors (@adam-the-hero - #186035)
- Import names from their source modules in integrations w-z (@epenet - #187791)
- Add diagnostics to Watergate (@adam-the-hero - #188023)
- Fix Watergate tests leaking state between tests (@thecode - #188620)
- Add Watergate binary sensors (@adam-the-hero - #188665)
- Fix stale config_subentry_id snapshots in econet, teslemetry and watergate (@joostlek - #188971)
- Clear Watergate Webhook URL on unload and handle online event (@adam-the-hero - #189238)
Watts Vision +
- Migrate Watts to the new Vision OAuth2 scopes (@theobld-ww - #185223)
WattTime
- Split user flow init and data submission in watttime config flow tests (@tr4nt0r - #184173)
- Raise ConfigEntryError on authentication error in watttime (@gjohansson-ST - #185139)
WattWächter
- Add generic sensors for unmapped OBIS codes to WattWächter Plus (@smartcircuits - #181880)
- Mark action-exceptions as done for gold integrations (@epenet - #183998)
- Bump WattWächter Plus to platinum quality scale (@smartcircuits - #183953)
- Bump aio-wattwaechter to 1.2.0 (@smartcircuits - #184498)
- Identify WattWächter gas/water devices (@smartcircuits - #188143)
- Bump aio-wattwaechter to 1.3.0 (@smartcircuits - #188358)
- Add gas and water sensors to WattWächter (@smartcircuits - #188361)
- Update the WattWächter gas and water snapshots to the subentry format (@smartcircuits - #188915)
- Add gas power sensor to WattWächter (@smartcircuits - #188362)
- Add per-phase power sensors to WattWächter (@smartcircuits - #188968)
Waze Travel Time
Weather
- Add exception translations to weather (@frenck - #184416)
- Define public names of the weather integration (@epenet - #186643)
- Move weather entity classes to entity module (@epenet - #186878)
- Remove leftovers of the legacy weather get_forecast action (@epenet - #189236)
WeatherFlow
- Remove redundant wind direction translation name from WeatherFlow (@frenck - #185352)
- Bump pyweatherflowudp to 1.7.0 (@ehn - #185579)
- Show no devices found instead of an unknown error in WeatherFlow discovery (@pecheriere - #186005)
- Only create WeatherFlow event entities for events a device sends (@ehn - #183185)
WeatherflowCloud
- Remove redundant translation names from WeatherflowCloud (@frenck - #185353)
- Use DEGREE constant in WeatherFlow Cloud sensor (@joostlek - #187801)
WebDAV
- Add reauthentication flow to WebDAV (@joostlek - #186391)
- Retry WebDAV setup on connection errors while ensuring backup path (@jpbede - #188458)
- Improve backup tests in webdav (@emontnemery - #188479)
Webhook
- Fix local_only webhooks discarding requests over the Supervisor Unix socket (@kleinc80 - #186034)
- Define public names of the webhook integration (@epenet - #187188)
- Allow full templates in the webhook trigger webhook_id (@frenck - #187023)
Webmin
Weheat
Whirlpool Appliances
- Bump whirlpool-sixth-sense to 2.1.0 (@abmantis - #183927)
- Add MAC discovery support to Whirlpool (@abmantis - #186173)
Whisker
- Raise config entry errors when migration fails in litterrobot (@gjohansson-ST - #185404)
- Bump pylitterbot to 2025.7.0 (@meeowgler - #186916)
- Add laser dirty binary sensor to Litter-Robot 4 (@meeowgler - #187128)
Wiffi
- Raise ConfigEntryError when server start fails in wiffi (@gjohansson-ST - #185141)
WiiM
- Adapt wiim to in-place entity ID change (@emontnemery - #184894)
- Bump wiim to 0.2.1 (@Linkplay2020 - #185592)
- Make wiim group members follow entity ID rename (@emontnemery - #184964)
- Raise instead of returning False when unloading WiiM (@gjohansson-ST - #186244)
- Bump wiim to 0.3.0 (@Linkplay2020 - #186403)
- Bump wiim to 0.3.2 (@Linkplay2020 - #186621)
- Add audio output selection to WiiM integration (@Linkplay2020 - #186626)
- Bump wiim to 0.4.0 (@Linkplay2020 - #189165)
WiLight
- Fix entity removal leaks in wilight (@emontnemery - #183867)
- Move wilight service registration to services module (@epenet - #184634)
Willow
Wireless Sensor Tags
- Fix wirelesstag KeyError when a tag disappears from a reload (@kohai-ut - #172600)
- Wait for background polling in wirelesstag sensor tests (@epenet - #186664)
Withings
- Add exception translations to Withings (@joostlek - #186324)
- Cancel in-flight Withings webhook registration on unload (@balloob - #187421)
- Add reconfigure flow to Withings (@joostlek - #189080)
- Keep Withings device polling active with webhooks (@Herbertmt978 - #189332)
- Retain the latest Withings workout on refresh (@Herbertmt978 - #189339)
WiZ
- Assert the unique ID in wiz config flow tests (@erwindouna - #185311)
- Assert the unique ID in wiz config flow tests (@erwindouna - #185311)
- Raise HomeAssistantError when a WiZ command fails (@GeiserX - #185516)
- Add exception translations to WiZ (@joostlek - #189056)
- Fix flaky WiZ reconfigure loaded entry test (@joostlek - #189298)
WLED
- Ignore WLED light capabilities that firmware doesn’t set (@frenck - #184802)
- Use freezer instead of coordinator refresh in wled tests (@erwindouna - #185188)
- Raise ConfigEntryError for duplicate MAC addresses in wled migration (@gjohansson-ST - #185441)
- Add AudioReactive switch to WLED (@frenck - #184831)
- Add next playlist entry button to WLED (@frenck - #185201)
- Add usermod temperature and humidity sensors to WLED (@frenck - #185455)
WMS WebControl pro
Workday
- Move workday service registration to services module (@epenet - #184458)
- Allow setting owning config entry on repair issues (@emontnemery - #186197)
- Bump holidays to 0.107 (@gjohansson-ST - #187605)
World Air Quality Index (WAQI)
- Add reauthentication flow to WAQI (@joostlek - #186264)
- Add exception translations to WAQI (@joostlek - #186323)
- Add reconfigure flow to WAQI (@joostlek - #186307)
Wyoming Protocol
- Use typed config entry in Wyoming Protocol coordinator (@frenck - #185406)
- Point app links at the apps panel (@timmo001 - #186629)
- Check the conversation owner before Wyoming sends text (@balloob - #188181)
- Add exception translations to Wyoming Protocol (@joostlek - #189057)
X
Xbox
Xiaomi BLE
- feat(xiaomi_ble): update impedance for MiScale S400 (@dckiller51 - #173260)
- Bump xiaomi-ble to 1.21.1 (@dckiller51 - #187449)
- Bump xiaomi-ble to 1.21.2 (@Tsury - #188410)
- Add diagnostics to Xiaomi BLE (@joostlek - #189144)
Xiaomi Gateway (Aqara)
- Fix entity removal leaks in xiaomi_aqara (@emontnemery - #183868)
- Move xiaomi_aqara actions to services module (@epenet - #186087)
Xiaomi Home
- Forward service call context to entities in xiaomi_miio services (@balloob - #179544)
- Move xiaomi_miio remote service registrations to services module (@epenet - #184805)
- Cover xiaomi_miio Air Fresh fan services in tests (@epenet - #184810)
- Raise ConfigEntryError for unsupported model in xiaomi_miio (@gjohansson-ST - #185143)
- Use the dt helpers instead of datetime.now (@erwindouna - #185620)
- Raise instead of returning False when unloading Xiaomi Home (@gjohansson-ST - #186261)
Xiaomi Weather
Xthings Cloud
Y
Yale Access Bluetooth
Yale Home
- Bump yalexs-ble to 4.1.2 (@bdraco - #185576)
- Import names from their source modules in integrations w-z (@epenet - #187791)
Yamaha Network Receivers
Yardian
Yeelight
- Move yeelight flow transition schema to const module (@epenet - #184702)
- Move yeelight service registration to services module (@epenet - #184879)
- Assert the unique ID in yeelight config flow tests (@erwindouna - #185312)
- Add diagnostics to Yeelight (@joostlek - #189138)
- Add reconfigure flow to Yeelight (@joostlek - #189095)
YoLink
YouLess
- Add YouLess month peak timestamp sensor (@sammyke007 - #181214)
YouTube
- Migrate YouTube channels to config subentries (@Hugo1380 - #181438)
- Add exception translations to YouTube (@joostlek - #186319)
Z
Z-Wave
- Move zwave_js reset_meter registration to services module (@epenet - #184404)
- Bump zwave-js-server-python to 0.74.0 (@MartinHjelmare - #184901)
- Assert the unique ID in zwave_js config flow tests (@erwindouna - #185315)
- Remove redundant signal strength translation key from Z-Wave (@frenck - #185354)
- Raise a runtime error for Z-Wave JS service calls while the driver is not ready (@frenck - #185264)
- Add Z-Wave Aeotec ZWA046 endpoint benchmark test (@MartinHjelmare - #185018)
- Update Z-Wave ZWA046 test fixture (@MartinHjelmare - #185925)
- Update Z-Wave Z-TRM3 device test fixture (@MartinHjelmare - #185934)
- Migrate user-given entity names (@arturpragacz - #184340)
- Use TaggedUnion for schema dispatch in ZHA, Z-Wave JS, MQTT, Energy and Assist pipeline (@balloobbot - #186177)
- Raise instead of returning False when unloading Z-Wave (@gjohansson-ST - #186246)
- Define init before other methods in Z-Wave (@joostlek - #187562)
- Import names from their source modules in zwave_js (@epenet - #187698)
- Pass step_id explicitly in zwave_js repairs (@gjohansson-ST - #187867)
- Set config entry id on zwave_js repair issues (@emontnemery - #187823)
- Add Z-Wave child devices (@MartinHjelmare - #185985)
- Add Z-Wave connectivity metadata to integrations (@balloob - #189916)
Z-Wave.Me
- Use UnitOfRatio constant in Z-Wave.Me sensor (@joostlek - #187802)
- Return None from config entry method mocks in integration tests (batch 18: zwave_me–zwave_me) (@gjohansson-ST - #187838)
- Add Z-Wave connectivity metadata to integrations (@balloob - #189916)
Zengge
- Fix zengge legacy platform setup not being a coroutine (@gjohansson-ST - #189934)
Zero-configuration networking (zeroconf)
- Define public names of the zeroconf integration (@epenet - #187189)
- Bump zeroconf to 0.152.0 (@bdraco - #189785)
ZhongHong
Zigbee Home Automation
- Move remaining zha lock actions to services module (@epenet - #182176)
- Use component DOMAIN constants for entity_domain in action registrations (@epenet - #184405)
- Adapt zha to in-place entity ID change (@emontnemery - #184895)
- Assert the unique ID in zha config flow tests (@erwindouna - #185313)
- Clarify which adapter to pick when migrating ZHA (@frenck - #185272)
- Raise instead of returning False when unloading Zigbee Home Automation (@gjohansson-ST - #186245)
- Use TaggedUnion for schema dispatch in ZHA, Z-Wave JS, MQTT, Energy and Assist pipeline (@balloobbot - #186177)
- Restore ZHA log levels only when the last permit session ends (@pdecat - #185604)
- Define public names of the zha integration (@epenet - #187795)
- Read external device data keys as plain strings in integrations (@epenet - #188152)
- provide brightness level number translated as sensor (@GitMensch - #188262)
- Add ESPHome USB serial proxy roaming support to ZHA (@puddly - #187613)
- Create devices for ZHA groups (@TheJulianJES - #188830)
- Ignore ZHA entity registry updates for devices without a proxy (@TheJulianJES - #188982)
- Bump ZHA to 2.4.1, zha-quirks to 2.4.0 (@TheJulianJES - #189000)
- Bump ZHA to 2.4.2 (@puddly - #189385)
- Bump universal-silabs-flasher to 1.3.0 (@puddly - #189929)
- Bump zha-quirks to 2.4.1 (@TheJulianJES - #190397)
Zinvolt
- Add reauthentication flow to Zinvolt (@joostlek - #186265)
- Bump zinvolt to 1.1.0 (@joostlek - #186276)
- Use library method to get Zinvolt user ID (@joostlek - #186279)
- Add exception translations to Zinvolt (@joostlek - #186318)
- Add reconfigure flow to Zinvolt (@joostlek - #186281)
- Add Zinvolt maximum charge power number entity (@nickbock - #186604)
- Bump zinvolt to 1.1.1 (@joostlek - #189334)
Zone
- Add a runtime data class to zone (@epenet - #184432)
- Move zone service registration to services module (@epenet - #184609)
- Define public names of the zone integration (@epenet - #187284)
- Add an action enum to zone and use the enums in its tests (@epenet - #188717)
ZoneMinder
- Import names from their source modules in integrations w-z (@epenet - #187791)
- Fix ZoneMinder monitor state on ZoneMinder 1.38 and later (@SteveGilvarry - #188576)
- Add SteveGilvarry as ZoneMinder codeowner (@nabbi - #188609)
Zonneplan
- Add home battery binary sensors to Zonneplan (@erwindouna - #183905)
- Only create Zonneplan entities for contracted energy types (@erwindouna - #183844)
- Add home battery sensors to Zonneplan (@erwindouna - #183943)
- Bump pyzonneplan to 0.3.0 (@erwindouna - #186107)
- Add all Zonneplan battery states (@erwindouna - #186108)
- Add Zonneplan battery control mode select (@erwindouna - #186110)
- Add Zonneplan charge point binary sensors (@erwindouna - #186111)
Other changes
- Bump version to 2026.11.0dev0 (@frenck - #183795)
- Implement a classlevel ReadOnlyDict instead of a dict per instance for allowed_context_keys in Selector classes (@jbouwh - #183761)
- Mark CONF_TOKEN as secret in credential schemas (@frenck - #183796)
- Mark CONF_API_KEY as secret in config schemas (@frenck - #183809)
- Mark CONF_PASSWORD as secret in config schemas (@frenck - #183811)
- Update infrared-protocols to 10.2.0 (@renovatebot - #183817)
- Mark remaining credential constants as secret in config schemas (@frenck - #183814)
- Mark access token keys as secret (@frenck - #183781)
- Fix flaky track template result group test (@epenet - #183837)
- Update pylint to 4.0.9 (@renovatebot - #183823)
- Allow asyncio-waitpid threads in test cleanup check (@epenet - #183831)
- Improve RestoreEntity handling of entity id change (@emontnemery - #183851)
- Fix entity subscribing to the old device after a device_id change (@emontnemery - #183872)
- Avoid cancelling shared loader futures when a waiter is cancelled (@epenet - #183836)
- Remove support for installing Python dependencies in the config dir (@emontnemery - #168155)
- Use wait_shared_future in requirements (@epenet - #183892)
- Use wait_shared_future in importlib helper (@epenet - #183891)
- Use wait_shared_future in storage helper (@epenet - #183890)
- Use wait_shared_future in singleton helper (@epenet - #183889)
- Use wait_shared_future in entity helper (@epenet - #183888)
- Add quality scale review agentic workflow (@abmantis - #182431)
- Add pylint checker for CONNECTION_CLASS in config flows (@joostlek - #183937)
- Use notice messages for quality scale agentic workflow (@abmantis - #183939)
- Mark the credential keys the line-based sweep could not see (@frenck - #183978)
- Mark the remaining small credential keys as secret (@frenck - #183774)
- Add signed and offset modes to the duration selector (@piitaya - #181884)
- Use probatio NonEmpty and Percentage instead of raw bounds (@frenck - #183970)
- Filter cancelled events out of caldav (@1358 - #180947)
- Mark action-exceptions as done for platinum integrations (@epenet - #183997)
- Mark action-exceptions as todo for bronze integrations (@epenet - #184005)
- Mark action-exceptions as done for silver integrations (@epenet - #183999)
- Mark action-exceptions as done for bronze integrations (@epenet - #184000)
- Use wait_shared_future in setup (@epenet - #183893)
- Deduplicate dependency setup in _async_process_dependencies (@epenet - #184048)
- Set run-name on quality scale workflows (@abmantis - #183941)
- Update mypy to 2.4.0 (@cdce8p - #184025)
- Document legacy unique id formats kept for W7425 and W7427 (@epenet - #183696)
- Prevent IQS agentic workflow from trying to run python (@abmantis - #184070)
- Update pnpm to 12.7.0 (@renovatebot - #184077)
- Filter cancelled events out of local_calendar (@1358 - #180948)
- Split condition helper (@abmantis - #182337)
- Migrate from httpx to httpx2 (@zweckj - #183371)
- Review prepared commit sha in quality scale reviewer workflow (@abmantis - #184501)
- Use select instead of click for the Submit button in strings (@frenck - #184533)
- Update pylint to 4.0.10 (@renovatebot - #184591)
- Update dawidd6/action-download-artifact action to v27 (@renovatebot - #184598)
- Fix benchmark CI job after httpx2 migration (@epenet - #184645)
- Fix pylint plugin tests for astroid Arguments node line numbers (@Markus98 - #184667)
- Update pylint (minor) (@renovatebot - #184597)
- Set receiver device class to several media player integrations (@Spartan-II-117 - #184564)
- Add entity lifecycle methods for entity ID change (@emontnemery - #183946)
- Post a no-issues comment from the quality scale reviewer (@abmantis - #184714)
- Migrate climate integrations to native temperature properties (part 6) (@emontnemery - #184740)
- Remove DISABLED_USER constant from config entries (@gjohansson-ST - #184736)
- Migrate climate integrations to native temperature properties (part 4) (@emontnemery - #184737)
- Update cryptography to 50.0.2 (@renovatebot - #184791)
- Migrate climate integrations to native temperature properties (part 8) (@emontnemery - #184742)
- Migrate climate integrations to native temperature properties (part 1) (@emontnemery - #184732)
- Update pylint checkers with renamed water_heater methods (@emontnemery - #184748)
- Update pylint checkers with renamed climate methods (@emontnemery - #184747)
- Migrate climate integrations to native temperature properties (part 7) (@emontnemery - #184741)
- Migrate climate integrations to native temperature properties (part 2) (@emontnemery - #184734)
- Migrate climate integrations to native temperature properties (part 3) (@emontnemery - #184735)
- Migrate climate integrations to native temperature properties (part 5) (@emontnemery - #184738)
- Migrate water heater integrations to native temperature properties (@emontnemery - #184745)
- Migrate water heater integrations to native temperature properties (part 1) (@emontnemery - #184744)
- Use slider for bounded numeric threshold selectors (@wendevlin - #184492)
- Adjust pylint tests to use renamed climate properties (@emontnemery - #184845)
- Add shared async_noop callback helper (@epenet - #184909)
- Use async_noop instead of lambda: None for callbacks (@epenet - #184939)
- Use async_noop for coordinator keep-alive listeners (@epenet - #184940)
- Add imported integrations to the CI paths filter (@epenet - #184947)
- Add pylint checker for coordinator async_refresh in tests (@erwindouna - #184996)
- Make quality-scale-verify skill run the actual checks (@MartinHjelmare - #182490)
- Add pylint checker for config flow unique ID asserts (@erwindouna - #185210)
- Avoid extracting inner tar files when restoring a backup (@emontnemery - #184923)
- Assert the unique ID in config flow tests (batch 1) (@erwindouna - #185258)
- Add pylint checker for redundant translation_key with device_class (@frenck - #185224)
- Assert the unique ID in config flow tests (batch 2) (@erwindouna - #185260)
- Assert the unique ID in config flow tests (batch 3) (@erwindouna - #185262)
- Assert the unique ID in config flow tests (batch 4) (@erwindouna - #185266)
- Assert the unique ID in config flow tests (batch 5) (@erwindouna - #185274)
- Assert the unique ID in config flow tests (batch 6) (@erwindouna - #185275)
- Assert the unique ID in config flow tests (batch 7) (@erwindouna - #185282)
- Assert the unique ID in config flow tests (batch 8) (@erwindouna - #185283)
- Update ruff (@renovatebot - #185155)
- Add pylint checker for coordinator config entry typing (@frenck - #185278)
- Refine quality-scale-verify duplicate-abort and unverified reporting (@MartinHjelmare - #185326)
- Add log and raise pylint check (@erwindouna - #185392)
- Remove duplicate error logs (batch 1) (@erwindouna - #185443)
- Remove duplicate error logs (batch 2) (@erwindouna - #185444)
- Remove duplicate error logs (batch 5) (@erwindouna - #185447)
- Remove duplicate error logs (batch 3) (@erwindouna - #185445)
- Remove duplicate error logs (batch 4) (@erwindouna - #185446)
- Remove duplicate error logs (batch 6) (@erwindouna - #185448)
- Add config flow error recovery pylint check (@erwindouna - #185214)
- Test config flow error recovery (batch 1) (@erwindouna - #185460)
- Test config flow error recovery (batch 10) (@erwindouna - #185474)
- Test config flow error recovery (batch 8) (@erwindouna - #185472)
- Test config flow error recovery (batch 6) (@erwindouna - #185469)
- Test config flow error recovery (batch 5) (@erwindouna - #185470)
- Test config flow error recovery (batch 7) (@erwindouna - #185471)
- Test config flow error recovery (batch 4) (@erwindouna - #185467)
- Test config flow error recovery (batch 9) (@erwindouna - #185476)
- Add coordinator entity available pylint check (@erwindouna - #185384)
- Test config flow error recovery (batch 11) (@erwindouna - #185479)
- Test config flow error recovery (batch 14) (@erwindouna - #185488)
- Test config flow error recovery (batch 13) (@erwindouna - #185482)
- Test config flow error recovery (batch 12) (@erwindouna - #185491)
- Test config flow error recovery (batch 2) (@erwindouna - #185463)
- Test config flow error recovery (batch 3) (@erwindouna - #185465)
- Allow ConfigEntryNotReady to carry a retry delay (@lackas - #183895)
- Allow trigger platforms to mix legacy and new-style triggers (@frenck - #184047)
- Update pnpm to 12.8.2 (@renovatebot - #185522)
- Store translation details on config entry unload failure (@gjohansson-ST - #185523)
- Update pnpm to 12.9.0 (@renovatebot - #185564)
- Update pylint to 4.1.2 (@renovatebot - #185569)
- Update CodSpeedHQ/action action to v5.4.0 (@renovatebot - #185570)
- Remove legacy quality_scale from integrations with config flow (@tr4nt0r - #185556)
- Raise errors instead of logging in action handlers (@erwindouna - #185615)
- Replace sleeps in integration tests with deterministic waits (@erwindouna - #185605)
- Use descriptive link text in removed integration issues (@frenck - #184508)
- Report never-imported files in one coverage group only (@erwindouna - #185684)
- Run partial test runs in parallel with the lint jobs (@erwindouna - #185670)
- Update ast-serialize to 0.12.1 (@cdce8p - #185814)
- Bump async-upnp-client to 0.49.0 (@StevenLooman - #185830)
- Run the database test jobs in parallel (@erwindouna - #185685)
- Exclude snapshot changes from quality scale reviewer workflow limits (@abmantis - #184991)
- Move OAuth2 protocol helpers out of config_entry_oauth2_flow (@zweckj - #183200)
- Don’t re-add entities from core integrations on entity ID change (@emontnemery - #185462)
- Remove opt-in to in-place entity id rename from core integrations (@emontnemery - #185909)
- Remove entity base class in place rename opt in (@emontnemery - #185911)
- Config Entry methods can return None (@gjohansson-ST - #182683)
- Adjust Entity.async_entity_id_changed docstring (@emontnemery - #185937)
- Add header and redirect options to the OAuth2 token request (@zweckj - #183239)
- Add media_source helper to get a single image from media sources (@zweckj - #183981)
- Allow None return in MockModule config entry callbacks (@gjohansson-ST - #185942)
- Flag async_setup_services called from async_setup_entry (@epenet - #185936)
- Add translations for backup agent errors (@zweckj - #185956)
- Require deprecated entity members to be annotated Final (@epenet - #185947)
- Honor retry_after when the first coordinator refresh fails (@lackas - #185521)
- Centralize entity component platform ownership (@balloobbot - #184226)
- Clean up subentry registry links before notifying update listeners (@balloobbot - #184227)
- Separate Store file I/O and use it in storage fixtures (@balloobbot - #184232)
- Remove leftover shared config flow abort strings (@zweckj - #185981)
- New pylint checker home-assistant-step_id-match-method (@gjohansson-ST - #176220)
- Bump openai from 3.10.0 to 3.26.0 (@balloob - #186042)
- Update j178/prek-action action to v3.0.1 (@renovatebot - #186060)
- Update prek to 0.5.5 (@renovatebot - #186061)
- Resolve imported domain constants in exception translations checker (@zweckj - #185955)
- Keep restored entity states in sync with registry entry disabled state (@arturpragacz - #186056)
- Report implicit entity disabled_by change in registry event (@arturpragacz - #186134)
- Add infrared and radio-frequency class_module checker (@abmantis - #186152)
- Migrate climate integrations which restore state to RestoreClimate (@emontnemery - #186151)
- Migrate DeviceInfo and ChildDeviceInfo to be dataclasses (@epenet - #180251)
- Return None from config entry methods in integrations (batch 1: abode–aranet) (@gjohansson-ST - #186181)
- Return None from config entry methods in integrations (batch 2: arcam_fmj–canary) (@gjohansson-ST - #186182)
- Return None from config entry methods in integrations (batch 6: generic–hardkernel) (@gjohansson-ST - #186186)
- Return None from config entry methods in integrations (batch 4: drop_connect–escea) (@gjohansson-ST - #186184)
- Return None from config entry methods in integrations (batch 3: casper_glow–dremel_3d_printer) (@gjohansson-ST - #186183)
- Return None from config entry methods in integrations (batch 8: ifttt–klik_aan_klik_uit) (@gjohansson-ST - #186189)
- Return None from config entry methods in integrations (batch 9: kmtronic–luci) (@gjohansson-ST - #186191)
- Return None from config entry methods in integrations (batch 5: esphome–gdacs) (@gjohansson-ST - #186185)
- Return None from config entry methods in integrations (batch 7: harman_luxury–idrive_e2) (@gjohansson-ST - #186187)
- Return None from config entry methods in integrations (batch 17: thermopro–uptime_kuma) (@gjohansson-ST - #186209)
- Return None from config entry methods in integrations (batch 15: sensoterra–splunk) (@gjohansson-ST - #186202)
- Return None from config entry methods in integrations (batch 10: luftdaten–mpd) (@gjohansson-ST - #186192)
- Return None from config entry methods in integrations (batch 13: philips_js–rainforest_raven) (@gjohansson-ST - #186198)
- Return None from config entry methods in scaffold templates (@gjohansson-ST - #186270)
- Return None from config entry methods in integrations (batch 18: uptimerobot–wled) (@gjohansson-ST - #186219)
- Return None from config entry methods in integrations (batch 14: rainmachine–sensorpush_cloud) (@gjohansson-ST - #186199)
- Return None from config entry methods in integrations (batch 19: wmspro–zwave_me) (@gjohansson-ST - #186221)
- Return None from config entry methods in integrations (batch 16: spotify–thermobeacon) (@gjohansson-ST - #186203)
- Return None from config entry methods in integrations (batch 12: ohme–pglab) (@gjohansson-ST - #186195)
- Return None from config entry methods in integrations (batch 11: mqtt–octoprint) (@gjohansson-ST - #186193)
- Update types stubs (@renovatebot - #186294)
- Deprecate config flow connection class constants (@joostlek - #186267)
- Update python-slugify to 9.1.3 (@renovatebot - #186337)
- Add a CodSpeed benchmark for the sensor device info conversion (@epenet - #186388)
- Add pylint checker for action registration outside services module (@epenet - #185967)
- Set config entry id on repair issues and drop custom cleanup (@emontnemery - #186465)
- Set device info fields as attributes instead of by key (@epenet - #186425)
- Remove the helper exemptions from the class module pylint check (@epenet - #186451)
- Don’t start user flows with data in config entries tests (@joostlek - #186482)
- Update @playwright/test to 1.64.0 (@renovatebot - #186569)
- Set remaining device info fields as attributes instead of by key (@epenet - #186577)
- Import helper names from their source instead of the sensor integration (@epenet - #186587)
- Update actions/setup-node action to v7.1.0 (@renovatebot - #186573)
- Update actions/upload-artifact action to v7.0.2 (@renovatebot - #186561)
- Read DeviceInfo fields as attributes instead of by key (@epenet - #186607)
- Set DeviceInfo fields as attributes instead of using update() (@epenet - #186599)
- Bump anyio to 4.15.1 (@chemelli74 - #186674)
- Add pylint checker for manually started reauth/reconfigure flows (@joostlek - #183736)
- Set config entry id on repair issues (part 3) (@emontnemery - #186463)
- Add pylint check to avoid starting user config flow with data (@joostlek - #178807)
- Update actions/download-artifact action to v8.0.2 (@renovatebot - #186560)
- Import datetime as dt (@joostlek - #186696)
- Patch pyserial on startup to force serial port locking (@puddly - #170925)
- Merge requirement extras and fail on conflicting pins in gen_requirements_all (@balloob - #186710)
- Update infrared-protocols to 10.3.0 (@renovatebot - #186756)
- Allow overview_label translation for object selector fields (@gjohansson-ST - #170436)
- Use all CPUs for full pylint runs in CI (@erwindouna - #186734)
- Update github/codeql-action action to v4.38.3 (@renovatebot - #186752)
- Update astroid to 4.3.4 (@renovatebot - #186751)
- Require all in core integrations in hassfest (@epenet - #186763)
- Add pylint check for noqa F401 in modules defining all (@epenet - #186698)
- Import core names from their source instead of the sensor integration (@epenet - #186868)
- Move image entity classes to entity module (@epenet - #186869)
- Move camera entity classes to entity module (@epenet - #186872)
- Prevent pending writes from restoring removed storage (@balloob - #186489)
- Generate integration_categories.json with hassfest (@frenck - #186883)
- Update pnpm to 12.11.1 (@renovatebot - #186900)
- Update pydantic to 2.14.0 (@renovatebot - #186757)
- Bump orjson to 3.13.0 (@chemelli74 - #186677)
- Rename developer docs to contributors docs (@edenhaus - #186909)
- Update pnpm to 12.11.2 (@renovatebot - #186908)
- Add categories to the integration manifest (@frenck - #186897)
- Update CodSpeedHQ/action action to v5.4.2 (@renovatebot - #186948)
- Update pipdeptree to 4.2.6 (@renovatebot - #186961)
- Update securetar to 2026.10.0 (@renovatebot - #186953)
- Update astral-sh/setup-uv action to v10.3.0 (@renovatebot - #186949)
- Add categories to the generated integrations.json (@frenck - #186927)
- Separate hassfest plugin loading from execution (@balloob - #186960)
- Skip the manifest category check outside a core checkout (@frenck - #186974)
- Extract shared helpers used by hassfest and Core scripts (@balloob - #186958)
- Handle malformed placeholders when loading translations (@balloob - #186491)
- Extract shared pytest fixtures and helpers into a package (@balloob - #186956)
- Move the Pylint plugin into new packages folder (@balloob - #186954)
- Rename agents skill directory (@Shulyaka - #187000)
- Add categories to all integration manifests (@frenck - #187045)
- Accept categories in custom integration manifests (@frenck - #187008)
- Cleanup mypy config for pydantic plugin (@cdce8p - #187078)
- Update pipdeptree to 4.2.7 (@renovatebot - #187086)
- Require categories for every integration (@frenck - #187210)
- Report intent service call failures for the right entity (@balloob - #187046)
- Declare and synchronize pytest-home-assistant dependencies (@balloob - #187088)
- Update pylint to 4.1.3 (@renovatebot - #187267)
- Update pydantic to 2.14.1 (@renovatebot - #187266)
- Allow full templates in the enabled option of script steps (@frenck - #187013)
- Add OpenAI decision tasks to AI Task (@balloobbot - #184953)
- Update ruff (@renovatebot - #186952)
- Expose infrared fixtures in pytest-home-assistant (@balloob - #187091)
- Move MFA login steps into an opt-in MfaLoginFlow (@zweckj - #186102)
- Set config entry id on repair issues (part 2) (@emontnemery - #186436)
- Set config entry id on repair issues (part 1) (@emontnemery - #186433)
- Expose radio frequency fixtures in pytest-home-assistant (@balloob - #187092)
- Resolve pytest fixture paths outside the Core checkout (@balloob - #187093)
- Enable custom integrations by default in pytest-home-assistant (@balloob - #187094)
- Add standalone zizmor security scanning (@JC0liver - #179632)
- Clarify pytest-home-assistant docstrings and README (@balloob - #187272)
- Add Helty brand (@ebaschiera - #187365)
- Only build pylint and pytest packages on full CI runs (@epenet - #187361)
- Add a frontend helper to get the theme names (@epenet - #187337)
- Use the backup manager helper instead of its hass.data key (@epenet - #187338)
- Add missing public names to core integrations (@epenet - #187339)
- Allow None as DeviceInfo via_device_id (@epenet - #187353)
- Move getting the device of an entity into its own method (@epenet - #187354)
- Test that every login flow asks for MFA except trusted networks (@zweckj - #187320)
- Bump geopy from 2.3.0 to 2.5.0 (@dependabot - #187393)
- Update actions/download-artifact action to v8.0.2 (@renovatebot - #187430)
- Update j178/prek-action action to v3.0.1 (@renovatebot - #187435)
- Update actions/upload-artifact action to v7.0.2 (@renovatebot - #187431)
- Update github/codeql-action action to v4.38.3 (@renovatebot - #187434)
- Update astral-sh/setup-uv action to v10.3.0 (@renovatebot - #187437)
- Update actions/create-github-app-token action to v3.3.0 (@renovatebot - #187436)
- Fix flaky debouncer shutdown test (@zweckj - #187439)
- Enforce no_implicit_reexport for core integration package roots (@epenet - #187341)
- Add conditional field visibility to config and options flows (@piitaya - #176703)
- Revert “Add conditional field visibility to config and options flows” (@emontnemery - #187460)
- Add service and service argument enums to entity platforms (e-n) (@epenet - #187458)
- Add custom-integration-sources skill (@epenet - #185458)
- Import re-exported names from their source in recorder, http and bluetooth callers (@epenet - #187478)
- Align the custom-integration-sources skill rules with its instructions (@epenet - #187482)
- Make the device registry create child devices from a ChildDeviceInfo (@epenet - #187398)
- End the sessions of credentials when they are removed (@zweckj - #187392)
- Add argument enums to the homeassistant triggers (@epenet - #187493)
- Use the trigger argument enums in the remaining device triggers (@epenet - #187498)
- Make the device registry create devices from a DeviceInfo (@epenet - #187531)
- Add AI skill instructions from PR review feedback (@davidrecordon - #184269)
- Fix deadlock when priming conditions relying on recorder history (@emontnemery - #187497)
- Include Meraki in Cisco brand (@felixblang - #187416)
- Fix carry when rounding time_since, time_until and timedelta_string (@jayhemnani9910 - #185796)
- Test the entity platform with a ChildDeviceInfo (@epenet - #187532)
- Don’t fetch hadolint unauthenticated (@silamon - #185598)
- Fix line endings in claude skill (@tr4nt0r - #187548)
- Pass a DeviceInfo to async_get_or_create_device in integrations f-i (@epenet - #187549)
- Pass a DeviceInfo to async_get_or_create_device in integrations a-e (@epenet - #187547)
- Revert “Fix deadlock when priming conditions relying on recorder history” (@emontnemery - #187564)
- Pass a DeviceInfo to async_get_or_create_device in integrations s-t (@epenet - #187568)
- Enforce no_implicit_reexport for the whole package of core integrations (@epenet - #187543)
- Pass a DeviceInfo to async_get_or_create_device in integrations i-m (@epenet - #187565)
- Pass a DeviceInfo to async_get_or_create_device in integrations m-p (@epenet - #187566)
- Pass a DeviceInfo to async_get_or_create_device in integrations p-s (@epenet - #187567)
- Pass a DeviceInfo to async_get_or_create_device in integrations u-z (@epenet - #187569)
- Add pylint check that init is the first method of a class (@joostlek - #187588)
- Fix race in entity condition history priming (@emontnemery - #187604)
- Prevent in-place union from modifying ReadOnlyDict (@raman325 - #187625)
- Fix unpickling ReadOnlyDict and states with attributes (@raman325 - #187628)
- Require a list for object selectors with multiple (@gjohansson-ST - #187618)
- Fix RecursionError when parsing long template results (@raman325 - #187642)
- Update infrared-protocols to 10.4.1 (@renovatebot - #187599)
- Fix significant percentage change check for negative values (@raman325 - #187659)
- Fix ranged_value_to_percentage docstring examples (@raman325 - #187658)
- Fix ValueError converting xy color with a tiny nonzero y (@raman325 - #187655)
- Fix timedelta_string showing 12 months instead of 1 year (@raman325 - #187648)
- Fix Throttle cooldown restarting on refused no_throttle calls (@raman325 - #187647)
- Fix template shuffle ignoring a seed of 0 (@raman325 - #187672)
- Fix template results of non-ASCII digits being parsed as numbers (@raman325 - #187649)
- Return default from template int for an infinite float (@raman325 - #187637)
- Fix merge_response dropping dict responses (@raman325 - #187636)
- Keep the size limit when copying or merging a LimitedSizeDict (@raman325 - #187633)
- Return default from util.convert when the conversion overflows (@raman325 - #187631)
- Reject trailing newline in config validation functions (@raman325 - #187635)
- Keep the context parent_id when restoring a State from a dict (@raman325 - #187644)
- Fix OverflowError in parse_time for huge values (@raman325 - #187650)
- Fix color_hsb_to_RGB returning black for hue 360 (@raman325 - #187654)
- Fix TypeError in entity ID validators for non-iterable values (@raman325 - #187661)
- Treat the whole fc00::/7 IPv6 unique local range as private (@raman325 - #187667)
- Fix template remap mirror mode (@raman325 - #187652)
- Return default from template math functions for out of range values (@raman325 - #187662)
- Fix template renders sharing the same cached results (@raman325 - #187664)
- Fix template wrap returning max for values just below min (@raman325 - #187668)
- Fix to_json with ensure_ascii emitting invalid JSON for NaN and Infinity (@raman325 - #187669)
- Keep template remap clamp output within the output range (@raman325 - #187660)
- Keep trailing slash in URL when normalizing URLs (@raman325 - #187671)
- Fix parsing of language tags with both a script and a region (@raman325 - #187675)
- Return None from get_time_zone for malformed time zone keys (@raman325 - #187677)
- Fix AsyncIteratorReader dropping data after an empty chunk (@raman325 - #187641)
- Fix time pattern missing repeated match at non-hourly DST end (@raman325 - #187678)
- Fix language matching for script subtags in other casings (@raman325 - #187665)
- Fix to_json sort_keys with ensure_ascii on mixed key types (@raman325 - #187673)
- Fix parse_datetime for UTC offsets with seconds (@raman325 - #187679)
- Update recorder database versions for MySQL 26.7 (@raman325 - #187716)
- Reject whitespace and control characters in URL validation (@raman325 - #187681)
- Reject trailing newline and non-ASCII digits in host validation (@raman325 - #187663)
- Fix ZeroDivisionError in color_temperature_to_rgbww for a single-temperature range (@raman325 - #187656)
- Fix AsyncIteratorReader.read() hanging when called without a size (@raman325 - #187632)
- Fix urlencode template function rendering as a bytes literal (@raman325 - #187629)
- Return None or raise from entity component config entry methods (@gjohansson-ST - #186278)
- Import names from their source modules in integrations a (@epenet - #187744)
- Import names from their source modules in integrations a-d (@epenet - #187745)
- Import names from their source modules in integrations e-g (@epenet - #187746)
- Import names from their source modules in integrations h-l (@epenet - #187748)
- Import names from their source modules in integrations l-m (@epenet - #187749)
- Import names from their source modules in integrations m-o (@epenet - #187750)
- Import names from their source modules in integrations p-r (@epenet - #187751)
- Import names from their source modules in integrations r-t (@epenet - #187754)
- Require config entry methods to return None in type hint checker (@gjohansson-ST - #186272)
- Import names from their source modules in integrations t-x (@epenet - #187755)
- Add instructions to PR review skill to validate arch approval (@abmantis - #187699)
- Import names from their source modules in integrations a-c (@epenet - #187784)
- Import names from their source modules in integrations f-h (@epenet - #187785)
- Import names from their source modules in integrations i-l (@epenet - #187786)
- Import names from their source modules in integrations l-o (@epenet - #187787)
- Import names from their source modules in integrations p-r (@epenet - #187788)
- Import names from their source modules in integrations s-v (@epenet - #187789)
- Add pre-existing flag to ha-review skill findings (@Markus98 - #187811)
- Return None from config entry method mocks in integration tests (batch 1: abode–assist_pipeline) (@gjohansson-ST - #187807)
- Return None from config entry method mocks in integration tests (batch 2: atag–cloud) (@gjohansson-ST - #187808)
- Return None from config entry method mocks in integration tests (batch 3: cloudflare–ecoforest) (@gjohansson-ST - #187810)
- Return None from config entry method mocks in integration tests (batch 4: econet–flow_it) (@gjohansson-ST - #187812)
- Return None from config entry method mocks in integration tests (batch 5: flume–google_sheets) (@gjohansson-ST - #187814)
- Return None from config entry method mocks in integration tests (batch 6: google_tasks–hr_energy_qube) (@gjohansson-ST - #187816)
- Return None from config entry method mocks in integration tests (batch 11: octoprint–picotts) (@gjohansson-ST - #187827)
- Return None from config entry method mocks in integration tests (batch 15: swisscom–trafikverket_camera) (@gjohansson-ST - #187835)
- Return None from config entry method mocks in integration tests (batch 12: ping–renson) (@gjohansson-ST - #187828)
- Return None from config entry method mocks in integration tests (batch 14: sleep_as_android–swiss_public_transport) (@gjohansson-ST - #187830)
- Return None from config entry method mocks in integration tests (batch 17: watts–zwave_js) (@gjohansson-ST - #187837)
- Return None from config entry method mocks in integration tests (batch 13: reolink–skybell) (@gjohansson-ST - #187829)
- Return None from config entry method mocks in integration tests (batch 9: loqed–motion_blinds) (@gjohansson-ST - #187824)
- Return None from config entry method mocks in integration tests (batch 16: trafikverket_ferry–watergate) (@gjohansson-ST - #187836)
- Return None from config entry method mocks in integration tests (batch 10: motionblinds_ble–obihai) (@gjohansson-ST - #187826)
- Return None from config entry method mocks in integration tests (batch 19: f-string and helper patches) (@gjohansson-ST - #187833)
- Add conditional field visibility to config and options flows (@piitaya - #187515)
- Return None from config entry method mocks in integration tests (batch 8: jellyfin–london_underground) (@gjohansson-ST - #187821)
- Return None from config entry method mocks in integration tests (batch 7: html5–izone) (@gjohansson-ST - #187820)
- Return None from config entry method mocks in scaffold templates (@gjohansson-ST - #187806)
- Add support for Edifier R1380DB / RC13D (@mijofa - #187120)
- Add action enum guidance to the integration knowledge skill (@epenet - #187843)
- Allow spaces in the userinfo of validated URLs (@raman325 - #187840)
- Add urlencode template function test with default parse_result (@raman325 - #187841)
- Return None from config entry method mocks in entity component tests (@gjohansson-ST - #187805)
- Enforce no_implicit_reexport for all integrations (@epenet - #187775)
- Add decorator variant of verify_event_loop_thread (@emontnemery - #187984)
- Update CodSpeedHQ/action action to v5.5.0 (@renovatebot - #187961)
- Fix disabled_by affecting existing devices in device registry (@arturpragacz - #187928)
- Return None from config entry method mocks in core tests (@gjohansson-ST - #187991)
- Use AsyncMock for config entry method mocks in cloudhook tests (@Markus98 - #187995)
- Pass device info as keyword arguments to async_get_or_create in integrations (tado–zwave_js) (@epenet - #188002)
- Pass device info as keyword arguments to async_get_or_create in integrations (actron_air–hive) (@epenet - #187999)
- Pass device info as keyword arguments to async_get_or_create in integrations (home_connect–nasweb) (@epenet - #188000)
- Pass device info as keyword arguments to async_get_or_create in integrations (netatmo–systemnexa2) (@epenet - #188001)
- Rename the device registry methods taking a device info (@epenet - #188005)
- Remove disabled_by from the device registry methods taking a device info (@epenet - #188006)
- Add helper for refreshing issue registry issues (@emontnemery - #187990)
- Add service and service argument enums to assist_satellite, calendar, climate and todo (@epenet - #187448)
- Add service and service argument enums to entity platforms (a-d) (@epenet - #187472)
- Add service and service argument enums to entity platforms (o-z) (@epenet - #187459)
- Update @playwright/test to 1.64.1 (@renovatebot - #187960)
- Use the service enums in the entity platforms’ own code (a-h) (@epenet - #188046)
- Track registry changes for condition targets with exclusions (@emontnemery - #188062)
- Update AI skills with legacy device tracker migration guide (@emontnemery - #187793)
- Improve log when entity condition fails to read history (@emontnemery - #187979)
- Use the service enums in the entity platforms’ own code (l-w) (@epenet - #188047)
- Add condition and trigger tests for target exclusions (@jpbede - #188066)
- Use issues refresh helper in config_entries (@emontnemery - #188035)
- Update pipdeptree to 4.2.8 (@renovatebot - #188110)
- Update ruff (@renovatebot - #188111)
- Add action enums to the input helpers (@epenet - #188083)
- Shorten repetitive alarm control panel, cover and valve action enum (@epenet - #188146)
- Teach bots about hiding type narrowing asserts behind TYPE_CHECKING (@emontnemery - #188207)
- Validate latitude and longitude in
LocationSelector(@tr4nt0r - #188241) - Update pnpm to 12.14.0 (@renovatebot - #188246)
- Update github/codeql-action action to v4.39.0 (@renovatebot - #188294)
- Update zizmor (@renovatebot - #188295)
- Only allow None return in MockModule config entry callbacks (@gjohansson-ST - #188348)
- Sync manifest JSON schema with hassfest (@oyvindwe - #188334)
- Add timlaing as icloud code owner (@timlaing - #188490)
- Update pipdeptree to 4.2.9 (@renovatebot - #188643)
- Update httpx2 to 2.14.0 (@renovatebot - #188628)
- Update ghcr.io/alexxit/go2rtc Docker tag to v1.9.15 (@renovatebot - #188627)
- Simplify overloads of async_get_device_and_config_entry helpers (@arturpragacz - #188429)
- Expand groups in target exclude blocks (@jpbede - #188145)
- Describe the via device in device registry entry snapshots (@epenet - #188728)
- Show missing config entry in entity registry entry snapshots (@epenet - #188727)
- Update area temperature and humidity sensors when their entity ID is renamed (@jpbede - #188459)
- Post PR comment when IQS review workflow has no credits (@abmantis - #188750)
- Give new child device the area of its main entity (@arturpragacz - #188711)
- Describe the config subentry in registry entry snapshots (@epenet - #188744)
- Define public names of the helper integrations (@epenet - #188752)
- Drop unused hass from own area predicate in entity registry (@arturpragacz - #188786)
- Stop opening issues when IQS review workflow has no credits (@abmantis - #188778)
- Bump Brotli constraint to >=1.2.1 (@edenhaus - #188810)
- Avoid parallel subagents in IQS review workflow (@abmantis - #188754)
- Update prek to 0.5.6 (@renovatebot - #188832)
- Update infrared-protocols to 10.5.0 (@renovatebot - #188838)
- Update j178/prek-action action to v3.1.0 (@renovatebot - #188831)
- Update uv to 0.13.6 (@renovatebot - #188866)
- Update astral-sh/setup-uv action to v10.3.2 (@renovatebot - #188868)
- Update ruff (@renovatebot - #188870)
- Update CodSpeedHQ/action action to v5.6.0 (@renovatebot - #188871)
- Skip quality scale review of pull requests changing only snapshots (@abmantis - #188897)
- Increase quality-scale-reviewer timeout to 40 minutes (@abmantis - #188898)
- Handle go2rtc client errors during snapshot retrieval (@ldeutschland - #188902)
- Rename ir.async_begin_issues_refresh to ir.async_refresh_issues (@emontnemery - #188919)
- Evaluate the states template filter at render time (@jslponcev-ui - #188228)
- List the integration categories in the manifest JSON schema (@joostlek - #188931)
- Update database version for mySQL (@chemelli74 - #188952)
- Drop unused confirm_only from config flows (@arturpragacz - #188784)
- Raise when async_forward_entry_setups is not awaited during setup (@gjohansson-ST - #155371)
- Update pypa/gh-action-pypi-publish action to v1.14.3 (@renovatebot - #188976)
- Revert pycares 5.0.1 pin (#186164) (@aclerici38 - #188961)
- Update prek to 0.5.7 (@renovatebot - #188983)
- Extract hassfest into a package (@balloob - #187044)
- Always create a device for ScannerEntity trackers (@emontnemery - #188883)
- Add fallback flag to the entity_name template function (@arturpragacz - #188930)
- Bump base image to 2026.10.3 (@edenhaus - #189229)
- Rename the Control Home Assistant field to AI tools (@piitaya - #189240)
- Add reconfigure flow to WiZ (@joostlek - #189227)
- Remove suggest_area attribute from DeviceEntry (@gjohansson-ST - #182769)
- Add LEDVANCE brand (@joostlek - #188978)
- Wait for diagnostics platforms in device diagnostics test helper (@joostlek - #189299)
- Pin srptools below 2 to fix Apple TV (@piitaya - #189349)
- Show the AI tools field as a checkbox list (@piitaya - #189320)
- Do not end a truncated entity ID with an underscore (@weatherhog - #189403)
- Share Modbus connection setup strings across integrations (@balloob - #189555)
- Add Bluetooth connectivity metadata to integrations (@balloob - #189894)
- Add cloud connectivity metadata to integrations (@balloob - #189895)
- Add infrared connectivity metadata to integrations (@balloob - #189902)
- Add Modbus connectivity metadata to integrations (@balloob - #189907)
- Add MQTT connectivity metadata to integrations (@balloob - #189908)
- Add connectivity metadata for integrations with multiple connection types (@balloob - #189909)
- Add local network connectivity metadata to integrations (@balloob - #189910)
- Add radio frequency connectivity metadata to integrations (@balloob - #189912)
- Add serial connectivity metadata to integrations (@balloob - #189913)
- Add Zigbee connectivity metadata to integrations (@balloob - #189915)
- Publish pytest package on PyPI (@joostlek - #190049)
- Add GL.iNet brand (@joostlek - #189014)
Frontend
- Update pnpm to v12 (@renovatebot - frontend#54486)
- Improve number selectors in section settings (@karwosts - frontend#54487)
- Hash the pnpm patches directory in the rspack cache version (@bramkragten - frontend#54478)
- Update dependency @versatiles/style to v6.0.2 (@renovatebot - frontend#54497)
- Type check workflow scripts (@timmo001 - frontend#54494)
- Update dependency @lezer/highlight to v1.2.5 (@renovatebot - frontend#54501)
- Ignore .pnpm-store directory (@timmo001 - frontend#54500)
- Update dependency tinykeys to v4.0.1 (@renovatebot - frontend#54479)
- Update pnpm to v12.8.0 (@renovatebot - frontend#54502)
- Migrate combo box item to new lists (@wendevlin - frontend#54453)
- Update dependency sortablejs to v1.15.7 (@renovatebot - frontend#54476)
- Update dependency browserslist to v4.29.2 (@renovatebot - frontend#54504)
- Add ha/no-unused-element-import lint rule (@bramkragten - frontend#54210)
- Replace ha-ripple Material base with own implementation (@timmo001 - frontend#54508)
- Update dependency @versatiles/style to v6.0.3 (@renovatebot - frontend#54509)
- Add Marketplace panel (@frenck - frontend#54437)
- Update dependency @rspack/core to v2.2.8 (@renovatebot - frontend#54514)
- Add dependency review workflow (@timmo001 - frontend#54490)
- Update dependency typescript-eslint to v8.71.0 (@renovatebot - frontend#54517)
- Update dependency @types/luxon to v3.7.6 (@renovatebot - frontend#54525)
- Update pnpm to v12.8.1 (@renovatebot - frontend#54523)
- Update dependency zxing-wasm to v3.1.4 (@renovatebot - frontend#54480)
- Fix long source name overflow in energy dashboard totals (@eliaslecomte - frontend#54522)
- Add signed and offset modes to the duration selector (@piitaya - frontend#54111)
- Update dependency browserslist to v4.29.3 (@renovatebot - frontend#54531)
- Update pnpm to v12.8.2 (@renovatebot - frontend#54538)
- Update vitest monorepo to v5.0.3 (@renovatebot - frontend#54535)
- Fix max_columns number selector (@karwosts - frontend#54542)
- Add the Marketplace to the demo (@balloob - frontend#54546)
- Show the Marketplace risks alert full width without an icon (@balloob - frontend#54540)
- Update dependency vite to v8.3.2 (@renovatebot - frontend#54541)
- Update dependency globals to v17.13.0 (@renovatebot - frontend#54539)
- Update github/codeql-action action to v4.38.2 (@renovatebot - frontend#54555)
- Update home-assistant/actions digest to 06749dd (@renovatebot - frontend#54552)
- Update dependency @types/node to v24.19.1 (@renovatebot - frontend#54553)
- Add source names for SoC badges (@Jump-333 - frontend#54370)
- Preserve OAuth callback state through login and onboarding (@hunterjm - frontend#54547)
- Fix stale missing entities in target picker (@karwosts - frontend#54544)
- Show entity diagnostic in a readonly editor w/ copy button (@karwosts - frontend#54536)
- Highlight the picker row that Enter would pick (@jamesshannon - frontend#54319)
- Shorten Marketplace warning countdown in development (@timmo001 - frontend#54564)
- Add light color card feature with hue scrubber (@piitaya - frontend#54219)
- Update pnpm to v12.9.0 (@renovatebot - frontend#54594)
- Update dependency eslint to v10.12.0 (@renovatebot - frontend#54593)
- Forward OAuth authorization parameters to the login flow (@hunterjm - frontend#54548)
- Use context in Marketplace, prepare shared layouts for future context migrations (@timmo001 - frontend#54566)
- Fix invisible inherited label tooltip text colour (@eskres - frontend#54521)
- Cleanup multiple unnecessary usages of entitySources (@karwosts - frontend#54556)
- Add a consumeContext decorator for reactive controllers (@MindFreeze - frontend#54575)
- Migrate energy, power, gas and water cards to context instead of hass (@MindFreeze - frontend#54560)
- Use standard Apache 2.0 license text so GitHub detects it (@bramkragten - frontend#54599)
- Drop hass from the energy total badges and the statistics graph card (@MindFreeze - frontend#54590)
- Load History and Activity results only after closing the sources sheet on mobile (@marcinbauer-ohf - frontend#54602)
- Add a custom repositories page to the Marketplace (@timmo001 - frontend#54604)
- Simplify CI workflow: make build depend on lint and test (@bramkragten - frontend#54609)
- Skip release delay for first-party packages (@timmo001 - frontend#54614)
- Add undo action to cut toast in automation editor (@marcinbauer-ohf - frontend#54612)
- Move dashboard edit mode help button to the overflow menu (@marcinbauer-ohf - frontend#54608)
- Follow webawesome fork releases in Renovate (@timmo001 - frontend#54619)
- Upgrade webawesome to version 3.14 (@wendevlin - frontend#54616)
- Fetch nightly translations artifact directly with retry backoff (@timmo001 - frontend#54574)
- Add badge for the wait for a template row (@Jump-333 - frontend#54529)
- Remove no-op refresh button from activity panel (@marcinbauer-ohf - frontend#54620)
- Pass registries to generateEntityFilter as separate values (@MindFreeze - frontend#54605)
- Drop hass from the home summary card (@MindFreeze - frontend#54606)
- Add a gallery page for ha-picker-combo-box (@jamesshannon - frontend#54588)
- Update dependency maplibre-gl to v6.12.0 (@renovatebot - frontend#54636)
- Update pnpm to v12.9.1 (@renovatebot - frontend#54635)
- Fix leaked WebRTC peer connections in ha-web-rtc-player (@wendevlin - frontend#54557)
- Correct system and diagnostics API types in the frontend (@balloob - frontend#54290)
- Update dependency @versatiles/style to v6.1.1 (@renovatebot - frontend#54629)
- Fix script duplication (@karwosts - frontend#54637)
- Sort selected weekdays in time trigger and condition (@farmio - frontend#54623)
- Remove the blocking-label workflow (@timmo001 - frontend#54064)
- Use generic paths to address Lovelace dashboard items (@piitaya - frontend#54207)
- Keep dropdown menus within the viewport and wrap long items (@wendevlin - frontend#54643)
- Add reset zoom button to network graphs (@MindFreeze - frontend#54510)
- Make disabled automation rows easier to read (@marcinbauer-ohf - frontend#54650)
- Fix long entity names overflowing the entities picker (@marcinbauer-ohf - frontend#54656)
- E2E test fix: Keep the current user in the demo auth stub (@timmo001 - frontend#54658)
- Add group by to Marketplace tables (@timmo001 - frontend#54653)
- Update dependency jsdom to v30.1.2 (@renovatebot - frontend#54642)
- Remove duplicate condition from the automation editor code (@Jump-333 - frontend#54674)
- Add repository source filter and grouping to Marketplace (@timmo001 - frontend#54654)
- Add legend values in the devices details graph (@Jump-333 - frontend#54631)
- Add power values to energy dashboard (@Jump-333 - frontend#54627)
- Fix unhandled undefined label registry access (@karwosts - frontend#54659)
- Add unit of measurement selector (@jbouwh - frontend#54391)
- Refactor UI support checks into static methods and add validation helpers (@wendevlin - frontend#54493)
- Allow sections to contain badges and sections (@piitaya - frontend#54624)
- Allow running and testing disabled actions and conditions (@marcinbauer-ohf - frontend#54649)
- Add copy, cut and paste for dashboard sections (@jce200 - frontend#54652)
- Avoid recomputing chart series when only options change (@ovflowd - frontend#54666)
- Pass localize and config to createEntityNotFoundWarning (@MindFreeze - frontend#54710)
- Drop hass from the distribution card (@MindFreeze - frontend#54711)
- Coalesce live updates on large history charts (@ovflowd - frontend#54669)
- Drop hass from ha-network-graph and add a reduced motion context (@MindFreeze - frontend#54713)
- Add a debug tool to simulate safe areas (@piitaya - frontend#54719)
- Update dependency marked to v18.1.0 (@renovatebot - frontend#54730)
- Update dependency typescript-eslint to v8.71.1 (@renovatebot - frontend#54732)
- Encode the automation id in activity trace links (@Xyolyp - frontend#54733)
- Update dependency intl-messageformat to v12.1.3 (@renovatebot - frontend#54734)
- Use the entity name formatter in dashboards (@piitaya - frontend#54724)
- Update dependency @formatjs/intl-datetimeformat to v7.8.1 (@renovatebot - frontend#54735)
- Drop the Mapbox RTL text plugin now that MapLibre shapes RTL text itself (@maartenla - frontend#54706)
- Show only serial integrations when setting up an ESPHome serial port (@MindFreeze - frontend#54668)
- Make the Marketplace warning a friendlier modal over the Marketplace (@laupalombi - frontend#54586)
- Load Marketplace icons through the Marketplace brands view (@frenck - frontend#54740)
- Update dependency js-yaml to v5.4.3 (@renovatebot - frontend#54745)
- Update dependency nanoid to v6.0.2 (@renovatebot - frontend#54746)
- Update dependency zxing-wasm to v3.1.5 (@renovatebot - frontend#54747)
- Update dependency vite to v8.3.3 (@renovatebot - frontend#54748)
- Show energy gas in the unit of its sources (@virtitnerd - frontend#54677)
- Speed up building history line chart data (@ovflowd - frontend#54671)
- Update pnpm to v12.10.0 (@renovatebot - frontend#54752)
- Migrate remaining ha-md-list usages and remove ha-md-list (@wendevlin - frontend#54569)
- Follow the active row in virtual-focus lists after a removal (@MindFreeze - frontend#54765)
- Add area labels to the pull request labeler (@timmo001 - frontend#54697)
- Fix thin line flashing under empty sliders while dialogs open (@ovflowd - frontend#54716)
- Use the entity name formatter in automation descriptions (@piitaya - frontend#54767)
- Migrate ha-outlined-icon-button to ha-icon-button (@wendevlin - frontend#54571)
- Link trace steps to the script or automation run they started (@Xyolyp - frontend#54518)
- Simplify how data tables reach the screen edges (@piitaya - frontend#54714)
- Use the entity name formatter in the entity filter, related items and logbook (@piitaya - frontend#54773)
- Remove @material/web (@wendevlin - frontend#54580)
- Remove dead –mdc-typography-* custom properties (@bramkragten - frontend#54201)
- Drop ha-formfield in favour of the switch’s own label (@bramkragten - frontend#54200)
- Fix RTL bidi corruption of temperature in weather entity row (@tzagim - frontend#54776)
- Use the entity name formatter in voice assistant settings (@piitaya - frontend#54775)
- Let the tab padding give way before the tab label (@bgoncal - frontend#54670)
- Add local disk mounts to storage settings (@MindFreeze - frontend#53643)
- Only offer installed statuses on the Marketplace installed tab (@timmo001 - frontend#54662)
- Update dependency @versatiles/style to v6.2.0 (@renovatebot - frontend#54777)
- Fix autocomplete trying to fill username in weird places (@karwosts - frontend#54789)
- Add E2E tests for creating an automation (@timmo001 - frontend#54791)
- Update dependency maplibre-gl to v6.13.0 (@renovatebot - frontend#54806)
- Update pnpm to v12.10.1 (@renovatebot - frontend#54803)
- Fix time_format field appearing when it shouldn’t in tile editor (@karwosts - frontend#54799)
- Improve demo water consumption and cost statistics (@eliaslecomte - frontend#54648)
- Update dependency @versatiles/style to v6.3.0 (@renovatebot - frontend#54804)
- Update dependency @versatiles/style to v6.3.1 (@renovatebot - frontend#54814)
- Update babel monorepo to v8.0.7 (@renovatebot - frontend#54813)
- Update dependency cropperjs to v1.7.0 (@renovatebot - frontend#54810)
- Update Playwright (@renovatebot - frontend#54824)
- Update CodeMirror (@renovatebot - frontend#54820)
- Close the previous ZHA permit subscription on search again (@pdecat - frontend#54811)
- Add bottom padding to AI and entity ID format settings pages (@balloob - frontend#54828)
- Show device area in energy device graph tooltips (@MindFreeze - frontend#54826)
- Update release-drafter/release-drafter action to v7.9.0 (@renovatebot - frontend#54837)
- Update dependency vite to v8.3.4 (@renovatebot - frontend#54829)
- Update relative-ci/agent-action action to v3.2.4 (@renovatebot - frontend#54836)
- Fix media control card reading state before config is set (@balloobbot - frontend#54834)
- Update dependency del to v9 (@renovatebot - frontend#54831)
- Fix Z-Wave node config page for parameters without an endpoint (@balloobbot - frontend#54840)
- Unsubscribe from system health info only once (@balloobbot - frontend#54838)
- Treat unknown media player state as available in media control card (@balloob - frontend#54835)
- Show empty state on MQTT panel when MQTT is not set up (@ovflowd - frontend#54817)
- Add selection mode with bulk delete to the tags page (@DaanVervacke - frontend#54819)
- Update pnpm to v12.11.0 (@renovatebot - frontend#54842)
- Keep adjust statistic dialog open after adjusting and refresh the list (@Bascht74 - frontend#54628)
- Keep History and Activity filters usable with many targets (@MindFreeze - frontend#54786)
- Number energy grid colors per direction so export-only connections are not white (@MindFreeze - frontend#54808)
- Finalize the entity naming migration (@piitaya - frontend#54725)
- Simplify entity name helpers (@piitaya - frontend#54726)
- Remove name prefix stripping from generated dashboards (@piitaya - frontend#54727)
- Fix Marketplace update badge and row numbers on mobile (@timmo001 - frontend#54843)
- Update dependency @rsdoctor/rspack-plugin to v1.6.5 (@renovatebot - frontend#54844)
- Match the tab badge colors to the Apps update tag (@timmo001 - frontend#54845)
- Hide last updated time on narrow marketplace dashboard rows (@timmo001 - frontend#54846)
- Offer versioned SSL profiles in the HTTP server settings (@Markus98 - frontend#54559)
- Show translated backup agent errors (@zweckj - frontend#54847)
- Remove unused hass properties from selectors and pickers (@MindFreeze - frontend#54852)
- Remove dead .hass bindings (@MindFreeze - frontend#54853)
- Show Thread network information on its own page (@ovflowd - frontend#54818)
- Add query strings and My links to the Marketplace (@timmo001 - frontend#54787)
- Update pnpm to v12.11.1 (@renovatebot - frontend#54851)
- Fix image cropper race conditions (@wendevlin - frontend#54850)
- Update dependency @versatiles/style to v6.4.0 (@renovatebot - frontend#54856)
- Show Z-Wave device config link for controller node (@balloob - frontend#54859)
- Update pnpm to v12.11.2 (@renovatebot - frontend#54869)
- Update dependency @types/node to v24.19.2 (@renovatebot - frontend#54868)
- Localize live indicator on logs page (@erwindouna - frontend#54858)
- Add sticky group headers to data tables (@timmo001 - frontend#54848)
- Fix values and time picker in the adjust statistic dialog (@balloob - frontend#54876)
- Use i18n contexts in the language, country, currency and trace pickers (@MindFreeze - frontend#54877)
- Update dependency prettier to v3.9.10 (@renovatebot - frontend#54879)
- Use the snap bottom sheet for the automation sidebar (@piitaya - frontend#54664)
- Location visibility condition: match zones by target - entity, label (@wedsa5 - frontend#54679)
- Keep pending target temperature when entity state updates (@wendevlin - frontend#54854)
- Use contexts in state-display (@timmo001 - frontend#54883)
- Treat contenteditable elements as text input for keyboard shortcuts (@eric-benjamin - frontend#53491)
- Add settings button to AI task entity pickers (@piitaya - frontend#54886)
- Fix todo item input clearing (@charishma2k06 - frontend#54318)
- Lower description search weight in automation add-element search (@Umair-Sattar - frontend#53751)
- Run tile card icon hold and double tap actions when icon tap is none (@timmo001 - frontend#54889)
- Use the entity name formatter for all entity names (@piitaya - frontend#54891)
- Use unit of measurement selector and add device class to input number helper (@jbouwh - frontend#54785)
- Add Edit in YAML for choose options in the automation editor (@oneseventhree - frontend#53327)
- Expand badge shorthand and drop empty entries when loading a dashboard (@piitaya - frontend#54651)
- Link each run in the activity details to its own trace (@Xyolyp - frontend#54592)
- Fade light color features when the light is off (@piitaya - frontend#54913)
- Draw the onboarding home marker like the home zone (@maartenla - frontend#54903)
- Add accessible names to icon-only badges and interactive tile icons (@timmo001 - frontend#54907)
- Fix hue scrubber zoom for features sharing the card width (@piitaya - frontend#54917)
- Follow up on choose option YAML editing (@MindFreeze - frontend#54900)
- Show the color feature for light group members in color mode (@piitaya - frontend#54918)
- Add live log dialog to integration page (@erwindouna - frontend#54809)
- Fix media control card cut off for off players without turn on (@elupus - frontend#54904)
- Use rounded squares for avatars and entity pictures (@maartenla - frontend#54902)
- Guard automation row notes against non-string YAML values (@wendevlin - frontend#54911)
- Use ha-section-title for the picker sticky title and share its logic (@wendevlin - frontend#54916)
- Use light color scheme for themes with a light mode (@SeoFood - frontend#54898)
- Keep data table search, sorting and grouping in the URL, starting with the Marketplace (@timmo001 - frontend#54912)
- Explain debug logging banner and make disable the main action (@timmo001 - frontend#54922)
- Guard script field descriptions against non-string YAML values (@SeoFood - frontend#54924)
- Reduce stale period for pull requests to 60 days (@MindFreeze - frontend#54926)
- Update dependency maplibre-gl to v6.14.0 (@renovatebot - frontend#54928)
- Update dependency @vvo/tzdb to v6.201.1 (@renovatebot - frontend#54938)
- Hide divider above the first section row of an entities card (@piitaya - frontend#54929)
- Prevent stale Energy refreshes from changing the selected period (@eliaslecomte - frontend#54741)
- Add default decision entity preferences to AI Task settings (@balloobbot - frontend#54728)
- Add buttons or slider style to target temperature card feature (@timmo001 - frontend#54923)
- Reject invalid static prices in the energy source dialogs (@MindFreeze - frontend#54940)
- Add dialog to delete statistics in a time range (@balloob - frontend#54875)
- Use contexts in the add-on, config entry and service pickers (@MindFreeze - frontend#54942)
- Use image select boxes for buttons or slider feature styles (@timmo001 - frontend#54947)
- Use contexts in small standalone components (@MindFreeze - frontend#54943)
- Fix validate-on-blur in the change password card and enter code dialog (@MindFreeze - frontend#54945)
- Fix number selector validation on blur (@MindFreeze - frontend#54944)
- Fix map activity for zones with duplicate names (@ldeutschland - frontend#54908)
- Fix tile zone icons for zones with duplicate names (@ldeutschland - frontend#54909)
- Update vitest monorepo to v5.0.4 (@renovatebot - frontend#54953)
- Show a toast instead of a dialog after reloading an integration entry (@marcinbauer-ohf - frontend#54954)
- Add gap between backup upload percentage and spinner (@KapJI - frontend#54951)
- Explain when HTTPS or the microphone blocks a feature (@timmo001 - frontend#54948)
- Show upload progress in the backup progress bar (@KapJI - frontend#54956)
- Update dependency eslint-plugin-lit-a11y to v5.1.2 (@renovatebot - frontend#54966)
- Update dependency marked to v18.1.1 (@renovatebot - frontend#54967)
- Show the punctuation warning when opening a conversation trigger (@MindFreeze - frontend#54950)
- Explain blocked updates in the update dialog during a backup (@timmo001 - frontend#54955)
- Update dependency typescript-eslint to v8.71.2 (@renovatebot - frontend#54979)
- Only list the backup’s own locations in the upload progress (@KapJI - frontend#54970)
- Show the back button when the statistics graph card opens the history (@Bascht74 - frontend#54976)
- Show translated overview labels in ObjectSelector (@gjohansson-ST - frontend#54864)
- Fix energy setup wizard skipping the individual devices step (@Jochen754 - frontend#54977)
- Use separate translation keys for device and service info headings (@oyvindwe - frontend#54981)
- Fix tabs toolbar-icon slot width (@karwosts - frontend#54991)
- Update dependency @versatiles/style to v6.4.1 (@renovatebot - frontend#54994)
- Update pnpm to v12.13.0 (@renovatebot - frontend#54992)
- Update links to the new contributors website (@frenck - frontend#54995)
- Update dependency @rspack/core to v2.2.9 (@renovatebot - frontend#54982)
- Update dependency eslint-plugin-lit-a11y to v5.1.3 (@renovatebot - frontend#54997)
- Add Debug console to the Tools panel (@frenck - frontend#54937)
- Stop numeric data table headers from jumping on hover (@DaanVervacke - frontend#54999)
- Update Node.js to v24.22.0 (@renovatebot - frontend#55001)
- Update dependency @html-eslint/eslint-plugin to v0.67.0 (@renovatebot - frontend#55010)
- Update Playwright (@renovatebot - frontend#55009)
- Add LoRaWAN connectivity panel (@balloob - frontend#54998)
- Use server timezone for demo statistics calendar buckets (@eliaslecomte - frontend#54893)
- Update dependency @types/chromecast-caf-receiver to v6.0.27 (@renovatebot - frontend#55015)
- Localize control-number-button aria label (@karwosts - frontend#55026)
- Handle null cast device capabilities (@MindFreeze - frontend#55025)
- Improve climate control accessibility (@karwosts - frontend#55024)
- Update dependency jsdom to v30.1.3 (@renovatebot - frontend#55028)
- Fix Sankey label sizes after zooming (@MindFreeze - frontend#55023)
- Fix chart legend squeezed when legend items arrive after setup (@MindFreeze - frontend#55019)
- Update pnpm to v12.14.0 (@renovatebot - frontend#55029)
- Add selection mode with bulk delete to the dashboards page (@DaanVervacke - frontend#54993)
- Add selection mode with bulk uninstall to the Marketplace installed tab (@DaanVervacke - frontend#54996)
- Add selection mode with bulk delete to the blueprints page (@DaanVervacke - frontend#54984)
- Set up Music Assistant through its config flow in the ESPHome wizard (@MindFreeze - frontend#54973)
- Show the local apps folder toggle in backup settings (@kleinc80 - frontend#54983)
- Add visual editor for the alert card and add clear color (@timmo001 - frontend#54880)
- Update vitest monorepo to v5.0.5 (@renovatebot - frontend#55033)
- Add selection mode with bulk delete to the labels page (@DaanVervacke - frontend#54987)
- Update home-assistant/actions digest to cd6f363 (@renovatebot - frontend#55042)
- Update actions/download-artifact action to v8.0.2 (@renovatebot - frontend#55043)
- Update actions/upload-artifact action to v7.0.2 (@renovatebot - frontend#55046)
- Apply thermostat accessibility fixes to humidifier and water_heater (@karwosts - frontend#55044)
- Present hidden select menu label to screen readers (@karwosts - frontend#55032)
- Update fullcalendar monorepo to v6.1.22 (@renovatebot - frontend#55047)
- Update github/codeql-action action to v4.38.3 (@renovatebot - frontend#55048)
- Add alert badge (@timmo001 - frontend#54881)
- Update actions/setup-node action to v7.1.0 (@renovatebot - frontend#55052)
- Fix inconsistent heading spacing on the integrations dashboard (@DaanVervacke - frontend#55037)
- Fix overlapping horizontal Sankey labels at narrow widths (@MindFreeze - frontend#55021)
- Add group role and aria labelling to thermostat card (@karwosts - frontend#55045)
- Update dependency js-yaml to v5.5.0 (@renovatebot - frontend#55053)
- Fix map marker placement for zones with duplicate names (@ldeutschland - frontend#54895)
- Merge final assistant response into streamed chat text instead of replacing it (@ChrisMenning - frontend#54311)
- Gate welcome banner and dismiss save on loaded config (@CRYPTONIKAV - frontend#54825)
- Fix entity pictures in automation targets (@charishma2k06 - frontend#54925)
- Do not start timers or keep subscriptions after an element is removed (@maartenla - frontend#55056)
- Fix view tab ignored after navigating to a hidden view (@io39 - frontend#54613)
- Hide skipped updates in the Marketplace by default (@timmo001 - frontend#55061)
- Drop hass from error-log-card (@timmo001 - frontend#55062)
- Update FullCalendar to v7 (@MindFreeze - frontend#54965)
- Show offline serial ports and skip pairing in the ESPHome serial setup (@MindFreeze - frontend#55050)
- Remove the unreachable scroll-to-top branch from the view tab handler (@maartenla - frontend#55067)
- Remove cast row listeners and the Z-Wave S2 subscription on disconnect (@maartenla - frontend#55055)
- Update dependency temporal-polyfill to v1.0.6 (@renovatebot - frontend#55069)
- Let the history and activity panels compose their source filters (@piitaya - frontend#55063)
- Surface people in the automation target picker (@marcinbauer-ohf - frontend#55066)
- Add a triggered by filter to the activity panel (@piitaya - frontend#55064)
- Update dependency fullcalendar to v7.1.3 (@renovatebot - frontend#55068)
- Add variant to ha-checkbox (@piitaya - frontend#55071)
- Use warning color in the Marketplace and debug console warnings (@piitaya - frontend#55072)
- Show skipped updates on the Marketplace repository page (@timmo001 - frontend#55074)
- Show Preparing while an update has not started installing yet (@tzagim - frontend#55008)
- Use the neutral color for the cancel button in confirmation dialogs (@piitaya - frontend#55075)
- Fetch the flow after subscribing to progress events (@raman325 - frontend#54866)
- Hide empty related sections and zero-count quick links on device and area pages (@marcinbauer-ohf - frontend#55083)
- Update dependency eslint to v10.13.0 (@renovatebot - frontend#55084)
- Keep analog clock hands in sync after the page becomes visible again (@shazilkhan - frontend#54957)
- Add label position option to the history graph card (@MindFreeze - frontend#55081)
- Hide duplicate integration name on discovery cards (@balloob - frontend#55090)
- Use a fast version of getting backup state for restart-dialog (@karwosts - frontend#55085)
- Fix condition descriptions of if actions in trace step details (@SeoFood - frontend#54910)
- Fix graph drawn outside the card after a resize during its animation (@GiannisG1 - frontend#55014)
- Allow themes on all panels (@Jump-333 - frontend#54801)
- Revert “Use the neutral color for the cancel button in confirmation dialogs” (@piitaya - frontend#55094)
- Show Supervisor logs in a dialog from app errors (@erwindouna - frontend#55059)
- Clip control select option labels instead of using an ellipsis (@timmo001 - frontend#55095)
- Use DialogMixin for the logs dialog (@timmo001 - frontend#55096)
- Update dependency @versatiles/style to v7 (@renovatebot - frontend#55060)
- Restore FormatJS Intl polyfills on browsers without BigInt (@bramkragten - frontend#55070)
- Stop the config panel from stacking cloud status polls (@maartenla - frontend#55054)
- Update dependency @home-assistant/webawesome to v3.14.0-ha.1 (@renovatebot - frontend#55101)
- Keep the start of LTR control select labels visible in RTL (@timmo001 - frontend#55100)
- Show context around log search matches and open app update logs filtered to the app (@timmo001 - frontend#55097)
- Filter long media browser folders locally when the source cannot search (@carcabot - frontend#54969)
- Use WA accessible-label for controls without a visible label (@wendevlin - frontend#55104)
- Fix the QR scanner on browsers without a native BarcodeDetector (@bramkragten - frontend#55111)
- Remove the ui.common wildcard from LocalizeKeys (@bramkragten - frontend#55109)
- Declare Babel plugins the build loads by name (@bramkragten - frontend#55110)
- Pass the grouping through the Marketplace My redirects (@timmo001 - frontend#55113)
- Fix gulp stops watching for translation changes (@karwosts - frontend#55114)
- Add accessibleLabel to date & time entity rows (@karwosts - frontend#55127)
- Add query params to the helpers table (@timmo001 - frontend#55106)
- Replace dropdowns for media player source and sound mode with pickers (@eskres - frontend#54870)
- Show energy compare banner on the energy Summary view (@MindFreeze - frontend#55129)
- Fix: bulk label selection for devices (@alexanderscrimgeour - frontend#55112)
- Add display and action options to the alert card and badge (@timmo001 - frontend#54884)
- Add recently used items to the automation add TCA dialog (@wendevlin - frontend#54958)
- Show narrow month calendar dots side by side again (@MindFreeze - frontend#55058)
- Add a frontend skill for URL query params (@timmo001 - frontend#55115)
- Add query params to the users table (@timmo001 - frontend#55135)
- Use a single paste action for dashboard sections (@piitaya - frontend#55140)
- Scroll picker lists with 12 or fewer items to the selected item when they open (@eskres - frontend#55128)
- Don’t reload the frontend for an update while a flow dialog is open (@balloob - frontend#55089)
- Update dependency maplibre-gl to v6.15.0 (@renovatebot - frontend#55146)
- Add toast messages when a card is cut or copied (@JamesFromIT - frontend#55126)
- Improve paste in automation add Element dialog (@wendevlin - frontend#55145)
- Fix FullCalendar layout and time zone on older Chromium (@MindFreeze - frontend#55139)
- Redesign integration cards with a compact layout (@wendevlin - frontend#55147)
- Raise legacy browser floors to Chrome 67 and Safari/iOS 15 (@maartenla - frontend#55138)
- Restore editing trigger ID from the UI (@jpbede - frontend#55124)
- Add device section strategy (@piitaya - frontend#54930)
- Refactor media player more-info (@wendevlin - frontend#55152)
- Add conditional inputs to blueprints (@piitaya - frontend#55116)
- Add Bluetooth toggling to the ESPHome setup wizard (@MindFreeze - frontend#55148)
- Close automation and script editor sidebar with Escape (@nielsrowinbik - frontend#55157)
- Guard missing entities in group row and wake word step (@bramkragten - frontend#55159)
- Show upcoming events in the calendar more-info dialog (@elupus - frontend#55013)
- Automation editor: support for negated state trigger (@Skaronator - frontend#27704)
- Stop the snap bottom sheet from blocking page scrolling (@bramkragten - frontend#55108)
- Drag to zoom charts and add a zoom slider (@MindFreeze - frontend#55132)
- Translate the code editor search and go to line panels (@pradeeppeddineni - frontend#55162)
- Improve screen reader support on the integrations dashboard (@wendevlin - frontend#55164)
- Filter the logs page by integration (@erwindouna - frontend#54815)
- Link the ESPHome wizard straight to the ZWA-2 page and call the device a device (@MindFreeze - frontend#55163)
- Forward hass to the card from a setter instead of the update cycle (@maartenla - frontend#55149)
- Show table params from links without storing them (@timmo001 - frontend#55144)
- Support exclude block in targets (@jpbede - frontend#55051)
- Add exclusions to the target picker (@jpbede - frontend#55091)
- Allow to exclude from the target details (@jpbede - frontend#55123)
- Show landing page errors from Supervisor logs and failed updates (@bramkragten - frontend#55158)
- Simplify card resize editor (@piitaya - frontend#55120)
- Add problems to the Maintenance Dashboard (@rokam - frontend#54743)
- Add My links for the LoRaWAN panel (@maartenla - frontend#55168)
- Add query params to the voice assistants expose table (@timmo001 - frontend#55175)
- Add query params to the Bluetooth monitor tables (@timmo001 - frontend#55174)
- Compare helpers and Marketplace filter lists regardless of order (@timmo001 - frontend#55169)
- Detect reordered keys in the automation and script YAML editors (@pradeeppeddineni - frontend#55161)
- Update dependency core-js-compat to v3.51.0 (@renovatebot - frontend#55179)
- Add query params to the labels table (@timmo001 - frontend#55134)
- Add query params to the dashboards and dashboard resources tables (@timmo001 - frontend#55136)
- Add query params to the backups table (@timmo001 - frontend#55137)
- Add badge cut/copy toasts (@wendevlin - frontend#55177)
- Keep the logs page provider, search and raw view in the URL (@timmo001 - frontend#55098)
- Tabs subpage improve tabs a11y (@wendevlin - frontend#55165)
- Keep URL params on their own page when a page reconnects or redirects (@timmo001 - frontend#55176)
- Fix success line through disabled conditions in trace graph (@marcinbauer-ohf - frontend#55182)
- Update dependency browserslist to v4.29.4 (@renovatebot - frontend#55184)
- Update dependency core-js to v3.51.0 (@renovatebot - frontend#55180)
- Make data tables usable with keyboard and screen reader (@wendevlin - frontend#55181)
- Add query params to the scenes table (@timmo001 - frontend#55173)
- Add paste bar to add card/badges (@wendevlin - frontend#55183)
- Add query params to the scripts table (@timmo001 - frontend#55172)
- Polish chart zoom on timelines and the zoom slider (@marcinbauer-ohf - frontend#55178)
- Don’t cache signed URLs in the service worker (@Gudui - frontend#55079)
- Add query params to the blueprints table (@timmo001 - frontend#55166)
- Show integration brand icons in the LoRaWAN devices table (@balloob - frontend#55187)
- Allow picture and source elements in markdown (@masonliiu - frontend#55155)
- Make the max sections setting of sections views easier to understand (@piitaya - frontend#54962)
- Add generic action bar and paste bar components (@wendevlin - frontend#55189)
- Add query params to the tags table (@timmo001 - frontend#55133)
- Update dependency barcode-detector to v3.2.3 (@renovatebot - frontend#55197)
- Add query params to the devices table (@timmo001 - frontend#55107)
- Add query params to the hardware table (@timmo001 - frontend#55193)
- Rtl automation trace fix (@yosilevy - frontend#54841)
- Update dependency typescript-eslint to v8.72.0 (@renovatebot - frontend#55199)
- Add query params to the DHCP, SSDP and Zeroconf tables (@timmo001 - frontend#55195)
- Update dependency @codemirror/view to v6.43.15 (@renovatebot - frontend#55201)
- Add two way audio support (frontend) (@starkillerOG - frontend#54660)
- Update dependency intl-messageformat to v12.1.4 (@renovatebot - frontend#55207)
- Update formatjs (@renovatebot - frontend#55208)
- Update Node.js to v24.22.1 (@renovatebot - frontend#55210)
- Show device instead of unknown entity for device actions in trace (@pradeeppeddineni - frontend#55200)
- Add query params to the ZHA groups table (@timmo001 - frontend#55194)
- Add query params to the application credentials table (@timmo001 - frontend#55143)
- Add translation_key filter to entity selectors (@DaanVervacke - frontend#55102)
- Energy usage graph: don’t combine grid sources over a negligible value (@MindFreeze - frontend#55214)
- Translate show more items in trace timeline (@pradeeppeddineni - frontend#55206)
- Add query params to the statistics table (@timmo001 - frontend#55219)
- Drop stale related lookups in the data table filters (@timmo001 - frontend#55218)
- Add query params to the Z-Wave provisioned devices table (@timmo001 - frontend#55216)
- Add query params to the infrared and radio frequency devices tables (@timmo001 - frontend#55217)
- Show unattributed grid export in energy distribution card (@MindFreeze - frontend#55213)
- Add query params to the automations table (@timmo001 - frontend#55171)
- Update ESPHome setup wizard audio and serial copy (@MindFreeze - frontend#55212)
- Apply UX feedback to target picker exclusions (@jpbede - frontend#55198)
- Find ESPHome setup switches through the device wizard (@MindFreeze - frontend#55211)
- Update dependency xss to v1.0.16 (@renovatebot - frontend#55226)
- Refresh the target picker when its filters change (@piitaya - frontend#55186)
- Open the add integration dialog for brand links (@timmo001 - frontend#55227)
- Add query params to the entities table (@timmo001 - frontend#55105)
- Remove “Perform action” prefix from automation action rows (@marcinbauer-ohf - frontend#55228)
- Show section backgrounds in the sections view sidebar (@piitaya - frontend#55234)
- Add a preview and a clearer width setting to the section editor (@piitaya - frontend#54961)
- Allow picking several categories in the category filter (@timmo001 - frontend#55222)
- Use the Sendspin mark and check badges in the ESPHome setup wizard (@MindFreeze - frontend#55239)
- Show bridged devices on the Matter network map (@mib1185 - frontend#54812)
- Keep the integrations dashboard and integration page search in the URL (@timmo001 - frontend#55225)
- Use the offset duration mode for sun and calendar offsets (@piitaya - frontend#54703)
- Call the Z-Wave adapter a device in the ESPHome setup wizard (@MindFreeze - frontend#55196)
- Update device class constants (@github-actions - frontend#55250)
- Update dependency vite to v8.3.5 (@renovatebot - frontend#55253)
- Enlarge the Sendspin mark in the ESPHome setup wizard (@MindFreeze - frontend#55252)
- Update pnpm to v12.15.0 (@renovatebot - frontend#55261)
- Update dependency @lezer/common to v1.5.4 (@renovatebot - frontend#55265)
- Update release-drafter/release-drafter action to v7.10.0 (@renovatebot - frontend#55280)
- Update github/codeql-action action to v4.39.0 (@renovatebot - frontend#55279)
- Update dependency @types/chromecast-caf-receiver to v7 (@renovatebot - frontend#55274)
- Add AI Task evaluate types and method (@balloob - frontend#55281)
- Fix Enter on Android moving focus away from todo list add item input (@pradeeppeddineni - frontend#55256)
- Add action history page to tools (@joostlek - frontend#55078)
- Scroll the Assist chat to the newest message (@cpruijsen - frontend#55240)
- Revert “Add translation_key filter to entity selectors” (@timmo001 - frontend#55282)
- Add Paste to the dashboard card menu (@maartenla - frontend#55215)
- Add copy as YAML button to action history detail dialog (@joostlek - frontend#55284)
- Add Date card (@pcan08 - frontend#52994)
- Share one log viewer between the live log dialog and the Z-Wave logs page (@maartenla - frontend#55057)
- Fix cast receiver types for chromecast-caf-receiver 7 (@MindFreeze - frontend#55288)
- Show progress and result when checking for app updates (@craig-b - frontend#55205)
- Add ripple and haptic feedback to control number buttons (@dschace - frontend#55156)
- Fix extra unit-less statistics chart in history graphs (@MindFreeze - frontend#55268)
- Name individual energy devices after their device (@MindFreeze - frontend#55287)
- Skip restored update entities when refreshing updates (@balloob - frontend#55267)
- Highlight the pasted card (@maartenla - frontend#55229)
- Remove automatic decision toggle from AI task settings (@balloob - frontend#55289)
- Update entity IDs when assigning an area after setting up an integration (@alexblanck - frontend#55259)
- Apply a restored data table search before the first render (@Max-src - frontend#55251)
- Fix see-through corners on ha-label background (@farmio - frontend#55290)
- Add perform again button to action history detail dialog (@joostlek - frontend#55285)
- Improve a11y for tile cards and area light buttons (@wendevlin - frontend#55192)
- Allow to duplicate some helpers (@silamon - frontend#55286)
- Keep a filter written while a dialog closes in the URL (@timmo001 - frontend#55224)
- Drop hass from the blueprint picker, blueprint filter and related items (@MindFreeze - frontend#55292)
- Drop hass from the user pickers (@MindFreeze - frontend#55294)
- Use dedicated websocket commands for app ingress sessions (@agners - frontend#54695)
- Add a dialog to choose the type of section to create (@piitaya - frontend#55150)
- Add an entities section strategy (@piitaya - frontend#55190)
- Update dependency @babel/runtime to v8.0.8 (@renovatebot - frontend#55295)
- Update dependency @babel/core to v8.0.9 (@renovatebot - frontend#55299)
- Drop hass from the categories filter (@MindFreeze - frontend#55317)
- Add “open in new tab” to automation trace and editor menus (@felixschndr - frontend#55264)
- Update dependency @lokalise/node-api to v17 (@renovatebot - frontend#55321)
- Keep the calendar add button above the safe area (@maartenla - frontend#55298)
- Share a Matter device through the companion app from the share dialog (@RaHehl - frontend#54364)
- Add home total option to energy dashboard (@Jump-333 - frontend#54821)
- Drop hass from the snowflakes overlay (@MindFreeze - frontend#55309)
- Drop hass from the join media players dialog (@MindFreeze - frontend#55310)
- Re-render context-based brand images when the brands token arrives (@MindFreeze - frontend#55318)
- Drop hass from state-info (@MindFreeze - frontend#55301)
- Drop hass from the suggest with AI button (@MindFreeze - frontend#55314)
- Drop hass from the file selector and media upload button (@MindFreeze - frontend#55304)
- Fix media browser search field overflowing off the left edge (@vulinh1704 - frontend#55316)
- Drop hass from the replace device dialog (@MindFreeze - frontend#55312)
- UI/YAML switcher keyboard combination (@Jump-333 - frontend#55035)
- Refactor add automation element dialog (@wendevlin - frontend#55233)
- Drop hass from the entity state pickers (@MindFreeze - frontend#55313)
- Drop hass from the floor pickers (@MindFreeze - frontend#55311)
- Drop hass from the speech engine pickers (@MindFreeze - frontend#55300)
- Drop hass from the media browser thumbnail (@MindFreeze - frontend#55305)
- Drop hass from the entity attribute and state content pickers (@MindFreeze - frontend#55307)
- Drop hass from the label pickers (@MindFreeze - frontend#55303)
- Drop hass from the assist pipeline and conversation agent pickers (@MindFreeze - frontend#55306)
- Drop hass from the mount, serial port, push and vacuum segment components (@MindFreeze - frontend#55308)
- Add actions to data table group headers (@timmo001 - frontend#55235)
- Update dependency xss to v1.0.17 (@renovatebot - frontend#55354)
- Drop hass from the object selector (@MindFreeze - frontend#55315)
- Drop hass from the device automation pickers (@MindFreeze - frontend#55302)
- Drop hass from the repairs, updates and discovered devices cards (@maartenla - frontend#55335)
- Drop hass from the map card and the trend graph card feature (@maartenla - frontend#55332)
- Drop hass from the alarm panel, media control and weather forecast cards (@maartenla - frontend#55330)
- Drop hass from the area controls card feature (@maartenla - frontend#55333)
- Drop hass from the todo list and shopping list cards (@maartenla - frontend#55331)
- Drop hass from the clock, glance and other simple cards (@maartenla - frontend#54901)
- Rename “Use device name” to “Main entity of the device” (@piitaya - frontend#55320)
- Fit the distribution card legend to two rows (@MindFreeze - frontend#55350)
- Drop hass from the button, gauge, light, plant, picture and markdown cards (@maartenla - frontend#55329)
- Fit chart legends to two rows (@MindFreeze - frontend#55351)
- Edit categories from their data table group headers (@timmo001 - frontend#55236)
- Drop hass from the shortcut card and the navigation path controller (@maartenla - frontend#55334)
- Refit legends when the More button changes width (@MindFreeze - frontend#55357)
- Fix helper text spacing in location selector (@karwosts - frontend#55349)
- Use a non-breaking space between values and units (@piitaya - frontend#55345)
- Add formatNumberWithUnit helper (@piitaya - frontend#55346)
- Drop hass from the statistic pickers (@MindFreeze - frontend#55372)
- Add Replace for automation triggers, conditions, and actions (@nielsrowinbik - frontend#55131)
- Add bulk expose to voice assistants on the entities table (@jpbede - frontend#55204)
- Show custom trigger IDs in the “Triggered by” condition (@shazilkhan - frontend#55086)
- Update dependency @home-assistant/webawesome to v3.14.0-ha.2 (@renovatebot - frontend#55375)
- Translate errors when describing triggers, conditions and actions (@pradeeppeddineni - frontend#55249)
- Add color setting to sensor card (@Lackmake - frontend#55364)
- Update behavior of continue_on_timeout toggle (@karwosts - frontend#54964)
- Drop hass from the action state cards (@MindFreeze - frontend#55371)
- Move manual event trigger into the Event category under Generic (@nielsrowinbik - frontend#55348)
- Drop hass from the category group header menu (@MindFreeze - frontend#55374)
- Select and drag picture elements in the card editor preview (@RaHehl - frontend#55263)
- Drop hass from the display state cards (@MindFreeze - frontend#55368)
- Drop hass from the entity name picker (@MindFreeze - frontend#55367)
- Drop hass from the floor selector (@MindFreeze - frontend#55369)
- Drop hass from the TTS media browser (@MindFreeze - frontend#55370)
- Drop hass from the navigation picker (@MindFreeze - frontend#55373)
- Fetch the index fresh on navigation and harden the service worker update flow (@maartenla - frontend#54790)
- Remove unused dynamic-to-generic group move from the automation picker (@MindFreeze - frontend#55376)
- Refresh the todo card at browser midnight and test the subscription controller (@maartenla - frontend#55356)
- Offer to create an energy sensor for power-only energy devices (@MindFreeze - frontend#55353)
- Add convert to manual section action (@piitaya - frontend#55377)
- Rename to child devices (@silamon - frontend#55391)
- Drop hass from the history charts (@MindFreeze - frontend#55386)
- Drop hass from the area controls picker (@MindFreeze - frontend#55379)
- Speed up the log viewer tests with a smaller line limit (@MindFreeze - frontend#55392)
- Drop hass from the category picker (@MindFreeze - frontend#55378)
- Drop hass from the media browser and its dialogs (@MindFreeze - frontend#55385)
- Drop hass from the entity selector (@MindFreeze - frontend#55380)
- Drop hass from the target picker item rows (@MindFreeze - frontend#55383)
- Drop hass from the device pickers (@MindFreeze - frontend#55384)
- Offer energy sensors from power for solar and home sources (@MindFreeze - frontend#55358)
- Offer energy sensors from power for grid and battery sources (@MindFreeze - frontend#55359)
- Remove unused ha-list imports and migrate gallery off ha-list (@wendevlin - frontend#55393)
- Show entity pictures in the target picker (@wendevlin - frontend#55387)
- Offer gas and water sensors from flow rates (@MindFreeze - frontend#55360)
- Add Zigbee Green Power support to ZHA (@puddly - frontend#55322)
- Animate energy distribution flow dots on the compositor (@joaophi - frontend#54872)
- Call the energy power sensor derived, not a helper (@MindFreeze - frontend#55395)
- Start logs page filters collapsed (@erwindouna - frontend#55398)
- Keep entity selector data while it refreshes after a reconnect (@MindFreeze - frontend#55396)
- Highlight the device in the ZHA network visualization (@MindFreeze - frontend#55394)
- Keep network graph labels when zooming during their fade in (@MindFreeze - frontend#55397)
- Show the helper under the label in checkbox lists (@piitaya - frontend#55400)
- Fit gauge card to the card height in sections view (@pradeeppeddineni - frontend#55260)
- Load custom modules after the scoped registry polyfill (@pszypowicz - frontend#54444)
- Keep fitted neighbors clear of the network graph controls (@MindFreeze - frontend#55405)
- Add device to dashboard from the device page (@piitaya - frontend#55381)
- Rename the MCP card URL labels (@piitaya - frontend#55401)
- Show entity pictures in the add automation element target tree (@wendevlin - frontend#55407)
- Update dependency maplibre-gl to v6.16.0 (@renovatebot - frontend#55406)
- Update dependency home-assistant-js-websocket to v9.8.0 (@renovatebot - frontend#55389)
- Tolerate missing rows and invalid visibility entries (@MindFreeze - frontend#55408)
- Keep the device and area page headers fixed while scrolling (@bramkragten - frontend#55409)
- Keep the section row divider under the entities card header (@piitaya - frontend#55415)
- Show multi-select chips in a field with an inline add button (@piitaya - frontend#55416)
- Preselect the only allowed unit also in an optional unit selector (@Xyolyp - frontend#55417)
- Name maintenance problem tiles after the device and the entity (@maartenla - frontend#55420)
- Fix duplicated hidden areas when reordering areas in the areas dashboard editor (@reefbarman - frontend#55424)
- Ignore YAML dashboard update event on first load (@MindFreeze - frontend#55430)
- Use the state color by default in alert cards and badges (@piitaya - frontend#55436)
- Wrap long text in debug tool and network discovery rows (@wendevlin - frontend#55438)
- Fix the Marketplace search field overlapping the top bar icons on narrow screens (@timmo001 - frontend#55439)
- Name new disk mounts after the partition’s volume label (@MindFreeze - frontend#55441)
- Show a toast with a link to the dashboard after adding to it (@piitaya - frontend#55444)
- Load the legacy Intl polyfills once per page and bundle PluralRules with its data (@maartenla - frontend#55452)
- Replace hide-zoom-controls with a zoom slider mode on charts (@piitaya - frontend#55468)
- Wrap long title in YAML-only integration dialog (@DaanVervacke - frontend#55481)
- Move the panel background stacking context off partial-panel-resolver (@maartenla - frontend#55485)
- Add translation for the Marketplace panel title (@piitaya - frontend#55486)
- Add embeddable dashboard card components to the demo (@balloob - frontend#54348)
- Show a skeleton while the live log loads (@erwindouna - frontend#55443)
- Fix network graph button spacing (@jpbede - frontend#55501)
- Stretch chip container to fill host so outline matches host shape (@joostlek - frontend#55510)
- Link the MCP integration pages to the AI settings (@balloob - frontend#55515)
- Fix onboarding using US customary units when the location is detected (@jimjaeger - frontend#55535)
- Fix date-only attribute formatting to not shift into other days (@karwosts - frontend#55536)
- Fix media progress slider on Chromium < 125 (@tmmueller - frontend#55539)
- Seek on slider change in the media control card (@tmmueller - frontend#55542)
- Shorten the Marketplace description on the settings page (@timmo001 - frontend#55549)
- Use generic picker for install another version (@timmo001 - frontend#55552)
- Limit the more info activity to the 100 most recent entries (@piitaya - frontend#55553)
- Refactor bulk delete labels (@wendevlin - frontend#55555)
- Fix picker rows missing the first click after scrolling (@wendevlin - frontend#55556)
- Show the area first in integration device rows (@piitaya - frontend#55557)
- Add access risk to the Marketplace warning (@zweckj - frontend#55559)
- Fix README images and links with a relative path in the Marketplace (@alexhass - frontend#55525)
- Wrap long descriptions in the entity settings (@wendevlin - frontend#55590)
- Add an option to include pre-releases in Marketplace repositories (@piitaya - frontend#55567)
- Let core work out what target exclusions take out (@jpbede - frontend#55585)
- Stop recomputing active system domains on every state change in the add element dialog (@maartenla - frontend#55586)
- Add descriptive aria-labels to picker filter chips (@wendevlin - frontend#55592)
- Fix the demo embed for the contributors site (@timmo001 - frontend#55596)
- Add Marketplace download source menu item for the China mirrors (@frenck - frontend#55615)