mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Prepare eq3btsmart base entity for additional platforms (#130340)
This commit is contained in:
parent
1e26cf13d6
commit
5497c440d9
@ -18,19 +18,13 @@ from homeassistant.const import ATTR_TEMPERATURE, PRECISION_HALVES, UnitOfTemper
|
|||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.exceptions import ServiceValidationError
|
from homeassistant.exceptions import ServiceValidationError
|
||||||
from homeassistant.helpers import device_registry as dr
|
from homeassistant.helpers import device_registry as dr
|
||||||
from homeassistant.helpers.device_registry import CONNECTION_BLUETOOTH, DeviceInfo
|
from homeassistant.helpers.device_registry import CONNECTION_BLUETOOTH
|
||||||
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 . import Eq3ConfigEntry
|
from . import Eq3ConfigEntry
|
||||||
from .const import (
|
from .const import (
|
||||||
DEVICE_MODEL,
|
|
||||||
EQ_TO_HA_HVAC,
|
EQ_TO_HA_HVAC,
|
||||||
HA_TO_EQ_HVAC,
|
HA_TO_EQ_HVAC,
|
||||||
MANUFACTURER,
|
|
||||||
SIGNAL_THERMOSTAT_CONNECTED,
|
|
||||||
SIGNAL_THERMOSTAT_DISCONNECTED,
|
|
||||||
CurrentTemperatureSelector,
|
CurrentTemperatureSelector,
|
||||||
Preset,
|
Preset,
|
||||||
TargetTemperatureSelector,
|
TargetTemperatureSelector,
|
||||||
@ -75,53 +69,6 @@ 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, entry: Eq3ConfigEntry) -> None:
|
|
||||||
"""Initialize the climate entity."""
|
|
||||||
|
|
||||||
super().__init__(entry)
|
|
||||||
self._attr_unique_id = dr.format_mac(self._eq3_config.mac_address)
|
|
||||||
self._attr_device_info = DeviceInfo(
|
|
||||||
name=slugify(self._eq3_config.mac_address),
|
|
||||||
manufacturer=MANUFACTURER,
|
|
||||||
model=DEVICE_MODEL,
|
|
||||||
connections={(CONNECTION_BLUETOOTH, self._eq3_config.mac_address)},
|
|
||||||
)
|
|
||||||
|
|
||||||
async def async_added_to_hass(self) -> None:
|
|
||||||
"""Run when entity about to be added to hass."""
|
|
||||||
|
|
||||||
self._thermostat.register_update_callback(self._async_on_updated)
|
|
||||||
|
|
||||||
self.async_on_remove(
|
|
||||||
async_dispatcher_connect(
|
|
||||||
self.hass,
|
|
||||||
f"{SIGNAL_THERMOSTAT_DISCONNECTED}_{self._eq3_config.mac_address}",
|
|
||||||
self._async_on_disconnected,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
self.async_on_remove(
|
|
||||||
async_dispatcher_connect(
|
|
||||||
self.hass,
|
|
||||||
f"{SIGNAL_THERMOSTAT_CONNECTED}_{self._eq3_config.mac_address}",
|
|
||||||
self._async_on_connected,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
async def async_will_remove_from_hass(self) -> None:
|
|
||||||
"""Run when entity will be removed from hass."""
|
|
||||||
|
|
||||||
self._thermostat.unregister_update_callback(self._async_on_updated)
|
|
||||||
|
|
||||||
@callback
|
|
||||||
def _async_on_disconnected(self) -> None:
|
|
||||||
self._attr_available = False
|
|
||||||
self.async_write_ha_state()
|
|
||||||
|
|
||||||
@callback
|
|
||||||
def _async_on_connected(self) -> None:
|
|
||||||
self._attr_available = True
|
|
||||||
self.async_write_ha_state()
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _async_on_updated(self) -> None:
|
def _async_on_updated(self) -> None:
|
||||||
"""Handle updated data from the thermostat."""
|
"""Handle updated data from the thermostat."""
|
||||||
@ -132,7 +79,7 @@ class Eq3Climate(Eq3Entity, ClimateEntity):
|
|||||||
if self._thermostat.device_data is not None:
|
if self._thermostat.device_data is not None:
|
||||||
self._async_on_device_updated()
|
self._async_on_device_updated()
|
||||||
|
|
||||||
self.async_write_ha_state()
|
super()._async_on_updated()
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _async_on_status_updated(self) -> None:
|
def _async_on_status_updated(self) -> None:
|
||||||
|
@ -20,7 +20,6 @@ DEVICE_MODEL = "CC-RT-BLE-EQ"
|
|||||||
|
|
||||||
GET_DEVICE_TIMEOUT = 5 # seconds
|
GET_DEVICE_TIMEOUT = 5 # seconds
|
||||||
|
|
||||||
|
|
||||||
EQ_TO_HA_HVAC: dict[OperationMode, HVACMode] = {
|
EQ_TO_HA_HVAC: dict[OperationMode, HVACMode] = {
|
||||||
OperationMode.OFF: HVACMode.OFF,
|
OperationMode.OFF: HVACMode.OFF,
|
||||||
OperationMode.ON: HVACMode.HEAT,
|
OperationMode.ON: HVACMode.HEAT,
|
||||||
|
@ -1,8 +1,22 @@
|
|||||||
"""Base class for all eQ-3 entities."""
|
"""Base class for all eQ-3 entities."""
|
||||||
|
|
||||||
|
from homeassistant.core import callback
|
||||||
|
from homeassistant.helpers.device_registry import (
|
||||||
|
CONNECTION_BLUETOOTH,
|
||||||
|
DeviceInfo,
|
||||||
|
format_mac,
|
||||||
|
)
|
||||||
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
|
from homeassistant.util import slugify
|
||||||
|
|
||||||
from . import Eq3ConfigEntry
|
from . import Eq3ConfigEntry
|
||||||
|
from .const import (
|
||||||
|
DEVICE_MODEL,
|
||||||
|
MANUFACTURER,
|
||||||
|
SIGNAL_THERMOSTAT_CONNECTED,
|
||||||
|
SIGNAL_THERMOSTAT_DISCONNECTED,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Eq3Entity(Entity):
|
class Eq3Entity(Entity):
|
||||||
@ -10,8 +24,60 @@ class Eq3Entity(Entity):
|
|||||||
|
|
||||||
_attr_has_entity_name = True
|
_attr_has_entity_name = True
|
||||||
|
|
||||||
def __init__(self, entry: Eq3ConfigEntry) -> None:
|
def __init__(self, entry: Eq3ConfigEntry, unique_id_key: str | None = None) -> None:
|
||||||
"""Initialize the eq3 entity."""
|
"""Initialize the eq3 entity."""
|
||||||
|
|
||||||
self._eq3_config = entry.runtime_data.eq3_config
|
self._eq3_config = entry.runtime_data.eq3_config
|
||||||
self._thermostat = entry.runtime_data.thermostat
|
self._thermostat = entry.runtime_data.thermostat
|
||||||
|
self._attr_device_info = DeviceInfo(
|
||||||
|
name=slugify(self._eq3_config.mac_address),
|
||||||
|
manufacturer=MANUFACTURER,
|
||||||
|
model=DEVICE_MODEL,
|
||||||
|
connections={(CONNECTION_BLUETOOTH, self._eq3_config.mac_address)},
|
||||||
|
)
|
||||||
|
suffix = f"_{unique_id_key}" if unique_id_key else ""
|
||||||
|
self._attr_unique_id = f"{format_mac(self._eq3_config.mac_address)}{suffix}"
|
||||||
|
|
||||||
|
async def async_added_to_hass(self) -> None:
|
||||||
|
"""Run when entity about to be added to hass."""
|
||||||
|
|
||||||
|
self._thermostat.register_update_callback(self._async_on_updated)
|
||||||
|
|
||||||
|
self.async_on_remove(
|
||||||
|
async_dispatcher_connect(
|
||||||
|
self.hass,
|
||||||
|
f"{SIGNAL_THERMOSTAT_DISCONNECTED}_{self._eq3_config.mac_address}",
|
||||||
|
self._async_on_disconnected,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.async_on_remove(
|
||||||
|
async_dispatcher_connect(
|
||||||
|
self.hass,
|
||||||
|
f"{SIGNAL_THERMOSTAT_CONNECTED}_{self._eq3_config.mac_address}",
|
||||||
|
self._async_on_connected,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
async def async_will_remove_from_hass(self) -> None:
|
||||||
|
"""Run when entity will be removed from hass."""
|
||||||
|
|
||||||
|
self._thermostat.unregister_update_callback(self._async_on_updated)
|
||||||
|
|
||||||
|
def _async_on_updated(self) -> None:
|
||||||
|
"""Handle updated data from the thermostat."""
|
||||||
|
|
||||||
|
self.async_write_ha_state()
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def _async_on_disconnected(self) -> None:
|
||||||
|
"""Handle disconnection from the thermostat."""
|
||||||
|
|
||||||
|
self._attr_available = False
|
||||||
|
self.async_write_ha_state()
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def _async_on_connected(self) -> None:
|
||||||
|
"""Handle connection to the thermostat."""
|
||||||
|
|
||||||
|
self._attr_available = True
|
||||||
|
self.async_write_ha_state()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user