Add info to Bravia device (#150690)

This commit is contained in:
Joost Lekkerkerker
2025-08-17 15:30:46 +02:00
committed by GitHub
parent 7fba94747e
commit 90558c517b
9 changed files with 22 additions and 26 deletions

View File

@@ -53,8 +53,7 @@ async def async_setup_entry(
assert unique_id is not None assert unique_id is not None
async_add_entities( async_add_entities(
BraviaTVButton(coordinator, unique_id, config_entry.title, description) BraviaTVButton(coordinator, unique_id, description) for description in BUTTONS
for description in BUTTONS
) )
@@ -67,11 +66,10 @@ class BraviaTVButton(BraviaTVEntity, ButtonEntity):
self, self,
coordinator: BraviaTVCoordinator, coordinator: BraviaTVCoordinator,
unique_id: str, unique_id: str,
model: str,
description: BraviaTVButtonDescription, description: BraviaTVButtonDescription,
) -> None: ) -> None:
"""Initialize the button.""" """Initialize the button."""
super().__init__(coordinator, unique_id, model) super().__init__(coordinator, unique_id)
self._attr_unique_id = f"{unique_id}_{description.key}" self._attr_unique_id = f"{unique_id}_{description.key}"
self.entity_description = description self.entity_description = description

View File

@@ -79,14 +79,16 @@ class BraviaTVConfigFlow(ConfigFlow, domain=DOMAIN):
system_info = await self.client.get_system_info() system_info = await self.client.get_system_info()
cid = system_info[ATTR_CID].lower() cid = system_info[ATTR_CID].lower()
title = system_info[ATTR_MODEL]
self.device_config[CONF_MAC] = system_info[ATTR_MAC] self.device_config[CONF_MAC] = system_info[ATTR_MAC]
await self.async_set_unique_id(cid) await self.async_set_unique_id(cid)
self._abort_if_unique_id_configured() self._abort_if_unique_id_configured()
return self.async_create_entry(title=title, data=self.device_config) return self.async_create_entry(
title=f"{system_info['name']} {system_info[ATTR_MODEL]}",
data=self.device_config,
)
async def async_reauth_device(self) -> ConfigFlowResult: async def async_reauth_device(self) -> ConfigFlowResult:
"""Reauthorize Bravia TV device from config.""" """Reauthorize Bravia TV device from config."""

View File

@@ -81,6 +81,7 @@ class BraviaTVCoordinator(DataUpdateCoordinator[None]):
self.use_psk = config_entry.data.get(CONF_USE_PSK, False) self.use_psk = config_entry.data.get(CONF_USE_PSK, False)
self.client_id = config_entry.data.get(CONF_CLIENT_ID, LEGACY_CLIENT_ID) self.client_id = config_entry.data.get(CONF_CLIENT_ID, LEGACY_CLIENT_ID)
self.nickname = config_entry.data.get(CONF_NICKNAME, NICKNAME_PREFIX) self.nickname = config_entry.data.get(CONF_NICKNAME, NICKNAME_PREFIX)
self.system_info: dict[str, str] = {}
self.source: str | None = None self.source: str | None = None
self.source_list: list[str] = [] self.source_list: list[str] = []
self.source_map: dict[str, dict] = {} self.source_map: dict[str, dict] = {}
@@ -150,6 +151,9 @@ class BraviaTVCoordinator(DataUpdateCoordinator[None]):
self.is_on = power_status == "active" self.is_on = power_status == "active"
self.skipped_updates = 0 self.skipped_updates = 0
if not self.system_info:
self.system_info = await self.client.get_system_info()
if self.is_on is False: if self.is_on is False:
return return

View File

@@ -12,23 +12,16 @@ class BraviaTVEntity(CoordinatorEntity[BraviaTVCoordinator]):
_attr_has_entity_name = True _attr_has_entity_name = True
def __init__( def __init__(self, coordinator: BraviaTVCoordinator, unique_id: str) -> None:
self,
coordinator: BraviaTVCoordinator,
unique_id: str,
model: str,
) -> None:
"""Initialize the entity.""" """Initialize the entity."""
super().__init__(coordinator) super().__init__(coordinator)
self._attr_unique_id = unique_id self._attr_unique_id = unique_id
self._attr_device_info = DeviceInfo( self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, unique_id)}, identifiers={(DOMAIN, unique_id)},
connections={(CONNECTION_NETWORK_MAC, coordinator.system_info["macAddr"])},
manufacturer=ATTR_MANUFACTURER, manufacturer=ATTR_MANUFACTURER,
model=model, model_id=coordinator.system_info["model"],
name=f"{ATTR_MANUFACTURER} {model}", hw_version=coordinator.system_info["generation"],
serial_number=coordinator.system_info["serial"],
) )
if coordinator.client.mac is not None:
self._attr_device_info["connections"] = {
(CONNECTION_NETWORK_MAC, coordinator.client.mac)
}

View File

@@ -34,9 +34,7 @@ async def async_setup_entry(
unique_id = config_entry.unique_id unique_id = config_entry.unique_id
assert unique_id is not None assert unique_id is not None
async_add_entities( async_add_entities([BraviaTVMediaPlayer(coordinator, unique_id)])
[BraviaTVMediaPlayer(coordinator, unique_id, config_entry.title)]
)
class BraviaTVMediaPlayer(BraviaTVEntity, MediaPlayerEntity): class BraviaTVMediaPlayer(BraviaTVEntity, MediaPlayerEntity):

View File

@@ -24,7 +24,7 @@ async def async_setup_entry(
unique_id = config_entry.unique_id unique_id = config_entry.unique_id
assert unique_id is not None assert unique_id is not None
async_add_entities([BraviaTVRemote(coordinator, unique_id, config_entry.title)]) async_add_entities([BraviaTVRemote(coordinator, unique_id)])
class BraviaTVRemote(BraviaTVEntity, RemoteEntity): class BraviaTVRemote(BraviaTVEntity, RemoteEntity):

View File

@@ -21,7 +21,7 @@
'source': 'user', 'source': 'user',
'subentries': list([ 'subentries': list([
]), ]),
'title': 'Mock Title', 'title': 'BRAVIA TV-Model',
'unique_id': 'very_unique_string', 'unique_id': 'very_unique_string',
'version': 1, 'version': 1,
}), }),

View File

@@ -143,7 +143,7 @@ async def test_ssdp_discovery(hass: HomeAssistant) -> None:
assert result["type"] is FlowResultType.CREATE_ENTRY assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["result"].unique_id == "very_unique_string" assert result["result"].unique_id == "very_unique_string"
assert result["title"] == "TV-Model" assert result["title"] == "BRAVIA TV-Model"
assert result["data"] == { assert result["data"] == {
CONF_HOST: "bravia-host", CONF_HOST: "bravia-host",
CONF_PIN: "1234", CONF_PIN: "1234",
@@ -340,7 +340,7 @@ async def test_create_entry(hass: HomeAssistant) -> None:
assert result["type"] is FlowResultType.CREATE_ENTRY assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["result"].unique_id == "very_unique_string" assert result["result"].unique_id == "very_unique_string"
assert result["title"] == "TV-Model" assert result["title"] == "BRAVIA TV-Model"
assert result["data"] == { assert result["data"] == {
CONF_HOST: "bravia-host", CONF_HOST: "bravia-host",
CONF_PIN: "1234", CONF_PIN: "1234",
@@ -381,7 +381,7 @@ async def test_create_entry_psk(hass: HomeAssistant) -> None:
assert result["type"] is FlowResultType.CREATE_ENTRY assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["result"].unique_id == "very_unique_string" assert result["result"].unique_id == "very_unique_string"
assert result["title"] == "TV-Model" assert result["title"] == "BRAVIA TV-Model"
assert result["data"] == { assert result["data"] == {
CONF_HOST: "bravia-host", CONF_HOST: "bravia-host",
CONF_PIN: "mypsk", CONF_PIN: "mypsk",

View File

@@ -46,6 +46,7 @@ async def test_entry_diagnostics(
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
title="BRAVIA TV-Model",
data={ data={
CONF_HOST: "localhost", CONF_HOST: "localhost",
CONF_MAC: "AA:BB:CC:DD:EE:FF", CONF_MAC: "AA:BB:CC:DD:EE:FF",