diff --git a/homeassistant/components/mqtt/tag.py b/homeassistant/components/mqtt/tag.py index 23afae35cc9..26cb66e9f2f 100644 --- a/homeassistant/components/mqtt/tag.py +++ b/homeassistant/components/mqtt/tag.py @@ -1,6 +1,7 @@ """Provides tag scanning for MQTT.""" from __future__ import annotations +from collections.abc import Callable import functools import voluptuous as vol @@ -9,11 +10,12 @@ from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_DEVICE, CONF_PLATFORM, CONF_VALUE_TEMPLATE from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.typing import ConfigType +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from . import subscription from .config import MQTT_BASE_SCHEMA from .const import ATTR_DISCOVERY_HASH, CONF_QOS, CONF_TOPIC +from .discovery import MQTTDiscoveryPayload from .mixins import ( MQTT_ENTITY_DEVICE_INFO_SCHEMA, MqttDiscoveryDeviceUpdate, @@ -21,7 +23,7 @@ from .mixins import ( send_discovery_done, update_device, ) -from .models import MqttValueTemplate, ReceiveMessage +from .models import MqttValueTemplate, ReceiveMessage, ReceivePayloadType from .subscription import EntitySubscription from .util import get_mqtt_data, valid_subscribe_topic @@ -87,12 +89,14 @@ def async_has_tags(hass: HomeAssistant, device_id: str) -> bool: class MQTTTagScanner(MqttDiscoveryDeviceUpdate): """MQTT Tag scanner.""" + _value_template: Callable[[ReceivePayloadType, str], ReceivePayloadType] + def __init__( self, hass: HomeAssistant, config: ConfigType, device_id: str | None, - discovery_data: dict, + discovery_data: DiscoveryInfoType, config_entry: ConfigEntry, ) -> None: """Initialize.""" @@ -111,10 +115,10 @@ class MQTTTagScanner(MqttDiscoveryDeviceUpdate): self, hass, discovery_data, device_id, config_entry, LOG_NAME ) - async def async_update(self, discovery_data: dict) -> None: + async def async_update(self, discovery_data: MQTTDiscoveryPayload) -> None: """Handle MQTT tag discovery updates.""" # Update tag scanner - config = PLATFORM_SCHEMA(discovery_data) + config: DiscoveryInfoType = PLATFORM_SCHEMA(discovery_data) self._config = config self._value_template = MqttValueTemplate( config.get(CONF_VALUE_TEMPLATE), @@ -127,7 +131,7 @@ class MQTTTagScanner(MqttDiscoveryDeviceUpdate): """Subscribe to MQTT topics.""" async def tag_scanned(msg: ReceiveMessage) -> None: - tag_id = self._value_template(msg.payload, "").strip() + tag_id = str(self._value_template(msg.payload, "")).strip() if not tag_id: # No output from template, ignore return