diff --git a/homeassistant/components/traccar/__init__.py b/homeassistant/components/traccar/__init__.py index 9126e0d9db5d..2576196a921d 100644 --- a/homeassistant/components/traccar/__init__.py +++ b/homeassistant/components/traccar/__init__.py @@ -1,5 +1,4 @@ """Support for Traccar Client.""" -# pylint: disable=home-assistant-use-runtime-data # Uses legacy hass.data[DOMAIN] pattern from http import HTTPStatus from json import JSONDecodeError @@ -32,6 +31,8 @@ PLATFORMS = [Platform.DEVICE_TRACKER] TRACKER_UPDATE = f"{DOMAIN}_tracker_update" +type TraccarConfigEntry = ConfigEntry[set[str]] + LOGGER = logging.getLogger(__name__) DEFAULT_ACCURACY = 200 @@ -121,9 +122,9 @@ async def handle_webhook( return web.Response(text=f"Setting location for {device}") -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: TraccarConfigEntry) -> bool: """Configure based on config entry.""" - hass.data.setdefault(DOMAIN, {"devices": set(), "unsub_device_tracker": {}}) + entry.runtime_data = set() webhook.async_register( hass, DOMAIN, "Traccar", entry.data[CONF_WEBHOOK_ID], handle_webhook ) @@ -132,10 +133,9 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: return True -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry(hass: HomeAssistant, entry: TraccarConfigEntry) -> bool: """Unload a config entry.""" webhook.async_unregister(hass, entry.data[CONF_WEBHOOK_ID]) - hass.data[DOMAIN]["unsub_device_tracker"].pop(entry.entry_id)() return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) diff --git a/homeassistant/components/traccar/device_tracker.py b/homeassistant/components/traccar/device_tracker.py index cb9d67496904..c8d96f149a2f 100644 --- a/homeassistant/components/traccar/device_tracker.py +++ b/homeassistant/components/traccar/device_tracker.py @@ -1,5 +1,4 @@ """Support for Traccar device tracking.""" -# pylint: disable=home-assistant-use-runtime-data # Uses legacy hass.data[DOMAIN] pattern from datetime import timedelta import logging @@ -9,7 +8,6 @@ from homeassistant.components.device_tracker import ( TrackerEntity, TrackerEntityStateAttribute, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_BATTERY_LEVEL, EntityStateAttribute from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import device_registry as dr @@ -18,7 +16,7 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.restore_state import RestoreEntity -from . import DOMAIN, TRACKER_UPDATE +from . import DOMAIN, TRACKER_UPDATE, TraccarConfigEntry from .const import ( ATTR_ALTITUDE, ATTR_BEARING, @@ -70,7 +68,7 @@ EVENTS = [ async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: TraccarConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Configure a dispatcher connection based on a config entry.""" @@ -78,18 +76,16 @@ async def async_setup_entry( @callback def _receive_data(device, latitude, longitude, battery, accuracy, attrs): """Receive set location.""" - if device in hass.data[DOMAIN]["devices"]: + if device in entry.runtime_data: return - hass.data[DOMAIN]["devices"].add(device) + entry.runtime_data.add(device) async_add_entities( [TraccarEntity(device, latitude, longitude, battery, accuracy, attrs)] ) - hass.data[DOMAIN]["unsub_device_tracker"][entry.entry_id] = ( - async_dispatcher_connect(hass, TRACKER_UPDATE, _receive_data) - ) + entry.async_on_unload(async_dispatcher_connect(hass, TRACKER_UPDATE, _receive_data)) # Restore previously loaded devices dev_reg = dr.async_get(hass) @@ -103,7 +99,7 @@ async def async_setup_entry( entities = [] for dev_id in dev_ids: - hass.data[DOMAIN]["devices"].add(dev_id) + entry.runtime_data.add(dev_id) entity = TraccarEntity(dev_id, None, None, None, None, None) entities.append(entity)