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
17TRACK

A

A. O. Smith
abetterrouteplanner
Abode
Acaia
AccuWeather
  • Remove redundant wind speed translation key from AccuWeather (@frenck - #185277)
  • Use LocationSelector in Accuweather config flow (@tr4nt0r - #188118)
Activity
Actron Air
AdGuard Home
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
aerosmart
Agent DVR
AI Task
AiDot
Air quality
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
Airly
AirNow
Airobot
Airthings
Airthings BLE
AirTouch 4
AirTouch 5
  • [airtouch5] Add support for new intelligent auto AcFanSpeed item (@danzel - #189389)
AirVisual Cloud
AirVisual Pro
Airzone
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
Alert
Alexa Devices
Alpha Bidet Infrared
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)
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
  • Remove redundant wind direction translation name from Ambient Weather Station (@frenck - #185288)
Android Debug Bridge
Anglian Water
Anova
Anthem A/V Receivers
Anthropic
Antifurto365 iAlarm
anylist
AnyList
APC UPS Daemon
Apple iCloud
Apple TV
Apple WeatherKit
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
AriaQ
ariaq
Aseko Pool Live
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
Atag
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
AWS S3
Axis
Axle Energy
Azure Data Explorer
Azure Service Bus
Azure Storage

B

Backblaze B2
Backup
Baidu
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Bang & Olufsen
Bayesian
  • Use TaggedUnion for filter, bayesian, modbus, kwb and opentherm_gw schemas (@balloobbot - #186179)
Belkin WeMo
Besen
Big Ass Fans
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
Bitvis Power Hub
BleBox devices
Blink
Blue Current
Blueprint
Bluesound
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
  • Define the scan interval in bluetooth_le_tracker (@epenet - #187200)
BLUETTI Modbus
Bond
Bosch Alarm
Bosch SHC
Bosch Smart Camera
bosch_shc_camera
Bose SoundTouch
  • Move soundtouch service registration to services module (@epenet - #184643)
Brands
  • Add a Marketplace view to the brands integration (@frenck - #185001)
Broadlink
Brother Printer
Browser
BSB-LAN
BTHome
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
Calendar
Camera
Camera Proxy
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Change device type of a switch
Channels
  • Move channels service registration to services module (@epenet - #184636)
Chef iQ
Chess.com
ChirpStack
Cielo Home
ClickSend TTS
  • Require E.164 phone numbers in twilio_call and clicksend_tts (@frenck - #183993)
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
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
ColorExtractor
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Comelit SimpleHome
Command line
Compensation
Compit
Configuration
Configurator
  • Define public names of the configurator integration (@epenet - #188766)
Control4
Conversation
Cookidoo
CoolMasterNet
Counter
Cover
CPU Speed
Crownstone
Cync

D

Daikin AC
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
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
Demo
Denon AVR Network Receivers
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
Derivative
Deutscher Wetterdienst (DWD) Weather Warnings
  • Add exception translations to Deutscher Wetterdienst (DWD) Weather Warnings (@joostlek - #189028)
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
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
Diagnostics
Discord
DLNA Digital Media Renderer
DLNA Digital Media Server
DNS IP
DOODS - Dedicated Open Object Detection Service
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
DoorBird
Downloader
DROP
Dropbox
Droplet
DSMR Smart Meter
  • Remove redundant frequency translation key from DSMR Smart Meter (@frenck - #185284)
Duco

E

ebusd
ecobee
Ecoforest
ecosmart
Ecovacs
Edifier Infrared
eGauge
Electra Smart
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
ElevenLabs
Elexa Guardian
  • Remove redundant current translation key from Elexa Guardian (@frenck - #185304)
Elgato Light
Elk-M1 Control
Elmax
Elvia
Emulated Hue
  • Use platform action enums when calling platform actions (@epenet - #188071)
Emulated Kasa
Emulated Roku
energieleser
  • Remove redundant water flow rate m3 translation key from energieleser (@frenck - #185293)
Energy
EnergyFlip
EnergyID
EnergyZero
  • Use typed config entry in EnergyZero coordinator (@frenck - #185371)
ENGIE Belgium
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
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 LocationSelector and LanguageSelector in 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
EufyLife
  • Remove redundant weight translation key from EufyLife (@frenck - #185295)
Eurotronic Comet Blue
Event
Everything but the Kitchen Sink
  • Describe the parent device in child device registry entry snapshots (@epenet - #188724)
Everything Smart Home
EZVIZ

F

Fan
Feedreader
FFmpeg
Fibaro
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
Firefly III
FireServiceRota
Firmata
Fish Audio
Fjäråskupan
Flexit
Flexit Nordic (BACnet)
Flic
Flic (legacy)
Flipr
  • Flipr integration removal after company liquidated (@cnico - #187403)
Flo
Flux
  • Use probatio named validators instead of hand-rolled ranges (@frenck - #183815)
Folder
Folder watcher
Foreca
Forecast.Solar
Foscam
  • Move foscam service registration to services module (@epenet - #184622)
Foursquare
Freebox
Fressnapf Tracker
FRITZ!Box Call Monitor
FRITZ!Box Tools
FRITZ!SmartHome
Fronius
Frontier Silicon
Fully Kiosk Browser
  • Import names from their source modules in fully_kiosk (@epenet - #187692)
Fumis

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)
Generic Camera
Generic hygrostat
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
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
Glances
Global Disaster Alert and Coordination System (GDACS)
go2rtc
Goal Zero Yeti
GoodWe Inverter
  • Add battery charge current limit number entity to GoodWe (@davibe - #180296)
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
  • Use platform action enums when calling platform actions (@epenet - #188071)
Google Calendar
Google Cast
Google Drive
Google Gemini
Google Health
Google Maps Travel Time
Google Nest
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
  • Get Google Tasks user info and verify API access in a single executor job (@joostlek - #187951)
Google Translate text-to-speech
  • Add exception translations to Google Translate text-to-speech (@joostlek - #189030)
Google Weather
Google Wifi
Govee Bluetooth
Govee lights local
Grandstream Home
Gree Climate
Gree Infrared
Greencell
Group
Growatt
Guntamatic

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
Happiest Baby Snoo
Hardkernel
Hase iQ
haven
HAVEN IAQ
Hayward Omnilogic
Hegel Amplifier
Helty Flow Cloud
HERE Travel Time
  • Remove redundant translation keys from HERE Travel Time (@frenck - #185317)
Heyu X10
Hikvision
Hisense AEH-W4A1
History
History Stats
Hive
Holiday
Home Assistant Alerts
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
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
Home Assistant frontend
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
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
Home Connect
Homee
HomeKit Bridge
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
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
HomeWizard
Honeywell Lyric
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)
Hot Spring
HP Printer
HTML5 Push Notifications
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
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
  • Use the state attribute enums in conditions/intents/triggers (@epenet - #188176)
Hunter Douglas PowerView
Hunter Hydrawise
Husqvarna Automower
Huum
HVV Departures
Hydro-Québec Peak Events
Hyperion
  • Use probatio named validators instead of hand-rolled ranges (@frenck - #183815)

I

iBeacon Tracker
IDrive e2
IFTTT
igloohome
IKEA Idasen Desk
Image
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
Imou
Indevolt
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
Input button
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
Input select
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
Instituto Português do Mar e Atmosfera (IPMA)
Integral
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
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)
Internet Printing Protocol (IPP)
iotty
Iperf3
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
IronOS
  • Remove redundant uptime translation name from IronOS (@frenck - #185327)
  • Import binary sensor state constants from const in tests (@epenet - #186583)
ista EcoTrend
  • Remove redundant water translation name from ista EcoTrend (@frenck - #185329)
Ituran
iZone

J

Jandy iAquaLink
  • Use typed config entry in Jandy iAquaLink coordinator (@frenck - #185410)
Jellyfin
Jewish Calendar
  • Fix Jewish Calendar default nightfall daily event key (@amitfin - #184725)
JVC Projector

K

KACO Modbus
KACO RS485
Kaleidescape
Keenetic NDMS2 Router
KEF
Keyboard Remote
Keymitt MicroBot Push
  • Move keymitt_ble service registration to services module (@epenet - #184477)
Knocki
KNX
Kodi
Kostal Plenticore Solar Inverter
Kraken
Kuler Sky
KWB Easyfire
  • Use TaggedUnion for filter, bayesian, modbus, kwb and opentherm_gw schemas (@balloobbot - #186179)

L

La Marzocco
LaMetric
Last.fm
laundrify
Lawn mower
LED Infrared
Lektrico Charging Station
  • Import names from their source modules in lektrico (@epenet - #187694)
Leviton Decora Wi-Fi
LG Infrared
LG ThinQ
LG TV via Serial
LG webOS TV
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
Lichess
Liebherr
  • Fix Raise HomeAssistantError for all Liebherr errors in actions (@mettolen - #184163)
LIFX
Light
LinkPlay
Linn / OpenHome
LiteLLM
LIVISI Smart Home
llama.cpp
LLM
Local calendar
Local file
Local to-do
Lock
Logger
Logitech Harmony Hub
LoJack
London Air
LOQED Touch Smart Lock
LoRaWAN
Lunatone
Lupus Electronics LUPUSEC
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
Lutron Homeworks
  • Move homeworks service registration to services module (@epenet - #184457)
Lyngdorf

M

Magic Home
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
Marantz RS-232
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.post action 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
Mealie
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
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
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
Met Éireann
Meteorologisk institutt (Met.no)
Midea
Midea ccm15 AC Controller
Miele
Mijn Farmad Apotheek
MikroTik
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
Minio
Mitsubishi Comfort
Mobile App
Mochad
Modbus
Model Context Protocol
Model Context Protocol Client
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
Monoprice 6-Zone Amplifier
Monoprice Blackbird Matrix Switch
Motionblinds
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
Music Player Daemon (MPD)
MusicCast
my-PV
MyNeomitis
MySensors
myStrom
myUplink
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
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)
Nature Remo
Nederlandse Spoorwegen (NS)
  • Remove redundant coordinator refresh in nederlandse_spoorwegen tests (@erwindouna - #185171)
  • Use MockConfigEntry flow helpers in Nederlandse Spoorwegen tests (@joostlek - #186450)
NeoPool
Ness Alarm
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
Network Configuration
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
Nexia/American Standard/Trane
NextBus
NextDNS
Nibe Heat Pump
Nightscout
Niko Home Control
  • Mark action-exceptions as todo for no-tier integrations (@epenet - #184004)
NINA
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
NMBS
NOAA Tides
Nobø Ecohub
  • Read external device data keys as plain strings in integrations (@epenet - #188152)
Nord Pool
Notifications
Notifications for Android TV / Fire TV
Novy Cooker Hood
NRGkick
ntfy
NuHeat
Nuki Bridge
  • Move nuki service registration to services module (@epenet - #184487)
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
NYT Games

O

OctoPrint
Ohme
OKOK Scale
okokscale
Ollama
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
OneDrive for Business
Onkyo
ONVIF
  • Move onvif service registration to services module (@epenet - #184468)
Open-Meteo
OpenAI
OpenDisplay
  • Use MockConfigEntry flow helpers in OpenDisplay tests (@joostlek - #186453)
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
OpenEVSE
OpenGarage
OpenRGB
OpenRouter
OpenSky Network
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
OpenUV
  • Split user flow init and data submission in openuv config flow tests (@tr4nt0r - #183911)
  • Use LocationSelector in openuv integration (@tr4nt0r - #188819)
OpenWeatherMap
OpenWrt (luci)
OpenWrt (ubus)
OPNsense
Opower
Oral-B
Orvibo
OSO Energy
  • Move osoenergy service registration to services module (@epenet - #184628)
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
Overkiz
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
OwnTone
OwnTracks

P

P1 Monitor
  • Split user flow init and data submission in p1_monitor config flow tests (@tr4nt0r - #183914)
PAJ GPS
Palazzetti
Panasonic Viera
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
  • Use typed config entry in Pentair ScreenLogic coordinator (@frenck - #185399)
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
Philips Hue
Philips Hue BLE
Philips Infrared
Philips TV
Pi-hole
Picnic
Ping (ICMP)
PJLink
Plaato
Plant Monitor
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
Plugwise
PoolSense
Portainer
Powerfox Cloud
Private BLE Device
Probe Plus
Profiler
Prosegur Alarm
  • Move prosegur service registration to services module (@epenet - #184467)
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
Proxmox VE
PrusaLink
Pterodactyl
Pure Energie
  • Split user flow init and data submission in pure_energie config flow tests (@tr4nt0r - #183919)
PurpleAir
  • Split user flow init and data submission in purpleair config flow tests (@tr4nt0r - #184152)
  • Use LocationSelector in purpleair integration (@tr4nt0r - #188859)
Pushbullet
Pushover
  • Move pushover service registration to services module (@epenet - #184640)
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

Q

qBittorrent
Qbus
Qingping
QNAP
QR Code
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Qube heat pump
QVR Pro

R

Rachio
Radio Browser
Radio frequency
Rain Bird
RainbowMiner
Rainforest Eagle
  • Ignore invalid summation values from Rainforest Eagle meters (@pazaan - #186571)
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
Raspberry Pi Power Supply Checker
Raw Serial
ReCollect Waste
  • Split user flow init and data submission in recollect_waste config flow tests (@tr4nt0r - #184169)
Recorder
Recovery mode
  • Define public names of the recovery_mode integration (@epenet - #187222)
Refoss
Rejseplanen
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
Remote Calendar
Remote Python Debugger
Renault
Renson
  • Move renson service registration to services module (@epenet - #184604)
Reolink
Repairs
RESTful
RESTful Command
RFLink
RFXCOM RFXtrx
Rheem EcoNet Products
Ridder HortiMaX Pro
Ridwell
  • Split user flow init and data submission in ridwell config flow tests (@tr4nt0r - #184170)
Ring
Risco
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
Roku
  • Import binary sensor state constants from const in tests (@epenet - #186583)
Rollease Acmeda Automate
RoonLabs music player
Roth Touchline SL
Ruckus
Russound RIO
  • Pass a DeviceInfo to async_get_or_create_device in russound_rio (@epenet - #187574)
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
Samsung Family Hub
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Samsung Infrared
  • Fix Samsung infrared temperature restoration using the saved unit (@abmantis - #185530)
Samsung Smart TV
Samsung SyncThru Printer
Samsung TV via ExLink
Satel Integra
Saunum
Scenes
Schedule
Schlage
  • Move schlage service registration to services module (@epenet - #184459)
  • Add temporary access code support to Schlage (@abpei - #180909)
ScorpionTrack
Scrape
Scripts
Seafile
Search
SEKO PoolDose
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
SenseCAP
Sensibo
Sensor
Sensor.Community
Seven Segments OCR
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
SFR Box
SFTP Storage
Shark IQ
Shell Command
Shelly
Shopping list
Sighthound
  • Bump pillow from 12.3.0 to 13.0.0 (@dependabot - #188252)
Silla Prism
  • Don’t start the Silla Prism user flow with data in tests (@joostlek - #186477)
SilverCrest Infrared
Simple Service Discovery Protocol (SSDP)
SimpliSafe
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
Skybeacon
Slack
Slide Local
SlimProto (Squeezebox players)
SMA Solar
Smappee
Smart Meter B Route
  • Set DeviceInfo fields as attributes in route_b_smart_meter (@epenet - #186596)
Smart Meter Texas
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
SMHI
SMLIGHT SLZB
SMTP
Snapcast
Snooz
Sofar
SolarEdge
SolarEdge Modbus
Solarman
solyx_energy
Sonarr
Sonos
Sony Bravia TV
  • Read external device data keys as plain strings (@epenet - #187299)
  • Add data_description to 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 bronze for the BraviaTV integration (@bieniu - #188529)
  • Set PARALLEL_UPDATES to 1 in the BraviaTV integration (@bieniu - #188882)
  • Raise ServiceValidationError instead of ValueError in the Bravia TV (@bieniu - #189220)
Sony PlayStation 4
Sony Songpal
  • Split user flow init and data submission in songpal config flow tests (@tr4nt0r - #184098)
Soundavo WS66i 6-Zone Amplifier
  • Use typed config entry in Soundavo WS66i 6-Zone Amplifier coordinator (@frenck - #185405)
Specialized Turbo
  • Use MockConfigEntry flow helpers in Specialized Turbo tests (@joostlek - #186456)
Speech-to-text (STT)
Speedtest.net
Spin EV Charger
spin_ble
spinev
Spotify
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
Starlink
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
SteamVR Base Station
steamvr_lighthouse
STIEBEL ELTRON
Stookwijzer
Stream
  • Add exception translations to stream recording (@frenck - #184438)
  • Keep stream recordings monotonic across a worker restart (@alaraun - #188198)
Subaru
Suez Water
Sun
Sunricher DALI
  • Update action-exceptions exemption reason for Sunricher DALI (@epenet - #184053)
  • Add DALI connectivity metadata to integrations (@balloob - #189896)
Sunsynk
Sure Petcare
Swisscom Internet-Box
Switch
SwitchBot Bluetooth
SwitchBot Cloud
Switcher
Synology DSM
System Bridge
System Health
System Log
System monitor
Škoda

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
Tailscale
  • Add OAuth client credentials support to Tailscale (@ra8844 - #176874)
  • Import binary sensor state constants from const in tests (@epenet - #186583)
Tank Utility
Taps Aff
Tasmota
Tautulli
  • Split user flow init and data submission in tautulli config flow tests (@tr4nt0r - #184103)
Tedee
  • Allow a grace period for Tedee bridge auth errors before reauth (@zweckj - #190338)
  • Unregister Tedee webhooks on config entry unload (@zweckj - #190328)
Telegram
  • Remove the deprecated Telegram notify integration (@jbouwh - #188196)
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
  • Remove redundant apparent power translation key from Teleinfo (@frenck - #185343)
Telldus Live
Teltonika
Template
Tesla Fleet
Tesla Powerwall
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
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)
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
Threema
Threshold
Tibber
Time
Timer
Times of the Day
To-do list
Todoist
ToGrill
TOLO Sauna
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
Toon
Total Connect
  • Move totalconnect service registration to services module (@epenet - #184602)
TP-Link Omada
TP-Link Smart Home
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
  • Add the run to automation triggered and script started events (@Xyolyp - #184957)
Tractive
Trafikverket Camera
Trafikverket Train
Trafikverket Weather Station
Trend
  • Add a state attribute enum to trend and remove unused constant (@epenet - #189175)
TRMNL
Tuya
Twilio
  • Add a Twilio client helper and define public names of the twilio integration (@epenet - #187796)
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
  • Add a Twilio client helper and define public names of the twilio integration (@epenet - #187796)
Twinkly
Twitch

U

Ubiquiti airOS
Ukraine Alarm
UniFi Access
  • Remove redundant doorbell translation name from UniFi Access (@frenck - #185349)
UniFi AP
UniFi Network
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
Universal media player
Universal Powerline Bus (UPB)
UpCloud
Update
UPnP/IGD
Uptime
Uptime Kuma
UptimeRobot
Usage Prediction
USB Discovery
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
  • Remove redundant charging translation key from V2C (@frenck - #185351)
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
Valve
Velbus
Velux
Vera
Verisure
Version
VeSync
Victron GX
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
Vitesy
VIZIO SmartCast
VLC media player via Telnet
Vodafone Station
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
Volkszaehler
Volvo

W

Wake on LAN
Wake-word detection
Wallbox
Washington State Department of Transportation (WSDOT)
Water heater
WaterFurnace
Watergate
Watts Vision +
WattTime
WattWächter
Waze Travel Time
Weather
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
WebDAV
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
  • Import names from their source modules in integrations w-z (@epenet - #187791)
Whirlpool Appliances
Whisker
Wiffi
WiiM
WiLight
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
WiZ
WLED
WMS WebControl pro
Workday
World Air Quality Index (WAQI)
Wyoming Protocol

X

Xbox
Xiaomi BLE
Xiaomi Gateway (Aqara)
Xiaomi Home
Xiaomi Weather
Xthings Cloud

Y

Yale Access Bluetooth
Yale Home
Yamaha Network Receivers
  • Move yamaha service registration to services module (@epenet - #184637)
Yardian
  • Move yardian service registration to services module (@epenet - #184484)
Yeelight
YoLink
  • Import names from their source modules in integrations w-z (@epenet - #187791)
YouLess
YouTube

Z

Z-Wave
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
Zero-configuration networking (zeroconf)
ZhongHong
  • Don’t start the ZhongHong user flow with data in tests (@joostlek - #186479)
Zigbee Home Automation
Zinvolt
Zone
ZoneMinder
Zonneplan

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