81 lines
2.8 KiB
Python
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
|