mirror of
https://github.com/home-assistant/core.git
synced 2026-09-24 23:41:48 -05:00
Migrate traccar to config entry runtime data (#177393)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user