hass-core/homeassistant/components/starlink/coordinator.py

39 lines
1.3 KiB
Python
Raw Normal View History

"""Contains the shared Coordinator for Starlink systems."""
from __future__ import annotations
from datetime import timedelta
import logging
import async_timeout
from starlink_grpc import ChannelContext, GrpcError, StatusDict, status_data
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
_LOGGER = logging.getLogger(__name__)
class StarlinkUpdateCoordinator(DataUpdateCoordinator[StatusDict]):
"""Coordinates updates between all Starlink sensors defined in this file."""
def __init__(self, hass: HomeAssistant, name: str, url: str) -> None:
"""Initialize an UpdateCoordinator for a group of sensors."""
self.channel_context = ChannelContext(target=url)
super().__init__(
hass,
_LOGGER,
name=name,
update_interval=timedelta(seconds=5),
)
async def _async_update_data(self) -> StatusDict:
async with async_timeout.timeout(4):
try:
status = await self.hass.async_add_executor_job(
status_data, self.channel_context
)
return status[0]
except GrpcError as exc:
raise UpdateFailed from exc