Skip to content

Commit 6c8dffd

Browse files
authored
Add base entity to sfr_box (#155418)
1 parent 0976301 commit 6c8dffd

File tree

4 files changed

+58
-59
lines changed

4 files changed

+58
-59
lines changed

homeassistant/components/sfr_box/binary_sensor.py

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from dataclasses import dataclass
77
from typing import TYPE_CHECKING
88

9-
from sfrbox_api.models import DslInfo, FtthInfo, SystemInfo, WanInfo
9+
from sfrbox_api.models import DslInfo, FtthInfo, WanInfo
1010

1111
from homeassistant.components.binary_sensor import (
1212
BinarySensorDeviceClass,
@@ -15,12 +15,10 @@
1515
)
1616
from homeassistant.const import EntityCategory
1717
from homeassistant.core import HomeAssistant
18-
from homeassistant.helpers.device_registry import DeviceInfo
1918
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
20-
from homeassistant.helpers.update_coordinator import CoordinatorEntity
2119

22-
from .const import DOMAIN
23-
from .coordinator import SFRConfigEntry, SFRDataUpdateCoordinator
20+
from .coordinator import SFRConfigEntry
21+
from .entity import SFRCoordinatorEntity
2422

2523

2624
@dataclass(frozen=True, kw_only=True)
@@ -88,29 +86,10 @@ async def async_setup_entry(
8886
async_add_entities(entities)
8987

9088

91-
class SFRBoxBinarySensor[_T](
92-
CoordinatorEntity[SFRDataUpdateCoordinator[_T]], BinarySensorEntity
93-
):
94-
"""SFR Box sensor."""
89+
class SFRBoxBinarySensor[_T](SFRCoordinatorEntity[_T], BinarySensorEntity):
90+
"""SFR Box binary sensor."""
9591

9692
entity_description: SFRBoxBinarySensorEntityDescription[_T]
97-
_attr_has_entity_name = True
98-
99-
def __init__(
100-
self,
101-
coordinator: SFRDataUpdateCoordinator[_T],
102-
description: SFRBoxBinarySensorEntityDescription,
103-
system_info: SystemInfo,
104-
) -> None:
105-
"""Initialize the sensor."""
106-
super().__init__(coordinator)
107-
self.entity_description = description
108-
self._attr_unique_id = (
109-
f"{system_info.mac_addr}_{coordinator.name}_{description.key}"
110-
)
111-
self._attr_device_info = DeviceInfo(
112-
identifiers={(DOMAIN, system_info.mac_addr)},
113-
)
11493

11594
@property
11695
def is_on(self) -> bool | None:

homeassistant/components/sfr_box/button.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@
1919
from homeassistant.const import EntityCategory
2020
from homeassistant.core import HomeAssistant
2121
from homeassistant.exceptions import HomeAssistantError
22-
from homeassistant.helpers.device_registry import DeviceInfo
2322
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
2423

25-
from .const import DOMAIN
2624
from .coordinator import SFRConfigEntry
25+
from .entity import SFREntity
2726

2827

2928
def with_error_wrapping[**_P, _R](
@@ -80,25 +79,20 @@ async def async_setup_entry(
8079
async_add_entities(entities)
8180

8281

83-
class SFRBoxButton(ButtonEntity):
84-
"""Mixin for button specific attributes."""
82+
class SFRBoxButton(SFREntity, ButtonEntity):
83+
"""SFR Box button."""
8584

8685
entity_description: SFRBoxButtonEntityDescription
87-
_attr_has_entity_name = True
8886

8987
def __init__(
9088
self,
9189
box: SFRBox,
9290
description: SFRBoxButtonEntityDescription,
9391
system_info: SystemInfo,
9492
) -> None:
95-
"""Initialize the sensor."""
96-
self.entity_description = description
93+
"""Initialize the button."""
94+
super().__init__(description, system_info)
9795
self._box = box
98-
self._attr_unique_id = f"{system_info.mac_addr}_{description.key}"
99-
self._attr_device_info = DeviceInfo(
100-
identifiers={(DOMAIN, system_info.mac_addr)},
101-
)
10296

10397
@with_error_wrapping
10498
async def async_press(self) -> None:
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
"""SFR Box base entity."""
2+
3+
from __future__ import annotations
4+
5+
from sfrbox_api.models import SystemInfo
6+
7+
from homeassistant.helpers.device_registry import DeviceInfo
8+
from homeassistant.helpers.entity import Entity, EntityDescription
9+
from homeassistant.helpers.update_coordinator import CoordinatorEntity
10+
11+
from .const import DOMAIN
12+
from .coordinator import SFRDataUpdateCoordinator
13+
14+
15+
class SFREntity(Entity):
16+
"""SFR Box entity."""
17+
18+
_attr_has_entity_name = True
19+
20+
def __init__(self, description: EntityDescription, system_info: SystemInfo) -> None:
21+
"""Initialize the entity."""
22+
self.entity_description = description
23+
self._attr_device_info = DeviceInfo(
24+
identifiers={(DOMAIN, system_info.mac_addr)},
25+
)
26+
self._attr_unique_id = f"{system_info.mac_addr}_{description.key}"
27+
28+
29+
class SFRCoordinatorEntity[_T](
30+
CoordinatorEntity[SFRDataUpdateCoordinator[_T]], SFREntity
31+
):
32+
"""SFR Box coordinator entity."""
33+
34+
def __init__(
35+
self,
36+
coordinator: SFRDataUpdateCoordinator[_T],
37+
description: EntityDescription,
38+
system_info: SystemInfo,
39+
) -> None:
40+
"""Initialize the sensor."""
41+
super().__init__(coordinator)
42+
SFREntity.__init__(self, description, system_info)
43+
self._attr_unique_id = (
44+
f"{system_info.mac_addr}_{coordinator.name}_{description.key}"
45+
)

homeassistant/components/sfr_box/sensor.py

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,11 @@
2020
UnitOfTemperature,
2121
)
2222
from homeassistant.core import HomeAssistant
23-
from homeassistant.helpers.device_registry import DeviceInfo
2423
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
2524
from homeassistant.helpers.typing import StateType
26-
from homeassistant.helpers.update_coordinator import CoordinatorEntity
2725

28-
from .const import DOMAIN
29-
from .coordinator import SFRConfigEntry, SFRDataUpdateCoordinator
26+
from .coordinator import SFRConfigEntry
27+
from .entity import SFRCoordinatorEntity
3028

3129

3230
@dataclass(frozen=True, kw_only=True)
@@ -244,27 +242,10 @@ async def async_setup_entry(
244242
async_add_entities(entities)
245243

246244

247-
class SFRBoxSensor[_T](CoordinatorEntity[SFRDataUpdateCoordinator[_T]], SensorEntity):
245+
class SFRBoxSensor[_T](SFRCoordinatorEntity[_T], SensorEntity):
248246
"""SFR Box sensor."""
249247

250248
entity_description: SFRBoxSensorEntityDescription[_T]
251-
_attr_has_entity_name = True
252-
253-
def __init__(
254-
self,
255-
coordinator: SFRDataUpdateCoordinator[_T],
256-
description: SFRBoxSensorEntityDescription,
257-
system_info: SystemInfo,
258-
) -> None:
259-
"""Initialize the sensor."""
260-
super().__init__(coordinator)
261-
self.entity_description = description
262-
self._attr_unique_id = (
263-
f"{system_info.mac_addr}_{coordinator.name}_{description.key}"
264-
)
265-
self._attr_device_info = DeviceInfo(
266-
identifiers={(DOMAIN, system_info.mac_addr)},
267-
)
268249

269250
@property
270251
def native_value(self) -> StateType:

0 commit comments

Comments
 (0)