From 1989f2e00e0b95dd466bcc803e7c83afab6d2763 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Fri, 7 Feb 2020 10:16:14 -0700 Subject: [PATCH] Allow entities to opt out of REST and/or websocket API updates --- .../components/simplisafe/__init__.py | 54 +++++++++++-------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/simplisafe/__init__.py b/homeassistant/components/simplisafe/__init__.py index 83745078ca6..1ccb0d1ac5b 100644 --- a/homeassistant/components/simplisafe/__init__.py +++ b/homeassistant/components/simplisafe/__init__.py @@ -517,12 +517,23 @@ class SimpliSafe: class SimpliSafeEntity(Entity): """Define a base SimpliSafe entity.""" - def __init__(self, simplisafe, system, name, *, serial=None): + def __init__( + self, + simplisafe, + system, + name, + *, + serial=None, + respond_to_rest_api=True, + respond_to_websocket_api=True, + ): """Initialize.""" self._async_unsub_dispatcher_connect = None self._last_used_websocket_event = None self._name = name self._online = True + self._respond_to_rest_api = respond_to_rest_api + self._respond_to_websocket_api = respond_to_websocket_api self._simplisafe = simplisafe self._state = None self._system = system @@ -598,28 +609,29 @@ class SimpliSafeEntity(Entity): async def async_update(self): """Update the entity.""" - self.async_update_from_rest_api() + if self._respond_to_rest_api: + self.async_update_from_rest_api() - # Since the REST API triggers this coroutine, we don't want old websocket events - # to unnecessarily overwrite things; so, we return if the last websocket event - # is one the entity has already responded to: - last_websocket_event = self._simplisafe.websocket.last_events.get( - self._system.system_id - ) + if self._respond_to_websocket_api: + # Since the REST API triggers this coroutine, we don't want old websocket + # events to unnecessarily overwrite things; so, we return if the last + # websocket event is one the entity has already responded to: + last_websocket_event = self._simplisafe.websocket.last_events.get( + self._system.system_id + ) + if self._last_used_websocket_event == last_websocket_event: + return - if self._last_used_websocket_event == last_websocket_event: - return - - self._last_used_websocket_event = last_websocket_event - self._attrs.update( - { - ATTR_LAST_EVENT_INFO: last_websocket_event.info, - ATTR_LAST_EVENT_SENSOR_NAME: last_websocket_event.sensor_name, - ATTR_LAST_EVENT_SENSOR_TYPE: last_websocket_event.sensor_type, - ATTR_LAST_EVENT_TIMESTAMP: last_websocket_event.timestamp, - } - ) - self.async_update_from_websocket_event(last_websocket_event) + self._last_used_websocket_event = last_websocket_event + self._attrs.update( + { + ATTR_LAST_EVENT_INFO: last_websocket_event.info, + ATTR_LAST_EVENT_SENSOR_NAME: last_websocket_event.sensor_name, + ATTR_LAST_EVENT_SENSOR_TYPE: last_websocket_event.sensor_type, + ATTR_LAST_EVENT_TIMESTAMP: last_websocket_event.timestamp, + } + ) + self.async_update_from_websocket_event(last_websocket_event) @callback def async_update_from_rest_api(self):