mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 06:17:07 +00:00
Use runtime data for eq3btsmart (#130334)
This commit is contained in:
parent
0dd208a4b9
commit
1e26cf13d6
@ -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:
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user