Files
core/homeassistant/components/vesync/coordinator.py
cdnninja 1b9acdc233 Convert Vesync to 3.X version of library (#148239)
Co-authored-by: SapuSeven <sapuseven@gmail.com>
Co-authored-by: Joostlek <joostlek@outlook.com>
2025-09-02 15:31:38 +02:00

57 lines
1.6 KiB
Python

"""Class to manage VeSync data updates."""
from __future__ import annotations
from datetime import datetime, timedelta
import logging
from pyvesync import VeSync
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import UPDATE_INTERVAL, UPDATE_INTERVAL_ENERGY
_LOGGER = logging.getLogger(__name__)
class VeSyncDataCoordinator(DataUpdateCoordinator[None]):
"""Class representing data coordinator for VeSync devices."""
config_entry: ConfigEntry
update_time: datetime | None = None
def __init__(
self, hass: HomeAssistant, config_entry: ConfigEntry, manager: VeSync
) -> None:
"""Initialize."""
self._manager = manager
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name="VeSyncDataCoordinator",
update_interval=timedelta(seconds=UPDATE_INTERVAL),
)
def should_update_energy(self) -> bool:
"""Test if specified update interval has been exceeded."""
if self.update_time is None:
return True
return datetime.now() - self.update_time >= timedelta(
seconds=UPDATE_INTERVAL_ENERGY
)
async def _async_update_data(self) -> None:
"""Fetch data from API endpoint."""
await self._manager.update_all_devices()
if self.should_update_energy():
self.update_time = datetime.now()
for outlet in self._manager.devices.outlets:
await outlet.update_energy()