1 """Support for Risco alarm zones."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
6 from itertools
import chain
9 from pyrisco.cloud.zone
import Zone
as CloudZone
10 from pyrisco.common
import System
11 from pyrisco.local.zone
import Zone
as LocalZone
14 BinarySensorDeviceClass,
16 BinarySensorEntityDescription,
24 from .
import LocalData, is_local
25 from .const
import DATA_COORDINATOR, DOMAIN, SYSTEM_UPDATE_SIGNAL
26 from .coordinator
import RiscoDataUpdateCoordinator
27 from .entity
import RiscoCloudZoneEntity, RiscoLocalZoneEntity
29 SYSTEM_ENTITY_DESCRIPTIONS = [
31 key=
"low_battery_trouble",
32 translation_key=
"low_battery_trouble",
33 device_class=BinarySensorDeviceClass.BATTERY,
37 translation_key=
"ac_trouble",
38 device_class=BinarySensorDeviceClass.PROBLEM,
41 key=
"monitoring_station_1_trouble",
42 translation_key=
"monitoring_station_1_trouble",
43 device_class=BinarySensorDeviceClass.PROBLEM,
46 key=
"monitoring_station_2_trouble",
47 translation_key=
"monitoring_station_2_trouble",
48 device_class=BinarySensorDeviceClass.PROBLEM,
51 key=
"monitoring_station_3_trouble",
52 translation_key=
"monitoring_station_3_trouble",
53 device_class=BinarySensorDeviceClass.PROBLEM,
56 key=
"phone_line_trouble",
57 translation_key=
"phone_line_trouble",
58 device_class=BinarySensorDeviceClass.PROBLEM,
62 translation_key=
"clock_trouble",
63 device_class=BinarySensorDeviceClass.PROBLEM,
67 translation_key=
"box_tamper",
68 device_class=BinarySensorDeviceClass.TAMPER,
75 config_entry: ConfigEntry,
76 async_add_entities: AddEntitiesCallback,
78 """Set up the Risco alarm control panel."""
80 local_data: LocalData = hass.data[DOMAIN][config_entry.entry_id]
83 for zone_id, zone
in local_data.system.zones.items()
93 local_data.system.id, local_data.system.system, entity_description
95 for entity_description
in SYSTEM_ENTITY_DESCRIPTIONS
100 coordinator: RiscoDataUpdateCoordinator = hass.data[DOMAIN][
101 config_entry.entry_id
105 for zone_id, zone
in coordinator.data.zones.items()
110 """Representation of a Risco cloud zone as a binary sensor."""
112 _attr_device_class = BinarySensorDeviceClass.MOTION
116 self, coordinator: RiscoDataUpdateCoordinator, zone_id: int, zone: CloudZone
119 super().
__init__(coordinator=coordinator, suffix=
"", zone_id=zone_id, zone=zone)
123 """Return true if sensor is on."""
124 return self.
_zone_zone.triggered
128 """Representation of a Risco local zone as a binary sensor."""
130 _attr_device_class = BinarySensorDeviceClass.MOTION
133 def __init__(self, system_id: str, zone_id: int, zone: LocalZone) ->
None:
135 super().
__init__(system_id=system_id, suffix=
"", zone_id=zone_id, zone=zone)
139 """Return the state attributes."""
141 **(super().extra_state_attributes
or {}),
142 "groups": self.
_zone_zone.groups,
147 """Return true if sensor is on."""
148 return self.
_zone_zone.triggered
152 """Representation whether a zone in Risco local is currently triggering an alarm."""
154 _attr_translation_key =
"alarmed"
156 def __init__(self, system_id: str, zone_id: int, zone: LocalZone) ->
None:
167 """Return true if sensor is on."""
168 return self.
_zone_zone.alarmed
172 """Representation whether a zone in Risco local is currently armed."""
174 _attr_translation_key =
"armed"
176 def __init__(self, system_id: str, zone_id: int, zone: LocalZone) ->
None:
187 """Return true if sensor is on."""
188 return self.
_zone_zone.armed
192 """Risco local system binary sensor class."""
194 _attr_should_poll =
False
195 _attr_has_entity_name =
True
201 entity_description: BinarySensorEntityDescription,
203 """Init the sensor."""
208 identifiers={(DOMAIN, system_id)},
209 manufacturer=
"Risco",
215 """Subscribe to updates."""
224 """Return true if sensor is on."""
None __init__(self, RiscoDataUpdateCoordinator coordinator, int zone_id, CloudZone zone)
None __init__(self, str system_id, int zone_id, LocalZone zone)
None __init__(self, str system_id, int zone_id, LocalZone zone)
None __init__(self, str system_id, int zone_id, LocalZone zone)
Mapping[str, Any]|None extra_state_attributes(self)
None __init__(self, str system_id, System system, BinarySensorEntityDescription entity_description)
None async_added_to_hass(self)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
bool is_local(ConfigEntry entry)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)