From ab352c3bc9e1353c1e4b3b9ed99d660b4ce0a4b4 Mon Sep 17 00:00:00 2001 From: Kit Klein <33464407+kit-klein@users.noreply.github.com> Date: Thu, 16 Apr 2020 17:08:50 -0400 Subject: [PATCH] Ensure konnected unsubscribes during entry unloads (#34291) --- homeassistant/components/konnected/__init__.py | 13 +++++++++++-- homeassistant/components/konnected/const.py | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/konnected/__init__.py b/homeassistant/components/konnected/__init__.py index ae50e14d40a..56ab439aee3 100644 --- a/homeassistant/components/konnected/__init__.py +++ b/homeassistant/components/konnected/__init__.py @@ -58,6 +58,7 @@ from .const import ( PIN_TO_ZONE, STATE_HIGH, STATE_LOW, + UNDO_UPDATE_LISTENER, UPDATE_ENDPOINT, ZONE_TO_PIN, ZONES, @@ -254,7 +255,7 @@ async def async_setup(hass: HomeAssistant, config: dict): async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): """Set up panel from a config entry.""" client = AlarmPanel(hass, entry) - # create a data store in hass.data[DOMAIN][CONF_DEVICES] + # creates a panel data store in hass.data[DOMAIN][CONF_DEVICES] await client.async_save_data() try: @@ -267,7 +268,11 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): hass.async_create_task( hass.config_entries.async_forward_entry_setup(entry, component) ) - entry.add_update_listener(async_entry_updated) + + # config entry specific data to enable unload + hass.data[DOMAIN][entry.entry_id] = { + UNDO_UPDATE_LISTENER: entry.add_update_listener(async_entry_updated) + } return True @@ -281,8 +286,12 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): ] ) ) + + hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENER]() + if unload_ok: hass.data[DOMAIN][CONF_DEVICES].pop(entry.data[CONF_ID]) + hass.data[DOMAIN].pop(entry.entry_id) return unload_ok diff --git a/homeassistant/components/konnected/const.py b/homeassistant/components/konnected/const.py index 7cb0ffc5f80..c1e7d6b6f26 100644 --- a/homeassistant/components/konnected/const.py +++ b/homeassistant/components/konnected/const.py @@ -47,3 +47,5 @@ ZONE_TO_PIN = {zone: pin for pin, zone in PIN_TO_ZONE.items()} ENDPOINT_ROOT = "/api/konnected" UPDATE_ENDPOINT = ENDPOINT_ROOT + r"/device/{device_id:[a-zA-Z0-9]+}" SIGNAL_DS18B20_NEW = "konnected.ds18b20.new" + +UNDO_UPDATE_LISTENER = "undo_update_listener"