Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ env:
CACHE_VERSION: 4
UV_CACHE_VERSION: 1
MYPY_CACHE_VERSION: 1
HA_SHORT_VERSION: "2025.8"
HA_SHORT_VERSION: "2025.9"
DEFAULT_PYTHON: "3.13"
ALL_PYTHON_VERSIONS: "['3.13']"
# 10.3 is the oldest supported version
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/conversation/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/conversation",
"integration_type": "system",
"quality_scale": "internal",
"requirements": ["hassil==2.2.3", "home-assistant-intents==2025.6.23"]
"requirements": ["hassil==2.2.3", "home-assistant-intents==2025.7.30"]
}
2 changes: 1 addition & 1 deletion homeassistant/components/miele/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: MieleConfigEntry) -> boo
) from err

# Setup MieleAPI and coordinator for data fetch
coordinator = MieleDataUpdateCoordinator(hass, auth)
coordinator = MieleDataUpdateCoordinator(hass, entry, auth)
await coordinator.async_config_entry_first_refresh()
entry.runtime_data = coordinator

Expand Down
2 changes: 2 additions & 0 deletions homeassistant/components/miele/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,14 @@ class MieleDataUpdateCoordinator(DataUpdateCoordinator[MieleCoordinatorData]):
def __init__(
self,
hass: HomeAssistant,
config_entry: MieleConfigEntry,
api: AsyncConfigEntryAuth,
) -> None:
"""Initialize the Miele data coordinator."""
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=timedelta(seconds=120),
)
Expand Down
4 changes: 2 additions & 2 deletions homeassistant/components/mqtt/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@
},
"data_description": {
"payload_off": "[%key:component::mqtt::config_subentries::device::step::mqtt_platform_config::data_description::payload_off%]",
"payload_on": "[%key:component::mqtt::config_subentries::device::step::mqtt_platform_config::data_description::payload_off%]",
"payload_on": "[%key:component::mqtt::config_subentries::device::step::mqtt_platform_config::data_description::payload_on%]",
"power_command_template": "A [template](https://www.home-assistant.io/docs/configuration/templating/#using-command-templates-with-mqtt) to compose the payload to be published at the power command topic. The `value` parameter is the payload set for payload \"on\" or payload \"off\".",
"power_command_topic": "The MQTT topic to publish commands to change the climate power state. Sends the payload configured with payload \"on\" or payload \"off\". [Learn more.]({url}#power_command_topic)"
}
Expand Down Expand Up @@ -812,7 +812,7 @@
"min_humidity": "The minimum target humidity that can be set.",
"target_humidity_command_template": "A [template](https://www.home-assistant.io/docs/configuration/templating/#using-command-templates-with-mqtt) to compose the payload to be published at the humidity command topic.",
"target_humidity_command_topic": "The MQTT topic to publish commands to change the climate target humidity. [Learn more.]({url}#humidity_command_topic)",
"target_humidity_state_template": "A [template](https://www.home-assistant.io/docs/configuration/templating/#using-value-templates-with-mqtt) to render the value received on the humidity state topic with.",
"target_humidity_state_template": "A [template](https://www.home-assistant.io/docs/configuration/templating/#using-value-templates-with-mqtt) to render the value received on the target humidity state topic with.",
"target_humidity_state_topic": "The MQTT topic to subscribe for changes of the target humidity. [Learn more.]({url}#humidity_state_topic)"
}
},
Expand Down
8 changes: 5 additions & 3 deletions homeassistant/components/playstation_network/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from dataclasses import dataclass
from datetime import timedelta
import logging
from typing import Any
from typing import TYPE_CHECKING, Any

from psnawp_api.core.psnawp_exceptions import (
PSNAWPAuthenticationError,
Expand All @@ -29,7 +29,7 @@
)
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed

from .const import CONF_ACCOUNT_ID, DOMAIN
from .const import DOMAIN
from .helpers import PlaystationNetwork, PlaystationNetworkData

_LOGGER = logging.getLogger(__name__)
Expand Down Expand Up @@ -176,7 +176,9 @@ def __init__(

def _setup(self) -> None:
"""Set up the coordinator."""
self.user = self.psn.psn.user(account_id=self.subentry.data[CONF_ACCOUNT_ID])
if TYPE_CHECKING:
assert self.subentry.unique_id
self.user = self.psn.psn.user(account_id=self.subentry.unique_id)
self.profile = self.user.profile()

async def _async_setup(self) -> None:
Expand Down
22 changes: 21 additions & 1 deletion homeassistant/components/zha/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,12 @@
from zha.exceptions import ZHAException
from zha.mixins import LogMixin
from zha.zigbee.cluster_handlers import ClusterBindEvent, ClusterConfigureReportingEvent
from zha.zigbee.device import ClusterHandlerConfigurationComplete, Device, ZHAEvent
from zha.zigbee.device import (
ClusterHandlerConfigurationComplete,
Device,
DeviceFirmwareInfoUpdatedEvent,
ZHAEvent,
)
from zha.zigbee.group import Group, GroupInfo, GroupMember
from zigpy.config import (
CONF_DATABASE,
Expand Down Expand Up @@ -843,8 +848,23 @@ def _async_get_or_create_device_proxy(self, zha_device: Device) -> ZHADeviceProx
name=zha_device.name,
manufacturer=zha_device.manufacturer,
model=zha_device.model,
sw_version=zha_device.firmware_version,
)
zha_device_proxy.device_id = device_registry_device.id

def update_sw_version(event: DeviceFirmwareInfoUpdatedEvent) -> None:
"""Update software version in device registry."""
device_registry.async_update_device(
device_registry_device.id,
sw_version=event.new_firmware_version,
)

self._unsubs.append(
zha_device.on_event(
DeviceFirmwareInfoUpdatedEvent.event_type, update_sw_version
)
)

return zha_device_proxy

def _async_get_or_create_group_proxy(self, group_info: GroupInfo) -> ZHAGroupProxy:
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/zha/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"zha",
"universal_silabs_flasher"
],
"requirements": ["zha==0.0.62"],
"requirements": ["zha==0.0.64"],
"usb": [
{
"vid": "10C4",
Expand Down
30 changes: 30 additions & 0 deletions homeassistant/components/zha/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,18 @@
},
"water_supply": {
"name": "Water supply"
},
"frient_in_1": {
"name": "IN1"
},
"frient_in_2": {
"name": "IN2"
},
"frient_in_3": {
"name": "IN3"
},
"frient_in_4": {
"name": "IN4"
}
},
"button": {
Expand All @@ -639,6 +651,9 @@
},
"frost_lock_reset": {
"name": "Frost lock reset"
},
"reset_alarm": {
"name": "Reset alarm"
}
},
"climate": {
Expand Down Expand Up @@ -1472,6 +1487,9 @@
"tier6_summation_delivered": {
"name": "Tier 6 summation delivered"
},
"total_active_power": {
"name": "Total power"
},
"summation_received": {
"name": "Summation received"
},
Expand Down Expand Up @@ -2006,6 +2024,18 @@
},
"auto_relock": {
"name": "Autorelock"
},
"distance_tracking": {
"name": "Distance tracking"
},
"water_shortage_auto_close": {
"name": "Water shortage auto-close"
},
"frient_com_1": {
"name": "COM 1"
},
"frient_com_2": {
"name": "COM 2"
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

APPLICATION_NAME: Final = "HomeAssistant"
MAJOR_VERSION: Final = 2025
MINOR_VERSION: Final = 8
MINOR_VERSION: Final = 9
PATCH_VERSION: Final = "0.dev0"
__short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
__version__: Final = f"{__short_version__}.{PATCH_VERSION}"
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/package_constraints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ hass-nabucasa==0.110.0
hassil==2.2.3
home-assistant-bluetooth==1.13.1
home-assistant-frontend==20250730.0
home-assistant-intents==2025.6.23
home-assistant-intents==2025.7.30
httpx==0.28.1
ifaddr==0.2.0
Jinja2==3.1.6
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "homeassistant"
version = "2025.8.0.dev0"
version = "2025.9.0.dev0"
license = "Apache-2.0"
license-files = ["LICENSE*", "homeassistant/backports/LICENSE*"]
description = "Open-source home automation platform running on Python 3."
Expand Down
4 changes: 2 additions & 2 deletions requirements_all.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions requirements_test_all.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion script/hassfest/docker/Dockerfile

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions tests/components/airq/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"""Common methods used across tests for air-Q."""

from aioairq import DeviceInfo

from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD

TEST_USER_DATA = {
CONF_IP_ADDRESS: "192.168.0.0",
CONF_PASSWORD: "password",
}
TEST_DEVICE_INFO = DeviceInfo(
id="id",
name="name",
model="model",
sw_version="sw",
hw_version="hw",
)
TEST_DEVICE_DATA = {"co2": 500.0, "Status": "OK"}
17 changes: 4 additions & 13 deletions tests/components/airq/test_config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import logging
from unittest.mock import patch

from aioairq import DeviceInfo, InvalidAuth
from aioairq import InvalidAuth
from aiohttp.client_exceptions import ClientConnectionError
import pytest

Expand All @@ -13,25 +13,16 @@
CONF_RETURN_AVERAGE,
DOMAIN,
)
from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD
from homeassistant.const import CONF_PASSWORD
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType

from .common import TEST_DEVICE_INFO, TEST_USER_DATA

from tests.common import MockConfigEntry

pytestmark = pytest.mark.usefixtures("mock_setup_entry")

TEST_USER_DATA = {
CONF_IP_ADDRESS: "192.168.0.0",
CONF_PASSWORD: "password",
}
TEST_DEVICE_INFO = DeviceInfo(
id="id",
name="name",
model="model",
sw_version="sw",
hw_version="hw",
)
DEFAULT_OPTIONS = {
CONF_CLIP_NEGATIVE: True,
CONF_RETURN_AVERAGE: True,
Expand Down
12 changes: 2 additions & 10 deletions tests/components/airq/test_coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import logging
from unittest.mock import patch

from aioairq import DeviceInfo as AirQDeviceInfo
import pytest

from homeassistant.components.airq import AirQCoordinator
Expand All @@ -12,9 +11,10 @@
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceInfo

from .common import TEST_DEVICE_DATA, TEST_DEVICE_INFO

from tests.common import MockConfigEntry

pytestmark = pytest.mark.usefixtures("mock_setup_entry")
MOCKED_ENTRY = MockConfigEntry(
domain=DOMAIN,
data={
Expand All @@ -24,14 +24,6 @@
unique_id="123-456",
)

TEST_DEVICE_INFO = AirQDeviceInfo(
id="id",
name="name",
model="model",
sw_version="sw",
hw_version="hw",
)
TEST_DEVICE_DATA = {"co2": 500.0, "Status": "OK"}
STATUS_WARMUP = {
"co": "co sensor still in warm up phase; waiting time = 18 s",
"tvoc": "tvoc sensor still in warm up phase; waiting time = 18 s",
Expand Down
4 changes: 2 additions & 2 deletions tests/components/assist_pipeline/test_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ async def test_get_pipelines(hass: HomeAssistant) -> None:
("en", "us", "en", "en"),
("en", "uk", "en", "en"),
("pt", "pt", "pt", "pt"),
("pt", "br", "pt-br", "pt"),
("pt", "br", "pt-BR", "pt"),
],
)
async def test_default_pipeline_no_stt_tts(
Expand Down Expand Up @@ -428,7 +428,7 @@ async def test_default_pipeline_no_stt_tts(
("en", "us", "en", "en", "en", "en"),
("en", "uk", "en", "en", "en", "en"),
("pt", "pt", "pt", "pt", "pt", "pt"),
("pt", "br", "pt-br", "pt", "pt-br", "pt-br"),
("pt", "br", "pt-BR", "pt", "pt-br", "pt-br"),
],
)
@pytest.mark.usefixtures("init_supporting_components")
Expand Down
8 changes: 4 additions & 4 deletions tests/components/conversation/snapshots/test_http.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
'nl',
'pl',
'pt',
'pt-br',
'pt-BR',
'ro',
'ru',
'sk',
Expand All @@ -60,9 +60,9 @@
'uk',
'ur',
'vi',
'zh-cn',
'zh-hk',
'zh-tw',
'zh-CN',
'zh-HK',
'zh-TW',
]),
}),
dict({
Expand Down
Loading
Loading