mirror of
https://github.com/home-assistant/core.git
synced 2025-11-05 08:59:57 +00:00
61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
"""DataUpdateCoordinator for Huum."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import timedelta
|
|
import logging
|
|
|
|
from huum.exceptions import Forbidden, NotAuthenticated
|
|
from huum.huum import Huum
|
|
from huum.schemas import HuumStatusResponse
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
|
|
|
from .const import DOMAIN
|
|
|
|
type HuumConfigEntry = ConfigEntry[HuumDataUpdateCoordinator]
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
UPDATE_INTERVAL = timedelta(seconds=30)
|
|
|
|
|
|
class HuumDataUpdateCoordinator(DataUpdateCoordinator[HuumStatusResponse]):
|
|
"""Class to manage fetching data from the API."""
|
|
|
|
config_entry: HuumConfigEntry
|
|
|
|
def __init__(
|
|
self,
|
|
hass: HomeAssistant,
|
|
config_entry: HuumConfigEntry,
|
|
) -> None:
|
|
"""Initialize."""
|
|
super().__init__(
|
|
hass=hass,
|
|
logger=_LOGGER,
|
|
name=DOMAIN,
|
|
update_interval=UPDATE_INTERVAL,
|
|
config_entry=config_entry,
|
|
)
|
|
|
|
self.huum = Huum(
|
|
config_entry.data[CONF_USERNAME],
|
|
config_entry.data[CONF_PASSWORD],
|
|
session=async_get_clientsession(hass),
|
|
)
|
|
|
|
async def _async_update_data(self) -> HuumStatusResponse:
|
|
"""Get the latest status data."""
|
|
|
|
try:
|
|
return await self.huum.status()
|
|
except (Forbidden, NotAuthenticated) as err:
|
|
_LOGGER.error("Could not log in to Huum with given credentials")
|
|
raise UpdateFailed(
|
|
"Could not log in to Huum with given credentials"
|
|
) from err
|