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()
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
 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()
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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: