def _watch_keypad(self, keypad, changeset): if keypad.area != self._element.index: return if changeset.get("last_user") is not None: self._changed_by_keypad = keypad.name self._changed_by_time = keypad.last_user_time.isoformat() self._changed_by_id = keypad.last_user + 1 self._changed_by = username(self._elk, keypad.last_user) self.async_write_ha_state()
class ElkArea(ElkAttachedEntity, AlarmControlPanelEntity, RestoreEntity): """Representation of an Area / Partition within the ElkM1 alarm panel.""" def __init__(self, element, elk, elk_data): """Initialize Area as Alarm Control Panel.""" super().__init__(element, elk, elk_data) self._elk = elk self._changed_by_keypad = None self._changed_by_time = None self._changed_by_id = None self._changed_by = None self._state = None async def async_added_to_hass(self): """Register callback for ElkM1 changes.""" await super().async_added_to_hass() if len(self._elk.areas.elements) == 1: for keypad in self._elk.keypads: keypad.add_callback(self._watch_keypad) self._element.add_callback(self._watch_area) # We do not get changed_by back from resync. last_state = await self.async_get_last_state() if not last_state: return if ATTR_CHANGED_BY_KEYPAD in last_state.attributes: self._changed_by_keypad = last_state.attributes[ ATTR_CHANGED_BY_KEYPAD] if ATTR_CHANGED_BY_TIME in last_state.attributes: self._changed_by_time = last_state.attributes[ATTR_CHANGED_BY_TIME] if ATTR_CHANGED_BY_ID in last_state.attributes: self._changed_by_id = last_state.attributes[ATTR_CHANGED_BY_ID] if ATTR_CHANGED_BY in last_state.attributes: self._changed_by = last_state.attributes[ATTR_CHANGED_BY] def _watch_keypad(self, keypad, changeset): if keypad.area != self._element.index: return if changeset.get("last_user") is not None: self._changed_by_keypad = keypad.name self._changed_by_time = keypad.last_user_time.isoformat() self._changed_by_id = keypad.last_user + 1 self._changed_by = username(self._elk, keypad.last_user) self.async_write_ha_state() def _watch_area(self, area, changeset): if not (last_log := changeset.get("last_log")): return # user_number only set for arm/disarm logs if not last_log.get("user_number"): return self._changed_by_keypad = None self._changed_by_id = last_log["user_number"] self._changed_by = username(self._elk, self._changed_by_id - 1) self._changed_by_time = last_log["timestamp"] self.async_write_ha_state()
def device_state_attributes(self): """Attributes of the sensor.""" attrs = self.initial_attrs() attrs["area"] = self._element.area + 1 attrs["temperature"] = self._state attrs["last_user_time"] = self._element.last_user_time.isoformat() attrs["last_user"] = self._element.last_user + 1 attrs["code"] = self._element.code attrs["last_user_name"] = username(self._elk, self._element.last_user) attrs["last_keypress"] = self._element.last_keypress return attrs
def _watch_area(self, area, changeset): last_log = changeset.get("last_log") if not last_log: return # user_number only set for arm/disarm logs if not last_log.get("user_number"): return self._changed_by_keypad = None self._changed_by_id = last_log["user_number"] self._changed_by = username(self._elk, self._changed_by_id - 1) self._changed_by_time = last_log["timestamp"] self.async_write_ha_state()
def device_state_attributes(self): """Attributes of the sensor.""" from elkm1_lib.util import username attrs = self.initial_attrs() attrs['area'] = self._element.area + 1 attrs['temperature'] = self._element.temperature attrs['last_user_time'] = self._element.last_user_time.isoformat() attrs['last_user'] = self._element.last_user + 1 attrs['code'] = self._element.code attrs['last_user_name'] = username(self._elk, self._element.last_user) return attrs
def device_state_attributes(self): """Attributes of the sensor.""" from elkm1_lib.util import username attrs = self.initial_attrs() attrs['area'] = self._element.area + 1 attrs['temperature'] = self._element.temperature attrs['last_user_time'] = self._element.last_user_time.isoformat() attrs['last_user'] = self._element.last_user + 1 attrs['code'] = self._element.code attrs['last_user_name'] = username(self._elk, self._element.last_user) return attrs
if changeset.get("last_user") is not None: self._changed_by_keypad = keypad.name self._changed_by_time = keypad.last_user_time.isoformat() self._changed_by_id = keypad.last_user + 1 self._changed_by = username(self._elk, keypad.last_user) self.async_write_ha_state() def _watch_area(self, area, changeset): if not (last_log := changeset.get("last_log")): return # user_number only set for arm/disarm logs if not last_log.get("user_number"): return self._changed_by_keypad = None self._changed_by_id = last_log["user_number"] self._changed_by = username(self._elk, self._changed_by_id - 1) self._changed_by_time = last_log["timestamp"] self.async_write_ha_state() @property def code_format(self): """Return the alarm code format.""" return FORMAT_NUMBER @property def state(self): """Return the state of the element.""" return self._state @property def supported_features(self) -> int: