core/homeassistant/components/kulersky/__init__.py

81 lines
2.8 KiB
Python

"""Kuler Sky lights integration."""
import logging
from homeassistant.components.bluetooth import async_ble_device_from_address
from homeassistant.config_entries import SOURCE_INTEGRATION_DISCOVERY, ConfigEntry
from homeassistant.const import CONF_ADDRESS, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers import device_registry as dr
from .const import DOMAIN
PLATFORMS = [Platform.LIGHT]
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up Kuler Sky from a config entry."""
ble_device = async_ble_device_from_address(
hass, entry.data[CONF_ADDRESS], connectable=True
)
if not ble_device:
raise ConfigEntryNotReady(
translation_domain=DOMAIN,
translation_key="cannot_connect",
)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
"""Migrate old entry."""
_LOGGER.debug("Migrating from version %s", config_entry.version)
# Version 1 was a single entry instance that started a bluetooth discovery
# thread to add devices. Version 2 has one config entry per device, and
# supports core bluetooth discovery
if config_entry.version == 1:
dev_reg = dr.async_get(hass)
devices = dev_reg.devices.get_devices_for_config_entry_id(config_entry.entry_id)
if len(devices) == 0:
_LOGGER.error("Unable to migrate; No devices registered")
return False
first_device = devices[0]
domain_identifiers = [i for i in first_device.identifiers if i[0] == DOMAIN]
address = next(iter(domain_identifiers))[1]
hass.config_entries.async_update_entry(
config_entry,
title=first_device.name or address,
data={CONF_ADDRESS: address},
unique_id=address,
version=2,
)
# Create new config flows for the remaining devices
for device in devices[1:]:
domain_identifiers = [i for i in device.identifiers if i[0] == DOMAIN]
address = next(iter(domain_identifiers))[1]
hass.async_create_task(
hass.config_entries.flow.async_init(
DOMAIN,
context={"source": SOURCE_INTEGRATION_DISCOVERY},
data={CONF_ADDRESS: address},
)
)
_LOGGER.debug("Migration to version %s successful", config_entry.version)
return True