mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
Add support for Bond fireplaces with integrated lights (#41255)
This commit is contained in:
parent
e5eae22ad8
commit
6366872119
@ -18,10 +18,13 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
class BondEntity(Entity):
|
class BondEntity(Entity):
|
||||||
"""Generic Bond entity encapsulating common features of any Bond controlled device."""
|
"""Generic Bond entity encapsulating common features of any Bond controlled device."""
|
||||||
|
|
||||||
def __init__(self, hub: BondHub, device: BondDevice):
|
def __init__(
|
||||||
|
self, hub: BondHub, device: BondDevice, sub_device: Optional[str] = None
|
||||||
|
):
|
||||||
"""Initialize entity with API and device info."""
|
"""Initialize entity with API and device info."""
|
||||||
self._hub = hub
|
self._hub = hub
|
||||||
self._device = device
|
self._device = device
|
||||||
|
self._sub_device = sub_device
|
||||||
self._available = True
|
self._available = True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -29,7 +32,8 @@ class BondEntity(Entity):
|
|||||||
"""Get unique ID for the entity."""
|
"""Get unique ID for the entity."""
|
||||||
hub_id = self._hub.bond_id
|
hub_id = self._hub.bond_id
|
||||||
device_id = self._device.device_id
|
device_id = self._device.device_id
|
||||||
return f"{hub_id}_{device_id}"
|
sub_device_id: str = f"_{self._sub_device}" if self._sub_device else ""
|
||||||
|
return f"{hub_id}_{device_id}{sub_device_id}"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> Optional[str]:
|
def name(self) -> Optional[str]:
|
||||||
|
@ -29,7 +29,7 @@ async def async_setup_entry(
|
|||||||
"""Set up Bond light devices."""
|
"""Set up Bond light devices."""
|
||||||
hub: BondHub = hass.data[DOMAIN][entry.entry_id]
|
hub: BondHub = hass.data[DOMAIN][entry.entry_id]
|
||||||
|
|
||||||
lights: List[Entity] = [
|
fan_lights: List[Entity] = [
|
||||||
BondLight(hub, device)
|
BondLight(hub, device)
|
||||||
for device in hub.devices
|
for device in hub.devices
|
||||||
if DeviceType.is_fan(device.type) and device.supports_light()
|
if DeviceType.is_fan(device.type) and device.supports_light()
|
||||||
@ -41,15 +41,23 @@ async def async_setup_entry(
|
|||||||
if DeviceType.is_fireplace(device.type)
|
if DeviceType.is_fireplace(device.type)
|
||||||
]
|
]
|
||||||
|
|
||||||
async_add_entities(lights + fireplaces, True)
|
fp_lights: List[Entity] = [
|
||||||
|
BondLight(hub, device, "light")
|
||||||
|
for device in hub.devices
|
||||||
|
if DeviceType.is_fireplace(device.type) and device.supports_light()
|
||||||
|
]
|
||||||
|
|
||||||
|
async_add_entities(fan_lights + fireplaces + fp_lights, True)
|
||||||
|
|
||||||
|
|
||||||
class BondLight(BondEntity, LightEntity):
|
class BondLight(BondEntity, LightEntity):
|
||||||
"""Representation of a Bond light."""
|
"""Representation of a Bond light."""
|
||||||
|
|
||||||
def __init__(self, hub: BondHub, device: BondDevice):
|
def __init__(
|
||||||
|
self, hub: BondHub, device: BondDevice, sub_device: Optional[str] = None
|
||||||
|
):
|
||||||
"""Create HA entity representing Bond fan."""
|
"""Create HA entity representing Bond fan."""
|
||||||
super().__init__(hub, device)
|
super().__init__(hub, device, sub_device)
|
||||||
self._brightness: Optional[int] = None
|
self._brightness: Optional[int] = None
|
||||||
self._light: Optional[int] = None
|
self._light: Optional[int] = None
|
||||||
|
|
||||||
|
@ -49,24 +49,74 @@ def dimmable_ceiling_fan(name: str):
|
|||||||
|
|
||||||
def fireplace(name: str):
|
def fireplace(name: str):
|
||||||
"""Create a fireplace with given name."""
|
"""Create a fireplace with given name."""
|
||||||
return {"name": name, "type": DeviceType.FIREPLACE}
|
return {
|
||||||
|
"name": name,
|
||||||
|
"type": DeviceType.FIREPLACE,
|
||||||
|
"actions": [Action.TURN_ON, Action.TURN_OFF],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async def test_entity_registry(hass: core.HomeAssistant):
|
def fireplace_with_light(name: str):
|
||||||
"""Tests that the devices are registered in the entity registry."""
|
"""Create a fireplace with given name."""
|
||||||
|
return {
|
||||||
|
"name": name,
|
||||||
|
"type": DeviceType.FIREPLACE,
|
||||||
|
"actions": [
|
||||||
|
Action.TURN_ON,
|
||||||
|
Action.TURN_OFF,
|
||||||
|
Action.TURN_LIGHT_ON,
|
||||||
|
Action.TURN_LIGHT_OFF,
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async def test_fan_entity_registry(hass: core.HomeAssistant):
|
||||||
|
"""Tests that fan with light devices are registered in the entity registry."""
|
||||||
await setup_platform(
|
await setup_platform(
|
||||||
hass,
|
hass,
|
||||||
LIGHT_DOMAIN,
|
LIGHT_DOMAIN,
|
||||||
ceiling_fan("name-1"),
|
ceiling_fan("fan-name"),
|
||||||
bond_version={"bondid": "test-hub-id"},
|
bond_version={"bondid": "test-hub-id"},
|
||||||
bond_device_id="test-device-id",
|
bond_device_id="test-device-id",
|
||||||
)
|
)
|
||||||
|
|
||||||
registry: EntityRegistry = await hass.helpers.entity_registry.async_get_registry()
|
registry: EntityRegistry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
entity = registry.entities["light.name_1"]
|
entity = registry.entities["light.fan_name"]
|
||||||
assert entity.unique_id == "test-hub-id_test-device-id"
|
assert entity.unique_id == "test-hub-id_test-device-id"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_fireplace_entity_registry(hass: core.HomeAssistant):
|
||||||
|
"""Tests that flame fireplace devices are registered in the entity registry."""
|
||||||
|
await setup_platform(
|
||||||
|
hass,
|
||||||
|
LIGHT_DOMAIN,
|
||||||
|
fireplace("fireplace-name"),
|
||||||
|
bond_version={"bondid": "test-hub-id"},
|
||||||
|
bond_device_id="test-device-id",
|
||||||
|
)
|
||||||
|
|
||||||
|
registry: EntityRegistry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
|
entity = registry.entities["light.fireplace_name"]
|
||||||
|
assert entity.unique_id == "test-hub-id_test-device-id"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_fireplace_with_light_entity_registry(hass: core.HomeAssistant):
|
||||||
|
"""Tests that flame+light devices are registered in the entity registry."""
|
||||||
|
await setup_platform(
|
||||||
|
hass,
|
||||||
|
LIGHT_DOMAIN,
|
||||||
|
fireplace_with_light("fireplace-name"),
|
||||||
|
bond_version={"bondid": "test-hub-id"},
|
||||||
|
bond_device_id="test-device-id",
|
||||||
|
)
|
||||||
|
|
||||||
|
registry: EntityRegistry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
|
entity_flame = registry.entities["light.fireplace_name"]
|
||||||
|
assert entity_flame.unique_id == "test-hub-id_test-device-id"
|
||||||
|
entity_light = registry.entities["light.fireplace_name_2"]
|
||||||
|
assert entity_light.unique_id == "test-hub-id_test-device-id_light"
|
||||||
|
|
||||||
|
|
||||||
async def test_sbb_trust_state(hass: core.HomeAssistant):
|
async def test_sbb_trust_state(hass: core.HomeAssistant):
|
||||||
"""Assumed state should be False if device is a Smart by Bond."""
|
"""Assumed state should be False if device is a Smart by Bond."""
|
||||||
version = {
|
version = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user