* chore: Refactor BSBLanUpdateCoordinator to improve code readability and maintainability * feat: Add BSBLan integration models This commit adds the models for the BSB-Lan integration. It includes a dataclass for the BSBLanCoordinatorData, which stores the state and sensor information. * refactor: Update BSBLANClimate class to use DataUpdateCoordinator without specifying the State type * chore: Remove unused Sensor import in BSBLan models * feat: Refactor BSBLanEntity to use CoordinatorEntity The BSBLanEntity class has been refactored to inherit from the CoordinatorEntity class, which provides better integration with the update coordinator. This change improves code readability and maintainability. * refactor: Remove unused config_entry variable in BSBLanUpdateCoordinator * refactor: Update BSBLANClimate class to use DataUpdateCoordinator Refactor the BSBLANClimate class to use the Coordinator of the entity * refactor: Update tests to use the new structure * fix coverage it should be the same as before * refactor: moved dataclass BSBLanCoordinatorData * use the data class inside init * refactor: Remove unused config_entry variable in BSBLanUpdateCoordinator * refactor: use BSBLanData from init * remove entry data from diagnostics * fix: add random interval back * refactor: Simplify coordinator_data assignment in async_get_config_entry_diagnostics * revert back to original except dataclass import * revert: Add MAC address back to device info in BSBLanEntity
80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
"""The BSB-Lan integration."""
|
|
|
|
import dataclasses
|
|
|
|
from bsblan import BSBLAN, BSBLANConfig, Device, Info, StaticState
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import (
|
|
CONF_HOST,
|
|
CONF_PASSWORD,
|
|
CONF_PORT,
|
|
CONF_USERNAME,
|
|
Platform,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
|
|
from .const import CONF_PASSKEY, DOMAIN
|
|
from .coordinator import BSBLanUpdateCoordinator
|
|
|
|
PLATFORMS = [Platform.CLIMATE]
|
|
|
|
|
|
@dataclasses.dataclass
|
|
class BSBLanData:
|
|
"""BSBLan data stored in the Home Assistant data object."""
|
|
|
|
coordinator: BSBLanUpdateCoordinator
|
|
client: BSBLAN
|
|
device: Device
|
|
info: Info
|
|
static: StaticState
|
|
|
|
|
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
"""Set up BSB-Lan from a config entry."""
|
|
|
|
# create config using BSBLANConfig
|
|
config = BSBLANConfig(
|
|
host=entry.data[CONF_HOST],
|
|
passkey=entry.data[CONF_PASSKEY],
|
|
port=entry.data[CONF_PORT],
|
|
username=entry.data.get(CONF_USERNAME),
|
|
password=entry.data.get(CONF_PASSWORD),
|
|
)
|
|
|
|
# create BSBLAN client
|
|
session = async_get_clientsession(hass)
|
|
bsblan = BSBLAN(config, session)
|
|
|
|
# Create and perform first refresh of the coordinator
|
|
coordinator = BSBLanUpdateCoordinator(hass, entry, bsblan)
|
|
await coordinator.async_config_entry_first_refresh()
|
|
|
|
# Fetch all required data concurrently
|
|
device = await bsblan.device()
|
|
info = await bsblan.info()
|
|
static = await bsblan.static_values()
|
|
|
|
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = BSBLanData(
|
|
client=bsblan,
|
|
coordinator=coordinator,
|
|
device=device,
|
|
info=info,
|
|
static=static,
|
|
)
|
|
|
|
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
"""Unload BSBLAN config entry."""
|
|
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
|
# Cleanup
|
|
del hass.data[DOMAIN][entry.entry_id]
|
|
if not hass.data[DOMAIN]:
|
|
del hass.data[DOMAIN]
|
|
return unload_ok
|