1 """Support for Ezviz alarm."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from datetime
import timedelta
9 from pyezviz
import PyEzvizError
10 from pyezviz.constants
import DefenseModeType
13 AlarmControlPanelEntity,
14 AlarmControlPanelEntityDescription,
15 AlarmControlPanelEntityFeature,
16 AlarmControlPanelState,
24 from .const
import DATA_COORDINATOR, DOMAIN, MANUFACTURER
25 from .coordinator
import EzvizDataUpdateCoordinator
27 _LOGGER = logging.getLogger(__name__)
33 @dataclass(frozen=True, kw_only=True)
35 """Describe an EZVIZ Alarm control panel entity."""
37 ezviz_alarm_states: list
44 AlarmControlPanelState.DISARMED,
45 AlarmControlPanelState.ARMED_AWAY,
46 AlarmControlPanelState.ARMED_HOME,
52 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
54 """Set up Ezviz alarm control panel."""
55 coordinator: EzvizDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
60 identifiers={(DOMAIN, entry.unique_id)},
63 manufacturer=MANUFACTURER,
67 [
EzvizAlarm(coordinator, entry.entry_id, device_info, ALARM_TYPE)]
72 """Representation of an Ezviz alarm control panel."""
74 entity_description: EzvizAlarmControlPanelEntityDescription
75 _attr_has_entity_name =
True
77 _attr_supported_features = (
78 AlarmControlPanelEntityFeature.ARM_AWAY
79 | AlarmControlPanelEntityFeature.ARM_HOME
81 _attr_code_arm_required =
False
85 coordinator: EzvizDataUpdateCoordinator,
87 device_info: DeviceInfo,
88 entity_description: EzvizAlarmControlPanelEntityDescription,
90 """Initialize alarm control panel entity."""
98 """Entity added to hass."""
102 """Send disarm command."""
104 if self.
coordinatorcoordinator.ezviz_client.api_set_defence_mode(
105 DefenseModeType.HOME_MODE.value
109 except PyEzvizError
as err:
113 """Send arm away command."""
115 if self.
coordinatorcoordinator.ezviz_client.api_set_defence_mode(
116 DefenseModeType.AWAY_MODE.value
120 except PyEzvizError
as err:
124 """Send arm home command."""
126 if self.
coordinatorcoordinator.ezviz_client.api_set_defence_mode(
127 DefenseModeType.SLEEP_MODE.value
131 except PyEzvizError
as err:
135 """Fetch data from EZVIZ."""
136 ezviz_alarm_state_number =
"0"
138 ezviz_alarm_state_number = (
139 self.
coordinatorcoordinator.ezviz_client.get_group_defence_mode()
142 "Updating EZVIZ alarm with response %s", ezviz_alarm_state_number
145 int(ezviz_alarm_state_number)
148 except PyEzvizError
as error:
150 f
"Could not fetch EZVIZ alarm status: {error}"
None async_added_to_hass(self)
None alarm_disarm(self, str|None code=None)
None alarm_arm_home(self, str|None code=None)
None __init__(self, EzvizDataUpdateCoordinator coordinator, str entry_id, DeviceInfo device_info, EzvizAlarmControlPanelEntityDescription entity_description)
None alarm_arm_away(self, str|None code=None)
None async_schedule_update_ha_state(self, bool force_refresh=False)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)