"""The met component.""" from __future__ import annotations import logging from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import device_registry as dr from .const import ( CONF_TRACK_HOME, DEFAULT_HOME_LATITUDE, DEFAULT_HOME_LONGITUDE, DOMAIN, ) from .coordinator import MetDataUpdateCoordinator PLATFORMS = [Platform.WEATHER] _LOGGER = logging.getLogger(__name__) async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: """Set up Met as config entry.""" # Don't setup if tracking home location and latitude or longitude isn't set. # Also, filters out our onboarding default location. if config_entry.data.get(CONF_TRACK_HOME, False) and ( (not hass.config.latitude and not hass.config.longitude) or ( hass.config.latitude == DEFAULT_HOME_LATITUDE and hass.config.longitude == DEFAULT_HOME_LONGITUDE ) ): _LOGGER.warning( "Skip setting up met.no integration; No Home location has been set" ) return False coordinator = MetDataUpdateCoordinator(hass, config_entry) await coordinator.async_config_entry_first_refresh() if config_entry.data.get(CONF_TRACK_HOME, False): coordinator.track_home() hass.data.setdefault(DOMAIN, {}) hass.data[DOMAIN][config_entry.entry_id] = coordinator config_entry.async_on_unload(config_entry.add_update_listener(async_update_entry)) await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS) await cleanup_old_device(hass) return True async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: """Unload a config entry.""" unload_ok = await hass.config_entries.async_unload_platforms( config_entry, PLATFORMS ) hass.data[DOMAIN][config_entry.entry_id].untrack_home() hass.data[DOMAIN].pop(config_entry.entry_id) return unload_ok async def async_update_entry(hass: HomeAssistant, config_entry: ConfigEntry): """Reload Met component when options changed.""" await hass.config_entries.async_reload(config_entry.entry_id) async def cleanup_old_device(hass: HomeAssistant) -> None: """Cleanup device without proper device identifier.""" device_reg = dr.async_get(hass) device = device_reg.async_get_device(identifiers={(DOMAIN,)}) # type: ignore[arg-type] if device: _LOGGER.debug("Removing improper device %s", device.name) device_reg.async_remove_device(device.id)