diff --git a/homeassistant/components/plex/media_player.py b/homeassistant/components/plex/media_player.py index 003ad23f977..cd94bb49632 100644 --- a/homeassistant/components/plex/media_player.py +++ b/homeassistant/components/plex/media_player.py @@ -109,8 +109,10 @@ class PlexMediaPlayer(MediaPlayerDevice): self._is_player_active = False self._machine_identifier = device.machineIdentifier self._make = "" + self._device_platform = None self._device_product = None self._device_title = None + self._device_version = None self._name = None self._player_state = "idle" self._previous_volume_level = 1 # Used in fake muting @@ -195,8 +197,10 @@ class PlexMediaPlayer(MediaPlayerDevice): device_url = "127.0.0.1" if "127.0.0.1" in device_url: self.device.proxyThroughServer() + self._device_platform = self.device.platform self._device_product = self.device.product self._device_title = self.device.title + self._device_version = self.device.version self._device_protocol_capabilities = self.device.protocolCapabilities self._player_state = self.device.state @@ -216,6 +220,7 @@ class PlexMediaPlayer(MediaPlayerDevice): self._player_state = session_device.state self._device_product = self._device_product or session_device.product self._device_title = self._device_title or session_device.title + self._device_version = self._device_version or session_device.version else: _LOGGER.warning("No player associated with active session") @@ -724,3 +729,18 @@ class PlexMediaPlayer(MediaPlayerDevice): } return attr + + @property + def device_info(self): + """Return a device description for device registry.""" + if self.machine_identifier is None: + return None + + return { + "identifiers": {(PLEX_DOMAIN, self.machine_identifier)}, + "manufacturer": "Plex", + "model": self._device_product or self._device_platform or self.make, + "name": self.name, + "sw_version": self._device_version, + "via_device": (PLEX_DOMAIN, self.plex_server.machine_identifier), + } diff --git a/homeassistant/components/plex/sensor.py b/homeassistant/components/plex/sensor.py index 4fe6ed444ef..1caf8ec5f75 100644 --- a/homeassistant/components/plex/sensor.py +++ b/homeassistant/components/plex/sensor.py @@ -142,3 +142,17 @@ class PlexSensor(Entity): now_playing.append((now_playing_user, now_playing_title)) self._state = len(self.sessions) self._now_playing = now_playing + + @property + def device_info(self): + """Return a device description for device registry.""" + if self.unique_id is None: + return None + + return { + "identifiers": {(PLEX_DOMAIN, self._server.machine_identifier)}, + "manufacturer": "Plex", + "model": "Plex Media Server", + "name": "Activity Sensor", + "sw_version": self._server.version, + } diff --git a/homeassistant/components/plex/server.py b/homeassistant/components/plex/server.py index fcc7e5dda17..fe453ef2e9e 100644 --- a/homeassistant/components/plex/server.py +++ b/homeassistant/components/plex/server.py @@ -52,6 +52,7 @@ class PlexServer: self.options = options self.server_choice = None self._owner_username = None + self._version = None # Header conditionally added as it is not available in config entry v1 if CONF_CLIENT_IDENTIFIER in server_config: @@ -102,6 +103,8 @@ class PlexServer: if owner_account: self._owner_username = owner_account[0] + self._version = self._plex_server.version + def refresh_entity(self, machine_identifier, device, session): """Forward refresh dispatch to media_player.""" unique_id = f"{self.machine_identifier}:{machine_identifier}" @@ -196,6 +199,11 @@ class PlexServer: """Return the Plex server owner username.""" return self._owner_username + @property + def version(self): + """Return the version of the Plex server.""" + return self._version + @property def friendly_name(self): """Return name of connected Plex server.""" diff --git a/tests/components/plex/mock_classes.py b/tests/components/plex/mock_classes.py index ed354138cb2..c4fccb35bb0 100644 --- a/tests/components/plex/mock_classes.py +++ b/tests/components/plex/mock_classes.py @@ -87,3 +87,8 @@ class MockPlexServer: def url_in_use(self): """Return URL used by PlexServer.""" return self._baseurl + + @property + def version(self): + """Mock version of PlexServer.""" + return "1.0"