Пример #1
0
    def __post_init__(self, event_cid):
        """Run post-init initialization."""
        if event_cid in EVENT_MAPPING:
            object.__setattr__(self, "event_type", EVENT_MAPPING[event_cid])
        else:
            _LOGGER.warning(
                'Encountered unknown websocket event type: %s ("%s"). Please report it '
                "at https://github.com/bachya/simplisafe-python/issues.",
                event_cid,
                self.info,
            )
            object.__setattr__(self, "event_type", None)

        object.__setattr__(self, "timestamp",
                           utc_from_timestamp(self.timestamp))

        if self.sensor_type is not None:
            try:
                object.__setattr__(self, "sensor_type",
                                   EntityTypes(self.sensor_type))
            except ValueError:
                _LOGGER.warning(
                    'Encountered unknown entity type: %s ("%s"). Please report it at'
                    "https://github.com/home-assistant/home-assistant/issues.",
                    self.sensor_type,
                    self.info,
                )
                object.__setattr__(self, "sensor_type", None)
Пример #2
0
    async def _get_entities(self, cached: bool = True) -> None:
        """Update sensors to the latest values."""
        entities: dict = await self._get_entities_payload(cached)

        _LOGGER.debug("Get entities response: %s", entities)

        entity_data: dict
        for entity_data in entities:
            if not entity_data:
                continue

            try:
                entity_type: EntityTypes = EntityTypes(entity_data["type"])
            except ValueError:
                _LOGGER.error("Unknown entity type: %s", entity_data["type"])
                entity_type = EntityTypes.unknown

            prop = self.locks if entity_type == EntityTypes.lock else self.sensors
            if entity_data["serial"] in prop:
                entity = prop[entity_data["serial"]]
                entity.entity_data = entity_data
            else:
                klass = get_entity_class(entity_type, version=self.version)
                prop[entity_data["serial"]] = klass(  # type: ignore
                    self._request,
                    self._get_entities,
                    self.system_id,
                    entity_type,
                    entity_data,
                )
Пример #3
0
def get_entity_type_from_data(entity_data: dict) -> EntityTypes:
    """Get the entity type of a raw data payload."""
    try:
        return EntityTypes(entity_data["type"])
    except ValueError:
        LOGGER.error("Unknown entity type: %s", entity_data["type"])
        return EntityTypes.unknown
Пример #4
0
    async def async_update(self):
        """Update alarm status."""
        event_data = self._simplisafe.last_event_data[self._system.system_id]

        if event_data.get("pinName"):
            self._changed_by = event_data["pinName"]

        if self._system.state == SystemStates.error:
            self._online = False
            return

        self._online = True

        if self._system.state == SystemStates.off:
            self._state = STATE_ALARM_DISARMED
        elif self._system.state in (SystemStates.home,
                                    SystemStates.home_count):
            self._state = STATE_ALARM_ARMED_HOME
        elif self._system.state in (
                SystemStates.away,
                SystemStates.away_count,
                SystemStates.exit_delay,
        ):
            self._state = STATE_ALARM_ARMED_AWAY
        else:
            self._state = None

        last_event = self._simplisafe.last_event_data[self._system.system_id]

        try:
            last_event_sensor_type = EntityTypes(last_event["sensorType"]).name
        except ValueError:
            _LOGGER.warning(
                'Encountered unknown entity type: %s ("%s"). Please report it at'
                "https://github.com/home-assistant/home-assistant/issues.",
                last_event["sensorType"],
                last_event["sensorName"],
            )
            last_event_sensor_type = None

        self._attrs.update({
            ATTR_LAST_EVENT_INFO:
            last_event["info"],
            ATTR_LAST_EVENT_SENSOR_NAME:
            last_event["sensorName"],
            ATTR_LAST_EVENT_SENSOR_TYPE:
            last_event_sensor_type,
            ATTR_LAST_EVENT_TIMESTAMP:
            utc_from_timestamp(last_event["eventTimestamp"]),
            ATTR_LAST_EVENT_TYPE:
            last_event["eventType"],
        })
Пример #5
0
    def __init__(self, simplisafe, system, name, *, serial=None):
        """Initialize."""
        super().__init__(simplisafe.coordinator)
        self._name = name
        self._online = True
        self._simplisafe = simplisafe
        self._system = system
        self.websocket_events_to_listen_for = [
            EVENT_CONNECTION_LOST,
            EVENT_CONNECTION_RESTORED,
        ]

        if serial:
            self._serial = serial
        else:
            self._serial = system.serial

        try:
            sensor_type = EntityTypes(
                simplisafe.initial_event_to_use[system.system_id].get("sensorType")
            )
        except ValueError:
            sensor_type = EntityTypes.unknown

        self._attrs = {
            ATTR_LAST_EVENT_INFO: simplisafe.initial_event_to_use[system.system_id].get(
                "info"
            ),
            ATTR_LAST_EVENT_SENSOR_NAME: simplisafe.initial_event_to_use[
                system.system_id
            ].get("sensorName"),
            ATTR_LAST_EVENT_SENSOR_TYPE: sensor_type.name,
            ATTR_LAST_EVENT_TIMESTAMP: simplisafe.initial_event_to_use[
                system.system_id
            ].get("eventTimestamp"),
            ATTR_SYSTEM_ID: system.system_id,
        }

        self._device_info = {
            "identifiers": {(DOMAIN, system.system_id)},
            "manufacturer": "SimpliSafe",
            "model": system.version,
            "name": name,
            "via_device": (DOMAIN, system.serial),
        }
    async def async_update(self):
        """Update alarm status."""
        event_data = self._simplisafe.last_event_data[self._system.system_id]

        if event_data.get("pinName"):
            self._changed_by = event_data["pinName"]

        if self._system.state == SystemStates.error:
            self._online = False
            return

        self._online = True

        if self._system.state == SystemStates.off:
            self._state = STATE_ALARM_DISARMED
        elif self._system.state in (SystemStates.home,
                                    SystemStates.home_count):
            self._state = STATE_ALARM_ARMED_HOME
        elif self._system.state in (
                SystemStates.away,
                SystemStates.away_count,
                SystemStates.exit_delay,
        ):
            self._state = STATE_ALARM_ARMED_AWAY
        else:
            self._state = None

        last_event = self._simplisafe.last_event_data[self._system.system_id]
        self._attrs.update({
            ATTR_LAST_EVENT_INFO:
            last_event["info"],
            ATTR_LAST_EVENT_SENSOR_NAME:
            last_event["sensorName"],
            ATTR_LAST_EVENT_SENSOR_TYPE:
            EntityTypes(last_event["sensorType"]).name,
            ATTR_LAST_EVENT_TIMESTAMP:
            utc_from_timestamp(last_event["eventTimestamp"]),
            ATTR_LAST_EVENT_TYPE:
            last_event["eventType"],
        })
Пример #7
0
 def __post_init__(self, event_data):
     """Initialize."""
     object.__setattr__(self, "changed_by", event_data["pinName"])
     object.__setattr__(self, "event_type",
                        get_event_type_from_payload(event_data))
     object.__setattr__(self, "info", event_data["info"])
     object.__setattr__(self, "sensor_name", event_data["sensorName"])
     object.__setattr__(self, "sensor_serial", event_data["sensorSerial"])
     try:
         object.__setattr__(self, "sensor_type",
                            EntityTypes(event_data["sensorType"]).name)
     except ValueError:
         _LOGGER.warning(
             'Encountered unknown entity type: %s ("%s"). Please report it at'
             "https://github.com/home-assistant/home-assistant/issues.",
             event_data["sensorType"],
             event_data["sensorName"],
         )
         object.__setattr__(self, "sensor_type", None)
     object.__setattr__(self, "system_id", event_data["sid"])
     object.__setattr__(self, "timestamp",
                        utc_from_timestamp(event_data["eventTimestamp"]))