mirror of
https://github.com/mx42/home-assistant-ecocito.git
synced 2026-01-14 13:59:50 +01:00
87 lines
3.0 KiB
Python
87 lines
3.0 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,
|
|
# GarbageCollectionsDataUpdateCoordinator,
|
|
# RecyclingCollectionsDataUpdateCoordinator,
|
|
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)
|