Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
bd3fe1d
Fix credit sensor when there are no vehicles in Teslemetry (#149925)
Bre77 Aug 4, 2025
cf14226
Pass config entry to Fronius coordinator (#149954)
joostlek Aug 4, 2025
fe2bd8d
Add Tuya snapshots for ywcgq category (#149948)
epenet Aug 4, 2025
f350a1a
Add hassfest check to help with future dependency updates (#149624)
cdce8p Aug 4, 2025
8d8383e
Add extra Tuya snapshots for dc and dj category (lights) (#149940)
epenet Aug 4, 2025
c1ccfee
Pass config entry to AsusWRT coordinator (#149953)
joostlek Aug 4, 2025
afffe0b
Fix DeviceEntry.suggested_area deprecation warning (#149951)
emontnemery Aug 4, 2025
cbf4130
Add zeroconf flow to Homee (#149820)
Taraman17 Aug 4, 2025
106c086
Pass config entry to Unifi coordinator (#149952)
joostlek Aug 4, 2025
c2b2982
Bump hass-nabucasa from 0.110.0 to 0.110.1 (#149956)
ludeeus Aug 4, 2025
93e11aa
Refresh plugwise test-fixtures (#149875)
bouwew Aug 4, 2025
9edd242
Pass config entry to SMS coordinator (#149955)
joostlek Aug 4, 2025
9f867f2
Pass config entry to Snoo coordinator (#149947)
joostlek Aug 4, 2025
594ce8f
Pass config entry to Smarttub coordinator (#149946)
joostlek Aug 4, 2025
a962777
Pass config entry to Meteo France coordinator (#149945)
joostlek Aug 4, 2025
39b651e
Pass config entry to Kraken coordinator (#149944)
joostlek Aug 4, 2025
3d27d50
Pass config entry to Mill coordinator (#149942)
joostlek Aug 4, 2025
33eaca2
Pass config entry to Simplisafe coordinator (#149943)
joostlek Aug 4, 2025
7a6aaf6
Pass config entry to hue coordinator (#149941)
joostlek Aug 4, 2025
312e590
Pass config entry to Broadlink coordinator (#149949)
joostlek Aug 4, 2025
0bdf675
Pass config entry to Remote Calendar coordinator (#149958)
joostlek Aug 4, 2025
46cfddd
Move to the new handler for migrate_paypal_agreement (#149934)
ludeeus Aug 4, 2025
e2bc73f
Fix optimistic covers (#149962)
Petro31 Aug 4, 2025
1632e0a
Direct migrations with Z-Wave JS UI to docs (#149966)
MartinHjelmare Aug 4, 2025
822e1ff
Minor UI improvements for Telegram bot actions (#149889)
hanwg Aug 4, 2025
b76f47c
Add bot details to Telegram bot events (#148638)
hanwg Aug 4, 2025
88c9d5d
Fix bsblan reauthentication (#149926)
liudger Aug 4, 2025
ae48179
Bump zwave-js-server-python to 0.67.1 (#149972)
MartinHjelmare Aug 4, 2025
fac5b2c
Add Tuya snapshots tests for camera platform (#149959)
epenet Aug 4, 2025
31e647b
Bump hass-nabucasa from 0.110.1 to 0.111.0 (#149977)
ludeeus Aug 4, 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
15 changes: 12 additions & 3 deletions homeassistant/components/asuswrt/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from collections.abc import Callable, Mapping
from datetime import datetime, timedelta
import logging
from typing import Any
from typing import TYPE_CHECKING, Any

from pyasuswrt import AsusWrtError

Expand Down Expand Up @@ -40,6 +40,9 @@
SENSORS_CONNECTED_DEVICE,
)

if TYPE_CHECKING:
from . import AsusWrtConfigEntry

CONF_REQ_RELOAD = [CONF_DNSMASQ, CONF_INTERFACE, CONF_REQUIRE_IP]

SCAN_INTERVAL = timedelta(seconds=30)
Expand All @@ -52,10 +55,13 @@
class AsusWrtSensorDataHandler:
"""Data handler for AsusWrt sensor."""

def __init__(self, hass: HomeAssistant, api: AsusWrtBridge) -> None:
def __init__(
self, hass: HomeAssistant, api: AsusWrtBridge, entry: AsusWrtConfigEntry
) -> None:
"""Initialize a AsusWrt sensor data handler."""
self._hass = hass
self._api = api
self._entry = entry
self._connected_devices = 0

async def _get_connected_devices(self) -> dict[str, int]:
Expand Down Expand Up @@ -91,6 +97,7 @@ async def get_coordinator(
update_method=method,
# Polling interval. Will only be polled if there are subscribers.
update_interval=SCAN_INTERVAL if should_poll else None,
config_entry=self._entry,
)
await coordinator.async_refresh()

Expand Down Expand Up @@ -321,7 +328,9 @@ async def init_sensors_coordinator(self) -> None:
if self._sensors_data_handler:
return

self._sensors_data_handler = AsusWrtSensorDataHandler(self.hass, self._api)
self._sensors_data_handler = AsusWrtSensorDataHandler(
self.hass, self._api, self._entry
)
self._sensors_data_handler.update_device_count(self._connected_devices)

sensors_types = await self._api.async_get_available_sensors()
Expand Down
1 change: 1 addition & 0 deletions homeassistant/components/broadlink/updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ def __init__(self, device: BroadlinkDevice[_ApiT]) -> None:
device.hass,
_LOGGER,
name=f"{device.name} ({device.api.model} at {device.api.host[0]})",
config_entry=device.config,
update_method=self.async_update,
update_interval=self.SCAN_INTERVAL,
)
Expand Down
32 changes: 12 additions & 20 deletions homeassistant/components/bsblan/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,16 +211,16 @@ async def async_step_reauth_confirm(
),
)

# Use existing host and port, update auth credentials
self.host = existing_entry.data[CONF_HOST]
self.port = existing_entry.data[CONF_PORT]
self.passkey = user_input.get(CONF_PASSKEY) or existing_entry.data.get(
CONF_PASSKEY
)
self.username = user_input.get(CONF_USERNAME) or existing_entry.data.get(
CONF_USERNAME
)
self.password = user_input.get(CONF_PASSWORD)
# Combine existing data with the user's new input for validation.
# This correctly handles adding, changing, and clearing credentials.
config_data = existing_entry.data.copy()
config_data.update(user_input)

self.host = config_data[CONF_HOST]
self.port = config_data[CONF_PORT]
self.passkey = config_data.get(CONF_PASSKEY)
self.username = config_data.get(CONF_USERNAME)
self.password = config_data.get(CONF_PASSWORD)

try:
await self._get_bsblan_info(raise_on_progress=False, is_reauth=True)
Expand Down Expand Up @@ -267,17 +267,9 @@ async def async_step_reauth_confirm(
errors={"base": "cannot_connect"},
)

# Update the config entry with new auth data
data_updates = {}
if self.passkey is not None:
data_updates[CONF_PASSKEY] = self.passkey
if self.username is not None:
data_updates[CONF_USERNAME] = self.username
if self.password is not None:
data_updates[CONF_PASSWORD] = self.password

# Update only the fields that were provided by the user
return self.async_update_reload_and_abort(
existing_entry, data_updates=data_updates, reason="reauth_successful"
existing_entry, data_updates=user_input, reason="reauth_successful"
)

@callback
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/cloud/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@
"integration_type": "system",
"iot_class": "cloud_push",
"loggers": ["acme", "hass_nabucasa", "snitun"],
"requirements": ["hass-nabucasa==0.110.0"],
"requirements": ["hass-nabucasa==0.111.0"],
"single_config_entry": true
}
16 changes: 9 additions & 7 deletions homeassistant/components/cloud/subscription.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

import asyncio
import logging
from typing import Any

from aiohttp.client_exceptions import ClientError
from hass_nabucasa import Cloud, cloud_api
from hass_nabucasa.payments_api import PaymentsApiError, SubscriptionInfo
from hass_nabucasa import (
Cloud,
MigratePaypalAgreementInfo,
PaymentsApiError,
SubscriptionInfo,
)

from .client import CloudClient
from .const import REQUEST_TIMEOUT
Expand All @@ -29,17 +31,17 @@ async def async_subscription_info(cloud: Cloud[CloudClient]) -> SubscriptionInfo

async def async_migrate_paypal_agreement(
cloud: Cloud[CloudClient],
) -> dict[str, Any] | None:
) -> MigratePaypalAgreementInfo | None:
"""Migrate a paypal agreement from legacy."""
try:
async with asyncio.timeout(REQUEST_TIMEOUT):
return await cloud_api.async_migrate_paypal_agreement(cloud)
return await cloud.payments.migrate_paypal_agreement()
except TimeoutError:
_LOGGER.error(
"A timeout of %s was reached while trying to start agreement migration",
REQUEST_TIMEOUT,
)
except ClientError as exception:
except PaymentsApiError as exception:
_LOGGER.error("Failed to start agreement migration - %s", exception)

return None
6 changes: 6 additions & 0 deletions homeassistant/components/fronius/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ async def init_devices(self) -> None:
solar_net=self,
logger=_LOGGER,
name=f"{DOMAIN}_logger_{self.host}",
config_entry=self.config_entry,
)
await self.logger_coordinator.async_config_entry_first_refresh()

Expand All @@ -120,6 +121,7 @@ async def init_devices(self) -> None:
solar_net=self,
logger=_LOGGER,
name=f"{DOMAIN}_meters_{self.host}",
config_entry=self.config_entry,
)
)

Expand All @@ -129,6 +131,7 @@ async def init_devices(self) -> None:
solar_net=self,
logger=_LOGGER,
name=f"{DOMAIN}_ohmpilot_{self.host}",
config_entry=self.config_entry,
)
)

Expand All @@ -138,6 +141,7 @@ async def init_devices(self) -> None:
solar_net=self,
logger=_LOGGER,
name=f"{DOMAIN}_power_flow_{self.host}",
config_entry=self.config_entry,
)
)

Expand All @@ -147,6 +151,7 @@ async def init_devices(self) -> None:
solar_net=self,
logger=_LOGGER,
name=f"{DOMAIN}_storages_{self.host}",
config_entry=self.config_entry,
)
)

Expand Down Expand Up @@ -206,6 +211,7 @@ async def _init_devices_inverter(self, _now: datetime | None = None) -> None:
logger=_LOGGER,
name=_inverter_name,
inverter_info=_inverter_info,
config_entry=self.config_entry,
)
if self.config_entry.state == ConfigEntryState.LOADED:
await _coordinator.async_refresh()
Expand Down
Loading
Loading