Address some MQTT review comments (#75482)

This commit is contained in:
Erik Montnemery 2022-07-22 11:12:00 +02:00 committed by GitHub
parent dddd4e24e2
commit f0eea62c1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 11 deletions

View File

@ -10,7 +10,11 @@ from ..const import MQTT_DATA_DEVICE_TRACKER_LEGACY
from ..mixins import warn_for_legacy_schema
from .schema_discovery import PLATFORM_SCHEMA_MODERN # noqa: F401
from .schema_discovery import async_setup_entry_from_discovery
from .schema_yaml import PLATFORM_SCHEMA_YAML, async_setup_scanner_from_yaml
from .schema_yaml import (
PLATFORM_SCHEMA_YAML,
MQTTLegacyDeviceTrackerData,
async_setup_scanner_from_yaml,
)
# Configuring MQTT Device Trackers under the device_tracker platform key is deprecated in HA Core 2022.6
PLATFORM_SCHEMA = vol.All(
@ -30,6 +34,11 @@ async def async_setup_entry(
await async_setup_entry_from_discovery(hass, config_entry, async_add_entities)
# (re)load legacy service
if MQTT_DATA_DEVICE_TRACKER_LEGACY in hass.data:
yaml_device_tracker_data: MQTTLegacyDeviceTrackerData = hass.data[
MQTT_DATA_DEVICE_TRACKER_LEGACY
]
await async_setup_scanner_from_yaml(
hass, **hass.data[MQTT_DATA_DEVICE_TRACKER_LEGACY]
hass,
config=yaml_device_tracker_data.config,
async_see=yaml_device_tracker_data.async_see,
)

View File

@ -1,6 +1,8 @@
"""Support for tracking MQTT enabled devices defined in YAML."""
from __future__ import annotations
from collections.abc import Callable
from collections.abc import Awaitable, Callable
import dataclasses
import logging
from typing import Any
@ -10,6 +12,7 @@ from homeassistant.components.device_tracker import PLATFORM_SCHEMA, SOURCE_TYPE
from homeassistant.const import CONF_DEVICES, STATE_HOME, STATE_NOT_HOME
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from ... import mqtt
from ..client import async_subscribe
@ -33,9 +36,20 @@ PLATFORM_SCHEMA_YAML = PLATFORM_SCHEMA.extend(SCHEMA_BASE).extend(
)
@dataclasses.dataclass
class MQTTLegacyDeviceTrackerData:
"""Class to hold device tracker data."""
async_see: Callable[..., Awaitable[None]]
config: ConfigType
async def async_setup_scanner_from_yaml(
hass: HomeAssistant, config, async_see, discovery_info=None
):
hass: HomeAssistant,
config: ConfigType,
async_see: Callable[..., Awaitable[None]],
discovery_info: DiscoveryInfoType | None = None,
) -> bool:
"""Set up the MQTT tracker."""
devices = config[CONF_DEVICES]
qos = config[CONF_QOS]
@ -45,15 +59,14 @@ async def async_setup_scanner_from_yaml(
config_entry = hass.config_entries.async_entries(mqtt.DOMAIN)[0]
subscriptions: list[Callable] = []
hass.data[MQTT_DATA_DEVICE_TRACKER_LEGACY] = {
"async_see": async_see,
"config": config,
}
hass.data[MQTT_DATA_DEVICE_TRACKER_LEGACY] = MQTTLegacyDeviceTrackerData(
async_see, config
)
if not mqtt_config_entry_enabled(hass):
_LOGGER.info(
"MQTT device trackers will be not available until the config entry is enabled",
)
return
return False
@callback
def _entry_unload(*_: Any) -> None:

View File

@ -674,7 +674,7 @@ class MqttDiscoveryDeviceUpdate:
stop_discovery_updates(
self.hass, self._discovery_data, self._remove_discovery_updated
)
self.hass.async_add_job(self.async_tear_down())
self._config_entry.async_create_task(self.hass, self.async_tear_down())
async def async_discovery_update(
self,