diff --git a/homeassistant/components/agent_dvr/alarm_control_panel.py b/homeassistant/components/agent_dvr/alarm_control_panel.py index 3e093ae46a8..8f139af8963 100644 --- a/homeassistant/components/agent_dvr/alarm_control_panel.py +++ b/homeassistant/components/agent_dvr/alarm_control_panel.py @@ -35,90 +35,60 @@ async def async_setup_entry( class AgentBaseStation(AlarmControlPanelEntity): """Representation of an Agent DVR Alarm Control Panel.""" + _attr_icon = ICON + _attr_supported_features = ( + SUPPORT_ALARM_ARM_HOME | SUPPORT_ALARM_ARM_AWAY | SUPPORT_ALARM_ARM_NIGHT + ) + def __init__(self, client): """Initialize the alarm control panel.""" - self._state = None self._client = client - self._unique_id = f"{client.unique}_CP" - name = CONST_ALARM_CONTROL_PANEL_NAME - self._name = name = f"{client.name} {name}" - - @property - def icon(self): - """Return icon.""" - return ICON - - @property - def state(self): - """Return the state of the device.""" - return self._state - - @property - def supported_features(self) -> int: - """Return the list of supported features.""" - return SUPPORT_ALARM_ARM_HOME | SUPPORT_ALARM_ARM_AWAY | SUPPORT_ALARM_ARM_NIGHT - - @property - def device_info(self): - """Return the device info for adding the entity to the agent object.""" - return { - "identifiers": {(AGENT_DOMAIN, self._client.unique)}, + self._attr_name = f"{client.name} {CONST_ALARM_CONTROL_PANEL_NAME}" + self._attr_unique_id = f"{client.unique}_CP" + self._attr_device_info = { + "identifiers": {(AGENT_DOMAIN, client.unique)}, "manufacturer": "Agent", "model": CONST_ALARM_CONTROL_PANEL_NAME, - "sw_version": self._client.version, + "sw_version": client.version, } async def async_update(self): """Update the state of the device.""" await self._client.update() + self._attr_available = self._client.is_available armed = self._client.is_armed if armed is None: - self._state = None + self._attr_state = None return if armed: prof = (await self._client.get_active_profile()).lower() - self._state = STATE_ALARM_ARMED_AWAY + self._attr_state = STATE_ALARM_ARMED_AWAY if prof == CONF_HOME_MODE_NAME: - self._state = STATE_ALARM_ARMED_HOME + self._attr_state = STATE_ALARM_ARMED_HOME elif prof == CONF_NIGHT_MODE_NAME: - self._state = STATE_ALARM_ARMED_NIGHT + self._attr_state = STATE_ALARM_ARMED_NIGHT else: - self._state = STATE_ALARM_DISARMED + self._attr_state = STATE_ALARM_DISARMED async def async_alarm_disarm(self, code=None): """Send disarm command.""" await self._client.disarm() - self._state = STATE_ALARM_DISARMED + self._attr_state = STATE_ALARM_DISARMED async def async_alarm_arm_away(self, code=None): """Send arm away command. Uses custom mode.""" await self._client.arm() await self._client.set_active_profile(CONF_AWAY_MODE_NAME) - self._state = STATE_ALARM_ARMED_AWAY + self._attr_state = STATE_ALARM_ARMED_AWAY async def async_alarm_arm_home(self, code=None): """Send arm home command. Uses custom mode.""" await self._client.arm() await self._client.set_active_profile(CONF_HOME_MODE_NAME) - self._state = STATE_ALARM_ARMED_HOME + self._attr_state = STATE_ALARM_ARMED_HOME async def async_alarm_arm_night(self, code=None): """Send arm night command. Uses custom mode.""" await self._client.arm() await self._client.set_active_profile(CONF_NIGHT_MODE_NAME) - self._state = STATE_ALARM_ARMED_NIGHT - - @property - def name(self): - """Return the name of the base station.""" - return self._name - - @property - def available(self) -> bool: - """Device available.""" - return self._client.is_available - - @property - def unique_id(self) -> str: - """Return a unique ID.""" - return self._unique_id + self._attr_state = STATE_ALARM_ARMED_NIGHT diff --git a/homeassistant/components/agent_dvr/camera.py b/homeassistant/components/agent_dvr/camera.py index 6b2363f50d5..30c27eb047a 100644 --- a/homeassistant/components/agent_dvr/camera.py +++ b/homeassistant/components/agent_dvr/camera.py @@ -67,31 +67,27 @@ async def async_setup_entry( class AgentCamera(MjpegCamera): """Representation of an Agent Device Stream.""" + _attr_supported_features = SUPPORT_ON_OFF + def __init__(self, device): """Initialize as a subclass of MjpegCamera.""" - self._servername = device.client.name - self.server_url = device.client._server_url - device_info = { CONF_NAME: device.name, - CONF_MJPEG_URL: f"{self.server_url}{device.mjpeg_image_url}&size={device.mjpegStreamWidth}x{device.mjpegStreamHeight}", - CONF_STILL_IMAGE_URL: f"{self.server_url}{device.still_image_url}&size={device.mjpegStreamWidth}x{device.mjpegStreamHeight}", + CONF_MJPEG_URL: f"{device.client._server_url}{device.mjpeg_image_url}&size={device.mjpegStreamWidth}x{device.mjpegStreamHeight}", + CONF_STILL_IMAGE_URL: f"{device.client._server_url}{device.still_image_url}&size={device.mjpegStreamWidth}x{device.mjpegStreamHeight}", } self.device = device self._removed = False - self._name = f"{self._servername} {device.name}" - self._unique_id = f"{device._client.unique}_{device.typeID}_{device.id}" + self._attr_name = f"{device.client.name} {device.name}" + self._attr_unique_id = f"{device._client.unique}_{device.typeID}_{device.id}" + self._attr_should_poll = True super().__init__(device_info) - - @property - def device_info(self): - """Return the device info for adding the entity to the agent object.""" - return { - "identifiers": {(AGENT_DOMAIN, self._unique_id)}, - "name": self._name, + self._attr_device_info = { + "identifiers": {(AGENT_DOMAIN, self.unique_id)}, + "name": self.name, "manufacturer": "Agent", "model": "Camera", - "sw_version": self.device.client.version, + "sw_version": device.client.version, } async def async_update(self): @@ -99,18 +95,18 @@ class AgentCamera(MjpegCamera): try: await self.device.update() if self._removed: - _LOGGER.debug("%s reacquired", self._name) + _LOGGER.debug("%s reacquired", self.name) self._removed = False except AgentError: # server still available - camera error if self.device.client.is_available and not self._removed: - _LOGGER.error("%s lost", self._name) + _LOGGER.error("%s lost", self.name) self._removed = True - - @property - def extra_state_attributes(self): - """Return the Agent DVR camera state attributes.""" - return { + self._attr_available = self.device.client.is_available + self._attr_icon = "mdi:camcorder-off" + if self.is_on: + self._attr_icon = "mdi:camcorder" + self._attr_extra_state_attributes = { ATTR_ATTRIBUTION: ATTRIBUTION, "editable": False, "enabled": self.is_on, @@ -121,11 +117,6 @@ class AgentCamera(MjpegCamera): "alerts_enabled": self.device.alerts_active, } - @property - def should_poll(self) -> bool: - """Update the state periodically.""" - return True - @property def is_recording(self) -> bool: """Return whether the monitor is recording.""" @@ -141,43 +132,21 @@ class AgentCamera(MjpegCamera): """Return whether the monitor has alerted.""" return self.device.detected - @property - def available(self) -> bool: - """Return True if entity is available.""" - return self.device.client.is_available - @property def connected(self) -> bool: """Return True if entity is connected.""" return self.device.connected - @property - def supported_features(self) -> int: - """Return supported features.""" - return SUPPORT_ON_OFF - @property def is_on(self) -> bool: """Return true if on.""" return self.device.online - @property - def icon(self): - """Return the icon to use in the frontend, if any.""" - if self.is_on: - return "mdi:camcorder" - return "mdi:camcorder-off" - @property def motion_detection_enabled(self): """Return the camera motion detection status.""" return self.device.detector_active - @property - def unique_id(self) -> str: - """Return a unique identifier for this agent object.""" - return self._unique_id - async def async_enable_alerts(self): """Enable alerts.""" await self.device.alerts_on()