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)
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, )
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
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"], })
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"], })
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"]))