Move kmtronic coordinator to separate module (#147182)

This commit is contained in:
epenet 2025-06-20 10:19:19 +02:00 committed by GitHub
parent 2e21493c19
commit 973700542b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 49 additions and 27 deletions

View File

@ -1,10 +1,5 @@
"""The kmtronic integration.""" """The kmtronic integration."""
import asyncio
from datetime import timedelta
import logging
import aiohttp
from pykmtronic.auth import Auth from pykmtronic.auth import Auth
from pykmtronic.hub import KMTronicHubAPI from pykmtronic.hub import KMTronicHubAPI
@ -12,14 +7,12 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, Platform from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client from homeassistant.helpers import aiohttp_client
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import DATA_COORDINATOR, DATA_HUB, DOMAIN, MANUFACTURER, UPDATE_LISTENER from .const import DATA_COORDINATOR, DATA_HUB, DOMAIN, UPDATE_LISTENER
from .coordinator import KMtronicCoordinator
PLATFORMS = [Platform.SWITCH] PLATFORMS = [Platform.SWITCH]
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up kmtronic from a config entry.""" """Set up kmtronic from a config entry."""
@ -31,24 +24,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
entry.data[CONF_PASSWORD], entry.data[CONF_PASSWORD],
) )
hub = KMTronicHubAPI(auth) hub = KMTronicHubAPI(auth)
coordinator = KMtronicCoordinator(hass, entry, hub)
async def async_update_data():
try:
async with asyncio.timeout(10):
await hub.async_update_relays()
except aiohttp.client_exceptions.ClientResponseError as err:
raise UpdateFailed(f"Wrong credentials: {err}") from err
except aiohttp.client_exceptions.ClientConnectorError as err:
raise UpdateFailed(f"Error communicating with API: {err}") from err
coordinator = DataUpdateCoordinator(
hass,
_LOGGER,
config_entry=entry,
name=f"{MANUFACTURER} {hub.name}",
update_method=async_update_data,
update_interval=timedelta(seconds=30),
)
await coordinator.async_config_entry_first_refresh() await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {}) hass.data.setdefault(DOMAIN, {})

View File

@ -0,0 +1,46 @@
"""The kmtronic integration."""
import asyncio
from datetime import timedelta
import logging
from aiohttp.client_exceptions import ClientConnectorError, ClientResponseError
from pykmtronic.hub import KMTronicHubAPI
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import MANUFACTURER
PLATFORMS = [Platform.SWITCH]
_LOGGER = logging.getLogger(__name__)
class KMtronicCoordinator(DataUpdateCoordinator[None]):
"""Coordinator for KMTronic."""
def __init__(
self, hass: HomeAssistant, entry: ConfigEntry, hub: KMTronicHubAPI
) -> None:
"""Initialize the KMTronic coordinator."""
super().__init__(
hass,
_LOGGER,
config_entry=entry,
name=f"{MANUFACTURER} {hub.name}",
update_interval=timedelta(seconds=30),
)
self.hub = hub
async def _async_update_data(self) -> None:
"""Fetch the latest data from the source."""
try:
async with asyncio.timeout(10):
await self.hub.async_update_relays()
except ClientResponseError as err:
raise UpdateFailed(f"Wrong credentials: {err}") from err
except ClientConnectorError as err:
raise UpdateFailed(f"Error communicating with API: {err}") from err