Introduce base entity for totalconnect (#115936)

This commit is contained in:
Joost Lekkerkerker 2024-04-21 23:38:32 +02:00 committed by GitHub
parent 895f73d8e4
commit f26ac465b5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 46 additions and 28 deletions

View File

@ -23,10 +23,10 @@ from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import entity_platform from homeassistant.helpers import entity_platform
from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import TotalConnectDataUpdateCoordinator from . import TotalConnectDataUpdateCoordinator
from .const import DOMAIN from .const import DOMAIN
from .entity import TotalConnectEntity
SERVICE_ALARM_ARM_AWAY_INSTANT = "arm_away_instant" SERVICE_ALARM_ARM_AWAY_INSTANT = "arm_away_instant"
SERVICE_ALARM_ARM_HOME_INSTANT = "arm_home_instant" SERVICE_ALARM_ARM_HOME_INSTANT = "arm_home_instant"
@ -70,9 +70,7 @@ async def async_setup_entry(
) )
class TotalConnectAlarm( class TotalConnectAlarm(TotalConnectEntity, alarm.AlarmControlPanelEntity):
CoordinatorEntity[TotalConnectDataUpdateCoordinator], alarm.AlarmControlPanelEntity
):
"""Represent an TotalConnect status.""" """Represent an TotalConnect status."""
_attr_supported_features = ( _attr_supported_features = (

View File

@ -15,12 +15,11 @@ from homeassistant.components.binary_sensor import (
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import TotalConnectDataUpdateCoordinator from . import TotalConnectDataUpdateCoordinator
from .const import DOMAIN from .const import DOMAIN
from .entity import TotalConnectEntity, TotalConnectZoneEntity
LOW_BATTERY = "low_battery" LOW_BATTERY = "low_battery"
TAMPER = "tamper" TAMPER = "tamper"
@ -129,7 +128,7 @@ async def async_setup_entry(
for zone in location.zones.values(): for zone in location.zones.values():
sensors.append( sensors.append(
TotalConnectZoneBinarySensor( TotalConnectZoneBinarySensor(
coordinator, SECURITY_BINARY_SENSOR, location_id, zone coordinator, SECURITY_BINARY_SENSOR, zone, location_id
) )
) )
@ -138,8 +137,8 @@ async def async_setup_entry(
TotalConnectZoneBinarySensor( TotalConnectZoneBinarySensor(
coordinator, coordinator,
description, description,
location_id,
zone, zone,
location_id,
) )
for description in NO_BUTTON_BINARY_SENSORS for description in NO_BUTTON_BINARY_SENSORS
) )
@ -147,10 +146,8 @@ async def async_setup_entry(
async_add_entities(sensors) async_add_entities(sensors)
class TotalConnectZoneBinarySensor( class TotalConnectZoneBinarySensor(TotalConnectZoneEntity, BinarySensorEntity):
CoordinatorEntity[TotalConnectDataUpdateCoordinator], BinarySensorEntity """Represent a TotalConnect zone."""
):
"""Represent an TotalConnect zone."""
entity_description: TotalConnectZoneBinarySensorEntityDescription entity_description: TotalConnectZoneBinarySensorEntityDescription
@ -158,28 +155,18 @@ class TotalConnectZoneBinarySensor(
self, self,
coordinator: TotalConnectDataUpdateCoordinator, coordinator: TotalConnectDataUpdateCoordinator,
entity_description: TotalConnectZoneBinarySensorEntityDescription, entity_description: TotalConnectZoneBinarySensorEntityDescription,
location_id: str,
zone: TotalConnectZone, zone: TotalConnectZone,
location_id: str,
) -> None: ) -> None:
"""Initialize the TotalConnect status.""" """Initialize the TotalConnect status."""
super().__init__(coordinator) super().__init__(coordinator, zone, location_id, entity_description.key)
self.entity_description = entity_description self.entity_description = entity_description
self._location_id = location_id
self._zone = zone
self._attr_name = f"{zone.description}{entity_description.name}" self._attr_name = f"{zone.description}{entity_description.name}"
self._attr_unique_id = f"{location_id}_{zone.zoneid}_{entity_description.key}"
self._attr_is_on = None
self._attr_extra_state_attributes = { self._attr_extra_state_attributes = {
"zone_id": zone.zoneid, "zone_id": zone.zoneid,
"location_id": self._location_id, "location_id": location_id,
"partition": zone.partition, "partition": zone.partition,
} }
identifier = zone.sensor_serial_number or f"zone_{zone.zoneid}"
self._attr_device_info = DeviceInfo(
name=zone.description,
identifiers={(DOMAIN, identifier)},
serial_number=zone.sensor_serial_number,
)
@property @property
def is_on(self) -> bool: def is_on(self) -> bool:
@ -194,9 +181,7 @@ class TotalConnectZoneBinarySensor(
return super().device_class return super().device_class
class TotalConnectAlarmBinarySensor( class TotalConnectAlarmBinarySensor(TotalConnectEntity, BinarySensorEntity):
CoordinatorEntity[TotalConnectDataUpdateCoordinator], BinarySensorEntity
):
"""Represent a TotalConnect alarm device binary sensors.""" """Represent a TotalConnect alarm device binary sensors."""
entity_description: TotalConnectAlarmBinarySensorEntityDescription entity_description: TotalConnectAlarmBinarySensorEntityDescription

View File

@ -0,0 +1,35 @@
"""Base class for TotalConnect entities."""
from total_connect_client.zone import TotalConnectZone
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import DOMAIN, TotalConnectDataUpdateCoordinator
class TotalConnectEntity(CoordinatorEntity[TotalConnectDataUpdateCoordinator]):
"""Represent a TotalConnect entity."""
class TotalConnectZoneEntity(TotalConnectEntity):
"""Represent a TotalConnect zone."""
def __init__(
self,
coordinator: TotalConnectDataUpdateCoordinator,
zone: TotalConnectZone,
location_id: str,
key: str,
) -> None:
"""Initialize the TotalConnect zone."""
super().__init__(coordinator)
self._location_id = location_id
self._zone = zone
self._attr_unique_id = f"{location_id}_{zone.zoneid}_{key}"
identifier = zone.sensor_serial_number or f"zone_{zone.zoneid}"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, identifier)},
name=zone.description,
serial_number=zone.sensor_serial_number,
)