1 """The Nettigo Air Monitor component."""
3 from __future__
import annotations
6 from typing
import TYPE_CHECKING
8 from aiohttp.client_exceptions
import ClientConnectorError, ClientError
9 from nettigo_air_monitor
import (
24 from .const
import ATTR_SDS011, ATTR_SPS30, DOMAIN
25 from .coordinator
import NAMDataUpdateCoordinator
27 _LOGGER = logging.getLogger(__name__)
29 PLATFORMS = [Platform.BUTTON, Platform.SENSOR]
31 type NAMConfigEntry = ConfigEntry[NAMDataUpdateCoordinator]
35 """Set up Nettigo as config entry."""
36 host: str = entry.data[CONF_HOST]
37 username: str |
None = entry.data.get(CONF_USERNAME)
38 password: str |
None = entry.data.get(CONF_PASSWORD)
42 options = ConnectionOptions(host=host, username=username, password=password)
44 nam = await NettigoAirMonitor.create(websession, options)
45 except (ApiError, ClientError, ClientConnectorError, TimeoutError)
as err:
46 raise ConfigEntryNotReady
from err
49 await nam.async_check_credentials()
50 except ApiError
as err:
51 raise ConfigEntryNotReady
from err
52 except AuthFailedError
as err:
53 raise ConfigEntryAuthFailed
from err
56 assert entry.unique_id
59 await coordinator.async_config_entry_first_refresh()
61 entry.runtime_data = coordinator
63 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
66 ent_reg = er.async_get(hass)
67 for sensor_type
in (
"sds", ATTR_SDS011, ATTR_SPS30):
68 unique_id = f
"{coordinator.unique_id}-{sensor_type}"
69 if entity_id := ent_reg.async_get_entity_id(
70 AIR_QUALITY_PLATFORM, DOMAIN, unique_id
72 _LOGGER.debug(
"Removing deprecated air_quality entity %s", entity_id)
73 ent_reg.async_remove(entity_id)
79 """Unload a config entry."""
80 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
bool async_unload_entry(HomeAssistant hass, NAMConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, NAMConfigEntry entry)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)