From 5c2bd8b74378cd32549dc25a3a65d189687f23e2 Mon Sep 17 00:00:00 2001
From: Maciej Bieniek <bieniu@users.noreply.github.com>
Date: Mon, 23 Mar 2020 22:16:17 +0100
Subject: [PATCH] Add unique ID propery to braviatv entity (#33037)

* Add unique_id property

* Use cid to generate unique_id

* Remove debug file

* Add _unique_id declaration

* Suggested change

* Remove unused self._id
---
 .../components/braviatv/media_player.py       | 23 ++++++++++++++-----
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/homeassistant/components/braviatv/media_player.py b/homeassistant/components/braviatv/media_player.py
index 2916bb319f8..6dd431aac69 100644
--- a/homeassistant/components/braviatv/media_player.py
+++ b/homeassistant/components/braviatv/media_player.py
@@ -75,7 +75,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
             pin = host_config["pin"]
             mac = host_config["mac"]
             name = config.get(CONF_NAME)
-            add_entities([BraviaTVDevice(host, mac, name, pin)])
+            braviarc = BraviaRC(host, mac)
+            braviarc.connect(pin, CLIENTID_PREFIX, NICKNAME)
+            unique_id = braviarc.get_system_info()["cid"].lower()
+
+            add_entities([BraviaTVDevice(braviarc, name, pin, unique_id)])
             return
 
     setup_bravia(config, pin, hass, add_entities)
@@ -111,8 +115,11 @@ def setup_bravia(config, pin, hass, add_entities):
         hass.config.path(BRAVIA_CONFIG_FILE),
         {host: {"pin": pin, "host": host, "mac": mac}},
     )
+    braviarc = BraviaRC(host, mac)
+    braviarc.connect(pin, CLIENTID_PREFIX, NICKNAME)
+    unique_id = braviarc.get_system_info()["cid"].lower()
 
-    add_entities([BraviaTVDevice(host, mac, name, pin)])
+    add_entities([BraviaTVDevice(braviarc, name, pin, unique_id)])
 
 
 def request_configuration(config, hass, add_entities):
@@ -154,11 +161,11 @@ def request_configuration(config, hass, add_entities):
 class BraviaTVDevice(MediaPlayerDevice):
     """Representation of a Sony Bravia TV."""
 
-    def __init__(self, host, mac, name, pin):
+    def __init__(self, client, name, pin, unique_id):
         """Initialize the Sony Bravia device."""
 
         self._pin = pin
-        self._braviarc = BraviaRC(host, mac)
+        self._braviarc = client
         self._name = name
         self._state = STATE_OFF
         self._muted = False
@@ -171,15 +178,14 @@ class BraviaTVDevice(MediaPlayerDevice):
         self._content_mapping = {}
         self._duration = None
         self._content_uri = None
-        self._id = None
         self._playing = False
         self._start_date_time = None
         self._program_media_type = None
         self._min_volume = None
         self._max_volume = None
         self._volume = None
+        self._unique_id = unique_id
 
-        self._braviarc.connect(pin, CLIENTID_PREFIX, NICKNAME)
         if self._braviarc.is_connected():
             self.update()
         else:
@@ -254,6 +260,11 @@ class BraviaTVDevice(MediaPlayerDevice):
         """Return the name of the device."""
         return self._name
 
+    @property
+    def unique_id(self):
+        """Return a unique_id for this entity."""
+        return self._unique_id
+
     @property
     def state(self):
         """Return the state of the device."""
-- 
GitLab