mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 20:27:08 +00:00
Introduce base entity for totalconnect (#115936)
This commit is contained in:
parent
895f73d8e4
commit
f26ac465b5
@ -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 = (
|
||||||
|
@ -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
|
||||||
|
35
homeassistant/components/totalconnect/entity.py
Normal file
35
homeassistant/components/totalconnect/entity.py
Normal 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,
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user