Use runtime data for eq3btsmart (#130334)

This commit is contained in:
Lennard Beers 2024-11-11 10:59:50 +01:00 committed by GitHub
parent 0dd208a4b9
commit 1e26cf13d6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 31 additions and 37 deletions

View File

@ -15,7 +15,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.dispatcher import async_dispatcher_send
from .const import DOMAIN, SIGNAL_THERMOSTAT_CONNECTED, SIGNAL_THERMOSTAT_DISCONNECTED from .const import SIGNAL_THERMOSTAT_CONNECTED, SIGNAL_THERMOSTAT_DISCONNECTED
from .models import Eq3Config, Eq3ConfigEntryData from .models import Eq3Config, Eq3ConfigEntryData
PLATFORMS = [ PLATFORMS = [
@ -25,7 +25,10 @@ PLATFORMS = [
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: type Eq3ConfigEntry = ConfigEntry[Eq3ConfigEntryData]
async def async_setup_entry(hass: HomeAssistant, entry: Eq3ConfigEntry) -> bool:
"""Handle config entry setup.""" """Handle config entry setup."""
mac_address: str | None = entry.unique_id mac_address: str | None = entry.unique_id
@ -53,12 +56,11 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
ble_device=device, ble_device=device,
) )
eq3_config_entry = Eq3ConfigEntryData(eq3_config=eq3_config, thermostat=thermostat) entry.runtime_data = Eq3ConfigEntryData(
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = eq3_config_entry eq3_config=eq3_config, thermostat=thermostat
)
entry.async_on_unload(entry.add_update_listener(update_listener)) entry.async_on_unload(entry.add_update_listener(update_listener))
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
entry.async_create_background_task( entry.async_create_background_task(
hass, _async_run_thermostat(hass, entry), entry.entry_id hass, _async_run_thermostat(hass, entry), entry.entry_id
) )
@ -66,29 +68,27 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: Eq3ConfigEntry) -> bool:
"""Handle config entry unload.""" """Handle config entry unload."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
eq3_config_entry: Eq3ConfigEntryData = hass.data[DOMAIN].pop(entry.entry_id) await entry.runtime_data.thermostat.async_disconnect()
await eq3_config_entry.thermostat.async_disconnect()
return unload_ok return unload_ok
async def update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None: async def update_listener(hass: HomeAssistant, entry: Eq3ConfigEntry) -> None:
"""Handle config entry update.""" """Handle config entry update."""
await hass.config_entries.async_reload(entry.entry_id) await hass.config_entries.async_reload(entry.entry_id)
async def _async_run_thermostat(hass: HomeAssistant, entry: ConfigEntry) -> None: async def _async_run_thermostat(hass: HomeAssistant, entry: Eq3ConfigEntry) -> None:
"""Run the thermostat.""" """Run the thermostat."""
eq3_config_entry: Eq3ConfigEntryData = hass.data[DOMAIN][entry.entry_id] thermostat = entry.runtime_data.thermostat
thermostat = eq3_config_entry.thermostat mac_address = entry.runtime_data.eq3_config.mac_address
mac_address = eq3_config_entry.eq3_config.mac_address scan_interval = entry.runtime_data.eq3_config.scan_interval
scan_interval = eq3_config_entry.eq3_config.scan_interval
await _async_reconnect_thermostat(hass, entry) await _async_reconnect_thermostat(hass, entry)
@ -117,13 +117,14 @@ async def _async_run_thermostat(hass: HomeAssistant, entry: ConfigEntry) -> None
await asyncio.sleep(scan_interval) await asyncio.sleep(scan_interval)
async def _async_reconnect_thermostat(hass: HomeAssistant, entry: ConfigEntry) -> None: async def _async_reconnect_thermostat(
hass: HomeAssistant, entry: Eq3ConfigEntry
) -> None:
"""Reconnect the thermostat.""" """Reconnect the thermostat."""
eq3_config_entry: Eq3ConfigEntryData = hass.data[DOMAIN][entry.entry_id] thermostat = entry.runtime_data.thermostat
thermostat = eq3_config_entry.thermostat mac_address = entry.runtime_data.eq3_config.mac_address
mac_address = eq3_config_entry.eq3_config.mac_address scan_interval = entry.runtime_data.eq3_config.scan_interval
scan_interval = eq3_config_entry.eq3_config.scan_interval
while True: while True:
try: try:

View File

@ -3,7 +3,6 @@
import logging import logging
from typing import Any from typing import Any
from eq3btsmart import Thermostat
from eq3btsmart.const import EQ3BT_MAX_TEMP, EQ3BT_OFF_TEMP, Eq3Preset, OperationMode from eq3btsmart.const import EQ3BT_MAX_TEMP, EQ3BT_OFF_TEMP, Eq3Preset, OperationMode
from eq3btsmart.exceptions import Eq3Exception from eq3btsmart.exceptions import Eq3Exception
@ -15,7 +14,6 @@ from homeassistant.components.climate import (
HVACAction, HVACAction,
HVACMode, HVACMode,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, PRECISION_HALVES, UnitOfTemperature from homeassistant.const import ATTR_TEMPERATURE, PRECISION_HALVES, UnitOfTemperature
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import ServiceValidationError from homeassistant.exceptions import ServiceValidationError
@ -25,9 +23,9 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import slugify from homeassistant.util import slugify
from . import Eq3ConfigEntry
from .const import ( from .const import (
DEVICE_MODEL, DEVICE_MODEL,
DOMAIN,
EQ_TO_HA_HVAC, EQ_TO_HA_HVAC,
HA_TO_EQ_HVAC, HA_TO_EQ_HVAC,
MANUFACTURER, MANUFACTURER,
@ -38,22 +36,19 @@ from .const import (
TargetTemperatureSelector, TargetTemperatureSelector,
) )
from .entity import Eq3Entity from .entity import Eq3Entity
from .models import Eq3Config, Eq3ConfigEntryData
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, entry: Eq3ConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Handle config entry setup.""" """Handle config entry setup."""
eq3_config_entry: Eq3ConfigEntryData = hass.data[DOMAIN][config_entry.entry_id]
async_add_entities( async_add_entities(
[Eq3Climate(eq3_config_entry.eq3_config, eq3_config_entry.thermostat)], [Eq3Climate(entry)],
) )
@ -80,11 +75,11 @@ class Eq3Climate(Eq3Entity, ClimateEntity):
_attr_preset_mode: str | None = None _attr_preset_mode: str | None = None
_target_temperature: float | None = None _target_temperature: float | None = None
def __init__(self, eq3_config: Eq3Config, thermostat: Thermostat) -> None: def __init__(self, entry: Eq3ConfigEntry) -> None:
"""Initialize the climate entity.""" """Initialize the climate entity."""
super().__init__(eq3_config, thermostat) super().__init__(entry)
self._attr_unique_id = dr.format_mac(eq3_config.mac_address) self._attr_unique_id = dr.format_mac(self._eq3_config.mac_address)
self._attr_device_info = DeviceInfo( self._attr_device_info = DeviceInfo(
name=slugify(self._eq3_config.mac_address), name=slugify(self._eq3_config.mac_address),
manufacturer=MANUFACTURER, manufacturer=MANUFACTURER,

View File

@ -1,10 +1,8 @@
"""Base class for all eQ-3 entities.""" """Base class for all eQ-3 entities."""
from eq3btsmart.thermostat import Thermostat
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from .models import Eq3Config from . import Eq3ConfigEntry
class Eq3Entity(Entity): class Eq3Entity(Entity):
@ -12,8 +10,8 @@ class Eq3Entity(Entity):
_attr_has_entity_name = True _attr_has_entity_name = True
def __init__(self, eq3_config: Eq3Config, thermostat: Thermostat) -> None: def __init__(self, entry: Eq3ConfigEntry) -> None:
"""Initialize the eq3 entity.""" """Initialize the eq3 entity."""
self._eq3_config = eq3_config self._eq3_config = entry.runtime_data.eq3_config
self._thermostat = thermostat self._thermostat = entry.runtime_data.thermostat