Compare commits

...

6 Commits

Author SHA1 Message Date
epenet cf437bc23b Replace mqtt with huawei_lte 2026-05-29 14:29:06 +00:00
epenet 904449356c Merge branch 'dev' into epenet/20260529-1252 2026-05-29 14:18:48 +02:00
epenet 534ef4695b Adjust 2026-05-29 11:29:46 +00:00
epenet 616a1c25a2 Do not use StrEnum 2026-05-29 11:23:11 +00:00
epenet ffe76224a8 Use in some components 2026-05-29 11:03:54 +00:00
epenet 8fadb72509 Add new StrEnum to set device info attributes 2026-05-29 10:53:17 +00:00
4 changed files with 48 additions and 39 deletions
+17 -17
View File
@@ -7,17 +7,13 @@ from typing import Any, Concatenate
from androidtv.exceptions import LockNotAcquiredException
from homeassistant.const import (
ATTR_CONNECTIONS,
ATTR_IDENTIFIERS,
ATTR_MANUFACTURER,
ATTR_MODEL,
ATTR_SW_VERSION,
CONF_HOST,
CONF_NAME,
)
from homeassistant.const import CONF_HOST, CONF_NAME
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, DeviceInfo
from homeassistant.helpers.device_registry import (
CONNECTION_NETWORK_MAC,
DeviceInfo,
DeviceInfoAttribute,
)
from homeassistant.helpers.entity import Entity
from . import (
@@ -129,19 +125,23 @@ class AndroidTVEntity(Entity):
CONF_NAME, f"{device_type} {entry.data[CONF_HOST]}"
)
info = self.aftv.device_properties
model = info.get(ATTR_MODEL)
model = info.get("model")
self._attr_device_info = DeviceInfo(
model=f"{model} ({device_type})" if model else device_type,
name=device_name,
)
if self.unique_id:
self._attr_device_info[ATTR_IDENTIFIERS] = {(DOMAIN, self.unique_id)}
if manufacturer := info.get(ATTR_MANUFACTURER):
self._attr_device_info[ATTR_MANUFACTURER] = manufacturer
if sw_version := info.get(ATTR_SW_VERSION):
self._attr_device_info[ATTR_SW_VERSION] = sw_version
self._attr_device_info[DeviceInfoAttribute.IDENTIFIERS] = {
(DOMAIN, self.unique_id)
}
if manufacturer := info.get("manufacturer"):
self._attr_device_info[DeviceInfoAttribute.MANUFACTURER] = manufacturer
if sw_version := info.get("sw_version"):
self._attr_device_info[DeviceInfoAttribute.SW_VERSION] = sw_version
if mac := get_androidtv_mac(info):
self._attr_device_info[ATTR_CONNECTIONS] = {(CONNECTION_NETWORK_MAC, mac)}
self._attr_device_info[DeviceInfoAttribute.CONNECTIONS] = {
(CONNECTION_NETWORK_MAC, mac)
}
# ADB exceptions to catch
if not self.aftv.adb_server_ip:
+10 -15
View File
@@ -14,13 +14,6 @@ from pyatv.interface import AppleTV as AppleTVInterface, DeviceListener
from homeassistant.components import zeroconf
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_CONNECTIONS,
ATTR_IDENTIFIERS,
ATTR_MANUFACTURER,
ATTR_MODEL,
ATTR_NAME,
ATTR_SUGGESTED_AREA,
ATTR_SW_VERSION,
CONF_ADDRESS,
CONF_NAME,
EVENT_HOMEASSISTANT_STOP,
@@ -354,12 +347,12 @@ class AppleTVManager(DeviceListener):
@callback
def _async_setup_device_registry(self) -> None:
attrs = {
ATTR_IDENTIFIERS: {(DOMAIN, self.config_entry.unique_id)},
ATTR_MANUFACTURER: "Apple",
ATTR_NAME: self.config_entry.data[CONF_NAME],
dr.DeviceInfoAttribute.IDENTIFIERS: {(DOMAIN, self.config_entry.unique_id)},
dr.DeviceInfoAttribute.MANUFACTURER: "Apple",
dr.DeviceInfoAttribute.NAME: self.config_entry.data[CONF_NAME],
}
attrs[ATTR_SUGGESTED_AREA] = (
attrs[ATTR_NAME]
attrs[dr.DeviceInfoAttribute.SUGGESTED_AREA] = (
attrs[dr.DeviceInfoAttribute.NAME]
.removesuffix(f" {DEFAULT_NAME_TV}")
.removesuffix(f" {DEFAULT_NAME_HP}")
)
@@ -367,15 +360,17 @@ class AppleTVManager(DeviceListener):
if self.atv:
dev_info = self.atv.device_info
attrs[ATTR_MODEL] = (
attrs[dr.DeviceInfoAttribute.MODEL] = (
dev_info.raw_model
if dev_info.model is DeviceModel.Unknown and dev_info.raw_model
else model_str(dev_info.model)
)
attrs[ATTR_SW_VERSION] = dev_info.version
attrs[dr.DeviceInfoAttribute.SW_VERSION] = dev_info.version
if dev_info.mac:
attrs[ATTR_CONNECTIONS] = {(dr.CONNECTION_NETWORK_MAC, dev_info.mac)}
attrs[dr.DeviceInfoAttribute.CONNECTIONS] = {
(dr.CONNECTION_NETWORK_MAC, dev_info.mac)
}
device_registry = dr.async_get(self.hass)
device_registry.async_get_or_create(
@@ -23,9 +23,6 @@ import voluptuous as vol
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_CONFIG_ENTRY_ID,
ATTR_HW_VERSION,
ATTR_MODEL,
ATTR_SW_VERSION,
CONF_MAC,
CONF_NAME,
CONF_PASSWORD,
@@ -383,15 +380,15 @@ async def async_setup_entry(hass: HomeAssistant, entry: HuaweiLteConfigEntry) ->
hw_version = router_info.get("HardwareVersion")
sw_version = router_info.get("SoftwareVersion")
if router_info.get("DeviceName"):
device_info[ATTR_MODEL] = router_info["DeviceName"]
device_info[dr.DeviceInfoAttribute.MODEL] = router_info["DeviceName"]
if not sw_version and router.data.get(KEY_DEVICE_BASIC_INFORMATION):
sw_version = router.data[KEY_DEVICE_BASIC_INFORMATION].get(
"SoftwareVersion"
)
if hw_version:
device_info[ATTR_HW_VERSION] = hw_version
device_info[dr.DeviceInfoAttribute.HW_VERSION] = hw_version
if sw_version:
device_info[ATTR_SW_VERSION] = sw_version
device_info[dr.DeviceInfoAttribute.SW_VERSION] = sw_version
device_registry = dr.async_get(hass)
device_registry.async_get_or_create(
config_entry_id=entry.entry_id,
+18 -1
View File
@@ -8,7 +8,7 @@ from enum import StrEnum
from functools import lru_cache
import logging
import time
from typing import TYPE_CHECKING, Any, Literal, TypedDict, Unpack
from typing import TYPE_CHECKING, Any, Final, Literal, TypedDict, Unpack
import attr
from yarl import URL
@@ -80,6 +80,23 @@ class DeviceEntryDisabler(StrEnum):
USER = "user"
class DeviceInfoAttribute:
"""Device info attributes."""
CONFIGURATION_URL: Final = "configuration_url"
CONNECTIONS: Final = "connections"
IDENTIFIERS: Final = "identifiers"
HW_VERSION: Final = "hw_version"
MANUFACTURER: Final = "manufacturer"
MODEL: Final = "model"
MODEL_ID: Final = "model_id"
NAME: Final = "name"
SERIAL_NUMBER: Final = "serial_number"
SUGGESTED_AREA: Final = "suggested_area"
SW_VERSION: Final = "sw_version"
VIA_DEVICE: Final = "via_device"
class DeviceInfo(TypedDict, total=False):
"""Entity device information for device registry."""