mirror of
https://github.com/home-assistant/core.git
synced 2025-08-07 06:35:10 +02:00
Allow entities to opt out of REST and/or websocket API updates
This commit is contained in:
@@ -517,12 +517,23 @@ class SimpliSafe:
|
|||||||
class SimpliSafeEntity(Entity):
|
class SimpliSafeEntity(Entity):
|
||||||
"""Define a base SimpliSafe 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."""
|
"""Initialize."""
|
||||||
self._async_unsub_dispatcher_connect = None
|
self._async_unsub_dispatcher_connect = None
|
||||||
self._last_used_websocket_event = None
|
self._last_used_websocket_event = None
|
||||||
self._name = name
|
self._name = name
|
||||||
self._online = True
|
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._simplisafe = simplisafe
|
||||||
self._state = None
|
self._state = None
|
||||||
self._system = system
|
self._system = system
|
||||||
@@ -598,28 +609,29 @@ class SimpliSafeEntity(Entity):
|
|||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Update the entity."""
|
"""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
|
if self._respond_to_websocket_api:
|
||||||
# to unnecessarily overwrite things; so, we return if the last websocket event
|
# Since the REST API triggers this coroutine, we don't want old websocket
|
||||||
# is one the entity has already responded to:
|
# events to unnecessarily overwrite things; so, we return if the last
|
||||||
last_websocket_event = self._simplisafe.websocket.last_events.get(
|
# websocket event is one the entity has already responded to:
|
||||||
self._system.system_id
|
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:
|
self._last_used_websocket_event = last_websocket_event
|
||||||
return
|
self._attrs.update(
|
||||||
|
{
|
||||||
self._last_used_websocket_event = last_websocket_event
|
ATTR_LAST_EVENT_INFO: last_websocket_event.info,
|
||||||
self._attrs.update(
|
ATTR_LAST_EVENT_SENSOR_NAME: last_websocket_event.sensor_name,
|
||||||
{
|
ATTR_LAST_EVENT_SENSOR_TYPE: last_websocket_event.sensor_type,
|
||||||
ATTR_LAST_EVENT_INFO: last_websocket_event.info,
|
ATTR_LAST_EVENT_TIMESTAMP: last_websocket_event.timestamp,
|
||||||
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.async_update_from_websocket_event(last_websocket_event)
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_update_from_rest_api(self):
|
def async_update_from_rest_api(self):
|
||||||
|
Reference in New Issue
Block a user