Files
home-assistant-ecocito/custom_components/ecocito/__init__.py
2025-04-01 09:17:40 +02:00

85 lines
2.9 KiB
Python

"""The ecocito integration."""
from __future__ import annotations
from dataclasses import dataclass, fields
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_DOMAIN, CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant
from .client import EcocitoClient
from .const import (
ECOCITO_DEFAULT_REFRESH_MIN,
ECOCITO_GARBAGE_COLLECTION_TYPE,
ECOCITO_GARBAGE_TYPE,
ECOCITO_RECYCLE_TYPE,
ECOCITO_RECYCLING_COLLECTION_TYPE,
ECOCITO_REFRESH_MIN_KEY,
)
from .coordinator import (
CollectionDataUpdateCoordinator,
WasteDepotVisitsDataUpdateCoordinator,
)
PLATFORMS: list[Platform] = [Platform.SENSOR]
@dataclass(kw_only=True, slots=True)
class EcocitoData:
"""Ecocito data type."""
# TODO: Possibly at some point we can build dynamic sensors depending on user needs
garbage_collections: CollectionDataUpdateCoordinator
garbage_collections_previous: CollectionDataUpdateCoordinator
recycling_collections: CollectionDataUpdateCoordinator
recycling_collections_previous: CollectionDataUpdateCoordinator
waste_depot_visits: WasteDepotVisitsDataUpdateCoordinator
type EcocitoConfigEntry = ConfigEntry[EcocitoData]
async def async_setup_entry(hass: HomeAssistant, entry: EcocitoConfigEntry) -> bool:
"""Set up ecocito from a config entry."""
client = EcocitoClient(
entry.data[CONF_DOMAIN],
entry.data[CONF_USERNAME],
entry.data[CONF_PASSWORD],
)
await client.authenticate()
garbage_id = entry.data.get(ECOCITO_GARBAGE_TYPE, ECOCITO_GARBAGE_COLLECTION_TYPE)
recycle_id = entry.data.get(ECOCITO_RECYCLE_TYPE, ECOCITO_RECYCLING_COLLECTION_TYPE)
refresh_time = entry.data.get(ECOCITO_REFRESH_MIN_KEY, ECOCITO_DEFAULT_REFRESH_MIN)
data = EcocitoData(
garbage_collections=CollectionDataUpdateCoordinator(
hass, client, 0, garbage_id, refresh_time
),
garbage_collections_previous=CollectionDataUpdateCoordinator(
hass, client, -1, garbage_id, refresh_time
),
recycling_collections=CollectionDataUpdateCoordinator(
hass, client, 0, recycle_id, refresh_time
),
recycling_collections_previous=CollectionDataUpdateCoordinator(
hass, client, -1, recycle_id, refresh_time
),
waste_depot_visits=WasteDepotVisitsDataUpdateCoordinator(
hass, client, 0, refresh_time
),
)
for field in fields(data):
coordinator = getattr(data, field.name)
await coordinator.async_config_entry_first_refresh()
entry.runtime_data = data
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: EcocitoConfigEntry) -> bool:
"""Unload a config entry."""
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)