Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
7007751
Unload ZHA integration before adapter migration (#152896)
puddly Sep 24, 2025
ccf0011
Skip ignored discovery entries when showing migrate/setup config flow…
puddly Sep 24, 2025
1629ade
Add Smart Meter B Route integration (#123446)
SeraphicRav Sep 24, 2025
5cb1869
Mark MQTT as service (#152899)
balloob Sep 24, 2025
9a80142
Fix deleting message filters in ntfy integration (#152783)
tr4nt0r Sep 24, 2025
e79a434
Use DeviceCategory in Tuya remaining platforms (#152890)
epenet Sep 24, 2025
c4de46a
Add number platform to LetPot integration (#151092)
jpelgrom Sep 24, 2025
19d87ab
Add Q-Adapt to Airzone integration (#151945)
Passific Sep 24, 2025
79a2fc5
Snapshot testing for Plugwise Select platform (#152827)
bouwew Sep 24, 2025
d865fcf
Do not include capabilities in extended analytics (#152900)
arturpragacz Sep 24, 2025
2844bd4
Update frontend to 20250924.0 (#152901)
piitaya Sep 24, 2025
6dd33f9
Add support for Reolink chime connected to Home Hub (#151199)
starkillerOG Sep 24, 2025
3a806d6
Add dc:title support for Sonos sharelinks (#152774)
KarstenBade Sep 24, 2025
7b53146
Revert "Rename function arguments in modbus (#152814)" (#152904)
abmantis Sep 24, 2025
c3ba086
Add new Cync by GE integration (#149848)
Kinachi249 Sep 24, 2025
ed5f5d4
Add dynamic devices management for Comelit SimpleHome (#152137)
chemelli74 Sep 24, 2025
14d42e4
Add dynamic devices management for Alexa Devices (#151975)
chemelli74 Sep 24, 2025
9cc7868
Fix lg_thinq test RuntimeWarning (#152910)
cdce8p Sep 24, 2025
ddecf1a
Bump aioesphomeapi to 41.9.3 to fix segfault (#152912)
bdraco Sep 24, 2025
95e7b00
Update IQS to platinum for Comelit SimpleHome (#152906)
chemelli74 Sep 24, 2025
076e510
Bump to home-assistant/wheels@2025.09.0 (#152920)
frenck Sep 24, 2025
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
4 changes: 2 additions & 2 deletions .github/workflows/wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ jobs:

# home-assistant/wheels doesn't support sha pinning
- name: Build wheels
uses: home-assistant/wheels@2025.07.0
uses: home-assistant/wheels@2025.09.0
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2
Expand Down Expand Up @@ -221,7 +221,7 @@ jobs:

# home-assistant/wheels doesn't support sha pinning
- name: Build wheels
uses: home-assistant/wheels@2025.07.0
uses: home-assistant/wheels@2025.09.0
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2
Expand Down
1 change: 1 addition & 0 deletions .strict-typing
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ homeassistant.components.rituals_perfume_genie.*
homeassistant.components.roborock.*
homeassistant.components.roku.*
homeassistant.components.romy.*
homeassistant.components.route_b_smart_meter.*
homeassistant.components.rpi_power.*
homeassistant.components.rss_feed_template.*
homeassistant.components.russound_rio.*
Expand Down
4 changes: 4 additions & 0 deletions CODEOWNERS

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

20 changes: 19 additions & 1 deletion homeassistant/components/airzone/select.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,19 @@
from dataclasses import dataclass
from typing import Any, Final

from aioairzone.common import GrilleAngle, OperationMode, SleepTimeout
from aioairzone.common import GrilleAngle, OperationMode, QAdapt, SleepTimeout
from aioairzone.const import (
API_COLD_ANGLE,
API_HEAT_ANGLE,
API_MODE,
API_Q_ADAPT,
API_SLEEP,
AZD_COLD_ANGLE,
AZD_HEAT_ANGLE,
AZD_MASTER,
AZD_MODE,
AZD_MODES,
AZD_Q_ADAPT,
AZD_SLEEP,
AZD_ZONES,
)
Expand Down Expand Up @@ -65,6 +67,14 @@ class AirzoneSelectDescription(SelectEntityDescription):
"90m": SleepTimeout.SLEEP_90,
}

Q_ADAPT_DICT: Final[dict[str, int]] = {
"standard": QAdapt.STANDARD,
"power": QAdapt.POWER,
"silence": QAdapt.SILENCE,
"minimum": QAdapt.MINIMUM,
"maximum": QAdapt.MAXIMUM,
}


def main_zone_options(
zone_data: dict[str, Any],
Expand All @@ -83,6 +93,14 @@ def main_zone_options(
options_fn=main_zone_options,
translation_key="modes",
),
AirzoneSelectDescription(
api_param=API_Q_ADAPT,
entity_category=EntityCategory.CONFIG,
key=AZD_Q_ADAPT,
options=list(Q_ADAPT_DICT),
options_dict=Q_ADAPT_DICT,
translation_key="q_adapt",
),
)


Expand Down
10 changes: 10 additions & 0 deletions homeassistant/components/airzone/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,16 @@
"stop": "Stop"
}
},
"q_adapt": {
"name": "Q-Adapt",
"state": {
"standard": "Standard",
"power": "Power",
"silence": "Silence",
"minimum": "Minimum",
"maximum": "Maximum"
}
},
"sleep_times": {
"name": "Sleep",
"state": {
Expand Down
24 changes: 18 additions & 6 deletions homeassistant/components/alexa_devices/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,24 @@ async def async_setup_entry(

coordinator = entry.runtime_data

async_add_entities(
AmazonBinarySensorEntity(coordinator, serial_num, sensor_desc)
for sensor_desc in BINARY_SENSORS
for serial_num in coordinator.data
if sensor_desc.is_supported(coordinator.data[serial_num], sensor_desc.key)
)
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
AmazonBinarySensorEntity(coordinator, serial_num, sensor_desc)
for sensor_desc in BINARY_SENSORS
for serial_num in new_devices
if sensor_desc.is_supported(
coordinator.data[serial_num], sensor_desc.key
)
)

_check_device()
entry.async_on_unload(coordinator.async_add_listener(_check_device))


class AmazonBinarySensorEntity(AmazonEntity, BinarySensorEntity):
Expand Down
24 changes: 17 additions & 7 deletions homeassistant/components/alexa_devices/notify.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,23 @@ async def async_setup_entry(

coordinator = entry.runtime_data

async_add_entities(
AmazonNotifyEntity(coordinator, serial_num, sensor_desc)
for sensor_desc in NOTIFY
for serial_num in coordinator.data
if sensor_desc.subkey in coordinator.data[serial_num].capabilities
and sensor_desc.is_supported(coordinator.data[serial_num])
)
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
AmazonNotifyEntity(coordinator, serial_num, sensor_desc)
for sensor_desc in NOTIFY
for serial_num in new_devices
if sensor_desc.subkey in coordinator.data[serial_num].capabilities
and sensor_desc.is_supported(coordinator.data[serial_num])
)

_check_device()
entry.async_on_unload(coordinator.async_add_listener(_check_device))


class AmazonNotifyEntity(AmazonEntity, NotifyEntity):
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/alexa_devices/quality_scale.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ rules:
docs-supported-functions: done
docs-troubleshooting: done
docs-use-cases: done
dynamic-devices: todo
dynamic-devices: done
entity-category: done
entity-device-class: done
entity-disabled-by-default: done
Expand Down
22 changes: 16 additions & 6 deletions homeassistant/components/alexa_devices/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,22 @@ async def async_setup_entry(

coordinator = entry.runtime_data

async_add_entities(
AmazonSensorEntity(coordinator, serial_num, sensor_desc)
for sensor_desc in SENSORS
for serial_num in coordinator.data
if coordinator.data[serial_num].sensors.get(sensor_desc.key) is not None
)
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
AmazonSensorEntity(coordinator, serial_num, sensor_desc)
for sensor_desc in SENSORS
for serial_num in new_devices
if coordinator.data[serial_num].sensors.get(sensor_desc.key) is not None
)

_check_device()
entry.async_on_unload(coordinator.async_add_listener(_check_device))


class AmazonSensorEntity(AmazonEntity, SensorEntity):
Expand Down
22 changes: 16 additions & 6 deletions homeassistant/components/alexa_devices/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,22 @@ async def async_setup_entry(

coordinator = entry.runtime_data

async_add_entities(
AmazonSwitchEntity(coordinator, serial_num, switch_desc)
for switch_desc in SWITCHES
for serial_num in coordinator.data
if switch_desc.subkey in coordinator.data[serial_num].capabilities
)
known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
AmazonSwitchEntity(coordinator, serial_num, switch_desc)
for switch_desc in SWITCHES
for serial_num in new_devices
if switch_desc.subkey in coordinator.data[serial_num].capabilities
)

_check_device()
entry.async_on_unload(coordinator.async_add_listener(_check_device))


class AmazonSwitchEntity(AmazonEntity, SwitchEntity):
Expand Down
17 changes: 6 additions & 11 deletions homeassistant/components/analytics/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
from homeassistant.helpers.singleton import singleton
from homeassistant.helpers.storage import Store
from homeassistant.helpers.system_info import async_get_system_info
from homeassistant.helpers.typing import UNDEFINED, UndefinedType
from homeassistant.helpers.typing import UNDEFINED
from homeassistant.loader import (
Integration,
IntegrationNotFound,
Expand Down Expand Up @@ -142,7 +142,6 @@ class EntityAnalyticsModifications:
"""

remove: bool = False
capabilities: dict[str, Any] | None | UndefinedType = UNDEFINED


class AnalyticsPlatformProtocol(Protocol):
Expand Down Expand Up @@ -677,18 +676,14 @@ async def async_devices_payload(hass: HomeAssistant) -> dict:
# we should replace it with the original value in the future.
# It is also not present, if entity is not in the state machine,
# which can happen for disabled entities.
"assumed_state": entity_state.attributes.get(ATTR_ASSUMED_STATE, False)
if entity_state is not None
else None,
"capabilities": entity_config.capabilities
if entity_config.capabilities is not UNDEFINED
else entity_entry.capabilities,
"assumed_state": (
entity_state.attributes.get(ATTR_ASSUMED_STATE, False)
if entity_state is not None
else None
),
"domain": entity_entry.domain,
"entity_category": entity_entry.entity_category,
"has_entity_name": entity_entry.has_entity_name,
"modified_by_integration": ["capabilities"]
if entity_config.capabilities is not UNDEFINED
else None,
"original_device_class": entity_entry.original_device_class,
# LIMITATION: `unit_of_measurement` can be overridden by users;
# we should replace it with the original value in the future.
Expand Down
21 changes: 17 additions & 4 deletions homeassistant/components/comelit/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,23 @@ async def async_setup_entry(

coordinator = cast(ComelitVedoSystem, config_entry.runtime_data)

async_add_entities(
ComelitVedoBinarySensorEntity(coordinator, device, config_entry.entry_id)
for device in coordinator.data["alarm_zones"].values()
)
known_devices: set[int] = set()

def _check_device() -> None:
current_devices = set(coordinator.data["alarm_zones"])
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
ComelitVedoBinarySensorEntity(
coordinator, device, config_entry.entry_id
)
for device in coordinator.data["alarm_zones"].values()
if device.index in new_devices
)

_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


class ComelitVedoBinarySensorEntity(
Expand Down
19 changes: 15 additions & 4 deletions homeassistant/components/comelit/cover.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,21 @@ async def async_setup_entry(

coordinator = cast(ComelitSerialBridge, config_entry.runtime_data)

async_add_entities(
ComelitCoverEntity(coordinator, device, config_entry.entry_id)
for device in coordinator.data[COVER].values()
)
known_devices: set[int] = set()

def _check_device() -> None:
current_devices = set(coordinator.data[COVER])
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
ComelitCoverEntity(coordinator, device, config_entry.entry_id)
for device in coordinator.data[COVER].values()
if device.index in new_devices
)

_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


class ComelitCoverEntity(ComelitBridgeBaseEntity, RestoreEntity, CoverEntity):
Expand Down
19 changes: 15 additions & 4 deletions homeassistant/components/comelit/light.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,21 @@ async def async_setup_entry(

coordinator = cast(ComelitSerialBridge, config_entry.runtime_data)

async_add_entities(
ComelitLightEntity(coordinator, device, config_entry.entry_id)
for device in coordinator.data[LIGHT].values()
)
known_devices: set[int] = set()

def _check_device() -> None:
current_devices = set(coordinator.data[LIGHT])
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
ComelitLightEntity(coordinator, device, config_entry.entry_id)
for device in coordinator.data[LIGHT].values()
if device.index in new_devices
)

_check_device()
config_entry.async_on_unload(coordinator.async_add_listener(_check_device))


class ComelitLightEntity(ComelitBridgeBaseEntity, LightEntity):
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/comelit/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
"integration_type": "hub",
"iot_class": "local_polling",
"loggers": ["aiocomelit"],
"quality_scale": "silver",
"quality_scale": "platinum",
"requirements": ["aiocomelit==0.12.3"]
}
4 changes: 1 addition & 3 deletions homeassistant/components/comelit/quality_scale.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@ rules:
docs-supported-functions: done
docs-troubleshooting: done
docs-use-cases: done
dynamic-devices:
status: todo
comment: missing implementation
dynamic-devices: done
entity-category:
status: exempt
comment: no config or diagnostic entities
Expand Down
Loading
Loading