Files
cdnninja 96d1e3d260 Use runtime_data in VeSync (#159720)
Co-authored-by: Joostlek <joostlek@outlook.com>
2025-12-29 14:40:35 +01:00

38 lines
1.3 KiB
Python

"""Support for VeSync Services."""
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant, ServiceCall, callback
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers.dispatcher import async_dispatcher_send
from . import VesyncConfigEntry
from .const import DOMAIN, SERVICE_UPDATE_DEVS, VS_DEVICES, VS_DISCOVERY
@callback
def async_setup_services(hass: HomeAssistant) -> None:
"""Handle for services."""
hass.services.async_register(
DOMAIN, SERVICE_UPDATE_DEVS, async_new_device_discovery
)
async def async_new_device_discovery(call: ServiceCall) -> None:
"""Discover and add new devices."""
entries = call.hass.config_entries.async_entries(DOMAIN)
config_entry: VesyncConfigEntry | None = entries[0] if entries else None
if not config_entry:
raise ServiceValidationError("Entry not found")
if config_entry.state is not ConfigEntryState.LOADED:
raise ServiceValidationError("Entry not loaded")
manager = config_entry.runtime_data.manager
known_devices = list(manager.devices)
await manager.get_devices()
new_devices = [device for device in manager.devices if device not in known_devices]
if new_devices:
async_dispatcher_send(call.hass, VS_DISCOVERY.format(VS_DEVICES), new_devices)