From f95bd9c78f3ac04642f4ce3ae60dd74ca9ea9a34 Mon Sep 17 00:00:00 2001 From: MaxG88 Date: Fri, 14 Dec 2018 07:14:32 -0500 Subject: [PATCH] Set unavailable when unreachable (#19012) * Turn GPMDP Off When Unavailable * Update requirements_all.txt * Specified Exception Type * Update gpmdp.py --- .../components/media_player/gpmdp.py | 44 ++++++++++++------- requirements_all.txt | 2 +- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/media_player/gpmdp.py b/homeassistant/components/media_player/gpmdp.py index b16eb8d417a..b4ede671d52 100644 --- a/homeassistant/components/media_player/gpmdp.py +++ b/homeassistant/components/media_player/gpmdp.py @@ -20,7 +20,7 @@ from homeassistant.const import ( import homeassistant.helpers.config_validation as cv from homeassistant.util.json import load_json, save_json -REQUIREMENTS = ['websocket-client==0.37.0'] +REQUIREMENTS = ['websocket-client==0.54.0'] _CONFIGURING = {} _LOGGER = logging.getLogger(__name__) @@ -155,6 +155,7 @@ class GPMDP(MediaPlayerDevice): self._duration = None self._volume = None self._request_id = 0 + self._available = True def get_ws(self): """Check if the websocket is setup and connected.""" @@ -200,22 +201,31 @@ class GPMDP(MediaPlayerDevice): def update(self): """Get the latest details from the player.""" time.sleep(1) - playstate = self.send_gpmdp_msg('playback', 'getPlaybackState') - if playstate is None: - return - self._status = PLAYBACK_DICT[str(playstate['value'])] - time_data = self.send_gpmdp_msg('playback', 'getCurrentTime') - if time_data is not None: - self._seek_position = int(time_data['value'] / 1000) - track_data = self.send_gpmdp_msg('playback', 'getCurrentTrack') - if track_data is not None: - self._title = track_data['value']['title'] - self._artist = track_data['value']['artist'] - self._albumart = track_data['value']['albumArt'] - self._duration = int(track_data['value']['duration'] / 1000) - volume_data = self.send_gpmdp_msg('volume', 'getVolume') - if volume_data is not None: - self._volume = volume_data['value'] / 100 + try: + self._available = True + playstate = self.send_gpmdp_msg('playback', 'getPlaybackState') + if playstate is None: + return + self._status = PLAYBACK_DICT[str(playstate['value'])] + time_data = self.send_gpmdp_msg('playback', 'getCurrentTime') + if time_data is not None: + self._seek_position = int(time_data['value'] / 1000) + track_data = self.send_gpmdp_msg('playback', 'getCurrentTrack') + if track_data is not None: + self._title = track_data['value']['title'] + self._artist = track_data['value']['artist'] + self._albumart = track_data['value']['albumArt'] + self._duration = int(track_data['value']['duration'] / 1000) + volume_data = self.send_gpmdp_msg('volume', 'getVolume') + if volume_data is not None: + self._volume = volume_data['value'] / 100 + except OSError: + self._available = False + + @property + def available(self): + """Return if media player is available.""" + return self._available @property def media_content_type(self): diff --git a/requirements_all.txt b/requirements_all.txt index 6545f703738..6327ad3e2a7 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1627,7 +1627,7 @@ watchdog==0.8.3 waterfurnace==1.0.0 # homeassistant.components.media_player.gpmdp -websocket-client==0.37.0 +websocket-client==0.54.0 # homeassistant.components.media_player.webostv websockets==6.0