Use DeviceInfo in mqtt (#58389)

* Use DeviceInfo in mqtt

* Updates for mypy

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2021-10-25 13:46:09 +02:00 committed by GitHub
parent 66ae116023
commit a8a8b532d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,6 +9,13 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.const import ( from homeassistant.const import (
ATTR_CONFIGURATION_URL,
ATTR_MANUFACTURER,
ATTR_MODEL,
ATTR_NAME,
ATTR_SUGGESTED_AREA,
ATTR_SW_VERSION,
ATTR_VIA_DEVICE,
CONF_DEVICE, CONF_DEVICE,
CONF_ENTITY_CATEGORY, CONF_ENTITY_CATEGORY,
CONF_ICON, CONF_ICON,
@ -21,7 +28,7 @@ from homeassistant.helpers.dispatcher import (
async_dispatcher_connect, async_dispatcher_connect,
async_dispatcher_send, async_dispatcher_send,
) )
from homeassistant.helpers.entity import ENTITY_CATEGORIES_SCHEMA, Entity from homeassistant.helpers.entity import ENTITY_CATEGORIES_SCHEMA, DeviceInfo, Entity
from homeassistant.helpers.typing import ConfigType from homeassistant.helpers.typing import ConfigType
from . import DATA_MQTT, debug_info, publish, subscription from . import DATA_MQTT, debug_info, publish, subscription
@ -513,36 +520,36 @@ class MqttDiscoveryUpdate(Entity):
self._remove_signal = None self._remove_signal = None
def device_info_from_config(config): def device_info_from_config(config) -> DeviceInfo | None:
"""Return a device description for device registry.""" """Return a device description for device registry."""
if not config: if not config:
return None return None
info = { info = DeviceInfo(
"identifiers": {(DOMAIN, id_) for id_ in config[CONF_IDENTIFIERS]}, identifiers={(DOMAIN, id_) for id_ in config[CONF_IDENTIFIERS]},
"connections": {tuple(x) for x in config[CONF_CONNECTIONS]}, connections={(conn_[0], conn_[1]) for conn_ in config[CONF_CONNECTIONS]},
} )
if CONF_MANUFACTURER in config: if CONF_MANUFACTURER in config:
info["manufacturer"] = config[CONF_MANUFACTURER] info[ATTR_MANUFACTURER] = config[CONF_MANUFACTURER]
if CONF_MODEL in config: if CONF_MODEL in config:
info["model"] = config[CONF_MODEL] info[ATTR_MODEL] = config[CONF_MODEL]
if CONF_NAME in config: if CONF_NAME in config:
info["name"] = config[CONF_NAME] info[ATTR_NAME] = config[CONF_NAME]
if CONF_SW_VERSION in config: if CONF_SW_VERSION in config:
info["sw_version"] = config[CONF_SW_VERSION] info[ATTR_SW_VERSION] = config[CONF_SW_VERSION]
if CONF_VIA_DEVICE in config: if CONF_VIA_DEVICE in config:
info["via_device"] = (DOMAIN, config[CONF_VIA_DEVICE]) info[ATTR_VIA_DEVICE] = (DOMAIN, config[CONF_VIA_DEVICE])
if CONF_SUGGESTED_AREA in config: if CONF_SUGGESTED_AREA in config:
info["suggested_area"] = config[CONF_SUGGESTED_AREA] info[ATTR_SUGGESTED_AREA] = config[CONF_SUGGESTED_AREA]
if CONF_CONFIGURATION_URL in config: if CONF_CONFIGURATION_URL in config:
info["configuration_url"] = config[CONF_CONFIGURATION_URL] info[ATTR_CONFIGURATION_URL] = config[CONF_CONFIGURATION_URL]
return info return info
@ -563,11 +570,12 @@ class MqttEntityDeviceInfo(Entity):
device_info = self.device_info device_info = self.device_info
if config_entry_id is not None and device_info is not None: if config_entry_id is not None and device_info is not None:
device_info["config_entry_id"] = config_entry_id device_registry.async_get_or_create(
device_registry.async_get_or_create(**device_info) config_entry_id=config_entry_id, **device_info
)
@property @property
def device_info(self): def device_info(self) -> DeviceInfo | None:
"""Return a device description for device registry.""" """Return a device description for device registry."""
return device_info_from_config(self._device_config) return device_info_from_config(self._device_config)