From b4e85b769267f008be9f272cfe1bcf474df2c63e Mon Sep 17 00:00:00 2001 From: Robert Hillis Date: Fri, 12 May 2023 07:29:56 -0400 Subject: [PATCH] Move Netgear LTE entity to its own file (#92944) --- .../components/netgear_lte/__init__.py | 53 +------------------ .../components/netgear_lte/binary_sensor.py | 2 +- .../components/netgear_lte/entity.py | 41 ++++++++++++++ .../components/netgear_lte/sensor.py | 2 +- 4 files changed, 44 insertions(+), 54 deletions(-) create mode 100644 homeassistant/components/netgear_lte/entity.py diff --git a/homeassistant/components/netgear_lte/__init__.py b/homeassistant/components/netgear_lte/__init__.py index 77bd83a6edd..14aee229617 100644 --- a/homeassistant/components/netgear_lte/__init__.py +++ b/homeassistant/components/netgear_lte/__init__.py @@ -19,11 +19,7 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant, ServiceCall, callback from homeassistant.helpers import config_validation as cv, discovery from homeassistant.helpers.aiohttp_client import async_create_clientsession -from homeassistant.helpers.dispatcher import ( - async_dispatcher_connect, - async_dispatcher_send, -) -from homeassistant.helpers.entity import Entity +from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.typing import ConfigType @@ -334,50 +330,3 @@ async def _retry_login(hass, modem_data, password): await _login(hass, modem_data, password) except eternalegypt.Error: delay = min(2 * delay, 300) - - -@attr.s -class LTEEntity(Entity): - """Base LTE entity.""" - - modem_data = attr.ib() - sensor_type = attr.ib() - - _unique_id = attr.ib(init=False) - - @_unique_id.default - def _init_unique_id(self): - """Register unique_id while we know data is valid.""" - return f"{self.sensor_type}_{self.modem_data.data.serial_number}" - - async def async_added_to_hass(self): - """Register callback.""" - self.async_on_remove( - async_dispatcher_connect( - self.hass, DISPATCHER_NETGEAR_LTE, self.async_write_ha_state - ) - ) - - async def async_update(self): - """Force update of state.""" - await self.modem_data.async_update() - - @property - def should_poll(self): - """Return that the sensor should not be polled.""" - return False - - @property - def available(self): - """Return the availability of the sensor.""" - return self.modem_data.data is not None - - @property - def unique_id(self): - """Return a unique ID like 'usage_5TG365AB0078V'.""" - return self._unique_id - - @property - def name(self): - """Return the name of the sensor.""" - return f"Netgear LTE {self.sensor_type}" diff --git a/homeassistant/components/netgear_lte/binary_sensor.py b/homeassistant/components/netgear_lte/binary_sensor.py index 7fb119f3dee..add59096024 100644 --- a/homeassistant/components/netgear_lte/binary_sensor.py +++ b/homeassistant/components/netgear_lte/binary_sensor.py @@ -8,8 +8,8 @@ from homeassistant.exceptions import PlatformNotReady from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType -from . import LTEEntity from .const import CONF_BINARY_SENSOR, DOMAIN +from .entity import LTEEntity from .sensor_types import BINARY_SENSOR_CLASSES diff --git a/homeassistant/components/netgear_lte/entity.py b/homeassistant/components/netgear_lte/entity.py new file mode 100644 index 00000000000..33e0aaab749 --- /dev/null +++ b/homeassistant/components/netgear_lte/entity.py @@ -0,0 +1,41 @@ +"""Entity representing a Netgear LTE entity.""" + +from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.helpers.entity import Entity + +from . import ModemData +from .const import DISPATCHER_NETGEAR_LTE + + +class LTEEntity(Entity): + """Base LTE entity.""" + + _attr_should_poll = False + + def __init__( + self, + modem_data: ModemData, + sensor_type: str, + ) -> None: + """Initialize a Netgear LTE entity.""" + self.modem_data = modem_data + self.sensor_type = sensor_type + self._attr_name = f"Netgear LTE {sensor_type}" + self._attr_unique_id = f"{sensor_type}_{modem_data.data.serial_number}" + + async def async_added_to_hass(self) -> None: + """Register callback.""" + self.async_on_remove( + async_dispatcher_connect( + self.hass, DISPATCHER_NETGEAR_LTE, self.async_write_ha_state + ) + ) + + async def async_update(self) -> None: + """Force update of state.""" + await self.modem_data.async_update() + + @property + def available(self) -> bool: + """Return the availability of the sensor.""" + return self.modem_data.data is not None diff --git a/homeassistant/components/netgear_lte/sensor.py b/homeassistant/components/netgear_lte/sensor.py index 27ad0ffe67b..4ca127e5724 100644 --- a/homeassistant/components/netgear_lte/sensor.py +++ b/homeassistant/components/netgear_lte/sensor.py @@ -8,8 +8,8 @@ from homeassistant.exceptions import PlatformNotReady from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType -from . import LTEEntity from .const import CONF_SENSOR, DOMAIN +from .entity import LTEEntity from .sensor_types import SENSOR_SMS, SENSOR_SMS_TOTAL, SENSOR_UNITS, SENSOR_USAGE