Fix lingering timer in esphome (#92533)

This commit is contained in:
epenet 2023-05-17 22:05:44 +02:00 committed by GitHub
parent 3f43184187
commit dad3fbf5e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,7 +10,8 @@ from awesomeversion import AwesomeVersion
from esphome_dashboard_api import ConfiguredDevice, ESPHomeDashboardAPI from esphome_dashboard_api import ConfiguredDevice, ESPHomeDashboardAPI
from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntryState from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntryState
from homeassistant.core import HomeAssistant, callback from homeassistant.const import EVENT_HOMEASSISTANT_STOP
from homeassistant.core import Event, HomeAssistant, callback
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@ -31,13 +32,13 @@ async def async_set_dashboard_info(
"""Set the dashboard info.""" """Set the dashboard info."""
url = f"http://{host}:{port}" url = f"http://{host}:{port}"
# Do nothing if we already have this data. if cur_dashboard := async_get_dashboard(hass):
if ( if cur_dashboard.addon_slug == addon_slug and cur_dashboard.url == url:
(cur_dashboard := hass.data.get(KEY_DASHBOARD)) # Do nothing if we already have this data.
and cur_dashboard.addon_slug == addon_slug return
and cur_dashboard.url == url # Clear and make way for new dashboard
): await cur_dashboard.async_shutdown()
return del hass.data[KEY_DASHBOARD]
dashboard = ESPHomeDashboard(hass, addon_slug, url, async_get_clientsession(hass)) dashboard = ESPHomeDashboard(hass, addon_slug, url, async_get_clientsession(hass))
try: try:
@ -48,6 +49,11 @@ async def async_set_dashboard_info(
hass.data[KEY_DASHBOARD] = dashboard hass.data[KEY_DASHBOARD] = dashboard
async def on_hass_stop(_: Event) -> None:
await dashboard.async_shutdown()
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, on_hass_stop)
reloads = [ reloads = [
hass.config_entries.async_reload(entry.entry_id) hass.config_entries.async_reload(entry.entry_id)
for entry in hass.config_entries.async_entries(DOMAIN) for entry in hass.config_entries.async_entries(DOMAIN)