From 7949357180384a757ce035e4b472f842ebdb521e Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Wed, 12 Aug 2020 15:17:21 +0200 Subject: [PATCH] Unsubscribe ozw listeners (#38787) --- homeassistant/components/ozw/__init__.py | 17 ++++++++++------- homeassistant/components/ozw/entity.py | 20 ++++++++------------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/homeassistant/components/ozw/__init__.py b/homeassistant/components/ozw/__init__.py index bbac0e843e9..ae79850d96f 100644 --- a/homeassistant/components/ozw/__init__.py +++ b/homeassistant/components/ozw/__init__.py @@ -193,13 +193,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): ] # Listen to events for node and value changes - options.listen(EVENT_NODE_ADDED, async_node_added) - options.listen(EVENT_NODE_CHANGED, async_node_changed) - options.listen(EVENT_NODE_REMOVED, async_node_removed) - options.listen(EVENT_VALUE_ADDED, async_value_added) - options.listen(EVENT_VALUE_CHANGED, async_value_changed) - options.listen(EVENT_VALUE_REMOVED, async_value_removed) - options.listen(EVENT_INSTANCE_EVENT, async_instance_event) + for event, event_callback in ( + (EVENT_NODE_ADDED, async_node_added), + (EVENT_NODE_CHANGED, async_node_changed), + (EVENT_NODE_REMOVED, async_node_removed), + (EVENT_VALUE_ADDED, async_value_added), + (EVENT_VALUE_CHANGED, async_value_changed), + (EVENT_VALUE_REMOVED, async_value_removed), + (EVENT_INSTANCE_EVENT, async_instance_event), + ): + ozw_data[DATA_UNSUBSCRIBE].append(options.listen(event, event_callback)) # Register Services services = ZWaveServices(hass, manager) diff --git a/homeassistant/components/ozw/entity.py b/homeassistant/components/ozw/entity.py index 39971d0c976..9c494a514e0 100644 --- a/homeassistant/components/ozw/entity.py +++ b/homeassistant/components/ozw/entity.py @@ -162,10 +162,14 @@ class ZWaveDeviceEntity(Entity): async def async_added_to_hass(self): """Call when entity is added.""" - # add dispatcher and OZW listeners callbacks, - self.options.listen(EVENT_VALUE_CHANGED, self._value_changed) - self.options.listen(EVENT_INSTANCE_STATUS_CHANGED, self._instance_updated) - # add to on_remove so they will be cleaned up on entity removal + # Add dispatcher and OZW listeners callbacks. + # Add to on_remove so they will be cleaned up on entity removal. + self.async_on_remove( + self.options.listen(EVENT_VALUE_CHANGED, self._value_changed) + ) + self.async_on_remove( + self.options.listen(EVENT_INSTANCE_STATUS_CHANGED, self._instance_updated) + ) self.async_on_remove( async_dispatcher_connect( self.hass, const.SIGNAL_DELETE_ENTITY, self._delete_callback @@ -266,14 +270,6 @@ class ZWaveDeviceEntity(Entity): if values_id == self.values.values_id: await self.async_remove() - async def async_will_remove_from_hass(self) -> None: - """Call when entity will be removed from hass.""" - # cleanup OZW listeners - self.options.listeners[EVENT_VALUE_CHANGED].remove(self._value_changed) - self.options.listeners[EVENT_INSTANCE_STATUS_CHANGED].remove( - self._instance_updated - ) - def create_device_name(node: OZWNode): """Generate sensible (short) default device name from a OZWNode."""