diff --git a/.coveragerc b/.coveragerc index a1022dcb42ecf2c50a5937bb04854b257441683a..bd99e3ac2e25545777817a29ff04edb2c56fc516 100644 --- a/.coveragerc +++ b/.coveragerc @@ -432,7 +432,6 @@ omit = homeassistant/components/media_player/aquostv.py homeassistant/components/media_player/bluesound.py homeassistant/components/media_player/braviatv.py - homeassistant/components/media_player/braviatv_psk.py homeassistant/components/media_player/cast.py homeassistant/components/media_player/clementine.py homeassistant/components/media_player/cmus.py diff --git a/CODEOWNERS b/CODEOWNERS index f3ddfc3b3e6007d43f8b434f9347cccfd5024359..a5b5cfcb32cad29de4583088b572e2ddfe7f675c 100755 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -54,7 +54,6 @@ homeassistant/components/device_tracker/tile.py @bachya homeassistant/components/history_graph.py @andrey-git homeassistant/components/light/tplink.py @rytilahti homeassistant/components/light/yeelight.py @rytilahti -homeassistant/components/media_player/braviatv_psk.py @gerard33 homeassistant/components/media_player/kodi.py @armills homeassistant/components/media_player/mediaroom.py @dgomes homeassistant/components/media_player/monoprice.py @etsinko diff --git a/homeassistant/components/media_player/braviatv_psk.py b/homeassistant/components/media_player/braviatv_psk.py deleted file mode 100755 index 122eb3b973907d415f4008b075659014e784830f..0000000000000000000000000000000000000000 --- a/homeassistant/components/media_player/braviatv_psk.py +++ /dev/null @@ -1,363 +0,0 @@ -""" -Support for interface with a Sony Bravia TV. - -For more details about this platform, please refer to the documentation at -https://home-assistant.io/components/media_player.braviatv_psk/ -""" -import logging -import voluptuous as vol - -from homeassistant.components.media_player import ( - SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, SUPPORT_PREVIOUS_TRACK, SUPPORT_TURN_ON, - SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_STEP, SUPPORT_PLAY, - SUPPORT_VOLUME_SET, SUPPORT_SELECT_SOURCE, MediaPlayerDevice, - PLATFORM_SCHEMA, MEDIA_TYPE_TVSHOW, SUPPORT_STOP) -from homeassistant.const import ( - CONF_HOST, CONF_NAME, CONF_MAC, STATE_OFF, STATE_ON) -import homeassistant.helpers.config_validation as cv - -REQUIREMENTS = ['pySonyBraviaPSK==0.1.5'] - -_LOGGER = logging.getLogger(__name__) - -SUPPORT_BRAVIA = SUPPORT_PAUSE | SUPPORT_VOLUME_STEP | \ - SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_SET | \ - SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK | \ - SUPPORT_TURN_ON | SUPPORT_TURN_OFF | \ - SUPPORT_SELECT_SOURCE | SUPPORT_PLAY | SUPPORT_STOP - -DEFAULT_NAME = 'Sony Bravia TV' - -# Config file -CONF_PSK = 'psk' -CONF_AMP = 'amp' -CONF_ANDROID = 'android' -CONF_SOURCE_FILTER = 'sourcefilter' - -# Some additional info to show specific for Sony Bravia TV -TV_WAIT = 'TV started, waiting for program info' -TV_APP_OPENED = 'App opened' -TV_NO_INFO = 'No info: TV resumed after pause' - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_HOST): cv.string, - vol.Required(CONF_PSK): cv.string, - vol.Optional(CONF_MAC): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_AMP, default=False): cv.boolean, - vol.Optional(CONF_ANDROID, default=True): cv.boolean, - vol.Optional(CONF_SOURCE_FILTER, default=[]): vol.All( - cv.ensure_list, [cv.string])}) - -# pylint: disable=unused-argument - - -def setup_platform(hass, config, add_devices, discovery_info=None): - """Set up the Sony Bravia TV platform.""" - host = config.get(CONF_HOST) - psk = config.get(CONF_PSK) - mac = config.get(CONF_MAC) - name = config.get(CONF_NAME) - amp = config.get(CONF_AMP) - android = config.get(CONF_ANDROID) - source_filter = config.get(CONF_SOURCE_FILTER) - - if host is None or psk is None: - _LOGGER.error( - "No TV IP address or Pre-Shared Key found in configuration file") - return - - add_devices( - [BraviaTVDevice(host, psk, mac, name, amp, android, source_filter)]) - - -class BraviaTVDevice(MediaPlayerDevice): - """Representation of a Sony Bravia TV.""" - - def __init__(self, host, psk, mac, name, amp, android, source_filter): - """Initialize the Sony Bravia device.""" - _LOGGER.info("Setting up Sony Bravia TV") - from braviapsk import sony_bravia_psk - - self._braviarc = sony_bravia_psk.BraviaRC(host, psk, mac) - self._name = name - self._amp = amp - self._android = android - self._source_filter = source_filter - self._state = STATE_OFF - self._muted = False - self._program_name = None - self._channel_name = None - self._channel_number = None - self._source = None - self._source_list = [] - self._original_content_list = [] - 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._start_time = None - self._end_time = None - - _LOGGER.debug( - "Set up Sony Bravia TV with IP: %s, PSK: %s, MAC: %s", host, psk, - mac) - - self.update() - - def update(self): - """Update TV info.""" - try: - power_status = self._braviarc.get_power_status() - if power_status == 'active': - self._state = STATE_ON - self._refresh_volume() - self._refresh_channels() - playing_info = self._braviarc.get_playing_info() - self._reset_playing_info() - if playing_info is None or not playing_info: - self._program_name = TV_NO_INFO - else: - self._program_name = playing_info.get('programTitle') - self._channel_name = playing_info.get('title') - self._program_media_type = playing_info.get( - 'programMediaType') - self._channel_number = playing_info.get('dispNum') - self._source = playing_info.get('source') - self._content_uri = playing_info.get('uri') - self._duration = playing_info.get('durationSec') - self._start_date_time = playing_info.get('startDateTime') - # Get time info from TV program - if self._start_date_time is not None and \ - self._duration is not None: - time_info = self._braviarc.playing_time( - self._start_date_time, self._duration) - self._start_time = time_info.get('start_time') - self._end_time = time_info.get('end_time') - else: - if self._program_name == TV_WAIT: - # TV is starting up, takes some time before it responds - _LOGGER.info("TV is starting, no info available yet") - else: - self._state = STATE_OFF - - except Exception as exception_instance: # pylint: disable=broad-except - _LOGGER.error( - "No data received from TV. Error message: %s", - exception_instance) - self._state = STATE_OFF - - def _reset_playing_info(self): - self._program_name = None - self._channel_name = None - self._program_media_type = None - self._channel_number = None - self._source = None - self._content_uri = None - self._duration = None - self._start_date_time = None - self._start_time = None - self._end_time = None - - def _refresh_volume(self): - """Refresh volume information.""" - volume_info = self._braviarc.get_volume_info() - if volume_info is not None: - self._volume = volume_info.get('volume') - self._min_volume = volume_info.get('minVolume') - self._max_volume = volume_info.get('maxVolume') - self._muted = volume_info.get('mute') - - def _refresh_channels(self): - if not self._source_list: - self._content_mapping = self._braviarc.load_source_list() - self._source_list = [] - if not self._source_filter: # list is empty - for key in self._content_mapping: - self._source_list.append(key) - else: - filtered_dict = {title: uri for (title, uri) in - self._content_mapping.items() - if any(filter_title in title for filter_title - in self._source_filter)} - for key in filtered_dict: - self._source_list.append(key) - - @property - def name(self): - """Return the name of the device.""" - return self._name - - @property - def state(self): - """Return the state of the device.""" - return self._state - - @property - def source(self): - """Return the current input source.""" - return self._source - - @property - def source_list(self): - """List of available input sources.""" - return self._source_list - - @property - def volume_level(self): - """Volume level of the media player (0..1).""" - if self._volume is not None: - return self._volume / 100 - return None - - @property - def is_volume_muted(self): - """Boolean if volume is currently muted.""" - return self._muted - - @property - def supported_features(self): - """Flag media player features that are supported.""" - supported = SUPPORT_BRAVIA - # Remove volume slider if amplifier is attached to TV - if self._amp: - supported = supported ^ SUPPORT_VOLUME_SET - return supported - - @property - def media_content_type(self): - """Content type of current playing media. - - Used for program information below the channel in the state card. - """ - return MEDIA_TYPE_TVSHOW - - @property - def media_title(self): - """Title of current playing media. - - Used to show TV channel info. - """ - return_value = None - if self._channel_name is not None: - if self._channel_number is not None: - return_value = '{0!s}: {1}'.format( - self._channel_number.lstrip('0'), self._channel_name) - else: - return_value = self._channel_name - return return_value - - @property - def media_series_title(self): - """Title of series of current playing media, TV show only. - - Used to show TV program info. - """ - return_value = None - if self._program_name is not None: - if self._start_time is not None and self._end_time is not None: - return_value = '{0} [{1} - {2}]'.format( - self._program_name, self._start_time, self._end_time) - else: - return_value = self._program_name - else: - if not self._channel_name: # This is empty when app is opened - return_value = TV_APP_OPENED - return return_value - - @property - def media_content_id(self): - """Content ID of current playing media.""" - return self._channel_name - - def set_volume_level(self, volume): - """Set volume level, range 0..1.""" - self._braviarc.set_volume_level(volume) - - def turn_on(self): - """Turn the media player on. - - Use a different command for Android as WOL is not working. - """ - if self._android: - self._braviarc.turn_on_command() - else: - self._braviarc.turn_on() - - # Show that TV is starting while it takes time - # before program info is available - self._reset_playing_info() - self._state = STATE_ON - self._program_name = TV_WAIT - - def turn_off(self): - """Turn off media player.""" - self._state = STATE_OFF - self._braviarc.turn_off() - - def volume_up(self): - """Volume up the media player.""" - self._braviarc.volume_up() - - def volume_down(self): - """Volume down media player.""" - self._braviarc.volume_down() - - def mute_volume(self, mute): - """Send mute command.""" - self._braviarc.mute_volume() - - def select_source(self, source): - """Set the input source.""" - if source in self._content_mapping: - uri = self._content_mapping[source] - self._braviarc.play_content(uri) - - def media_play_pause(self): - """Simulate play pause media player.""" - if self._playing: - self.media_pause() - else: - self.media_play() - - def media_play(self): - """Send play command.""" - self._playing = True - self._braviarc.media_play() - - def media_pause(self): - """Send media pause command to media player. - - Will pause TV when TV tuner is on. - """ - self._playing = False - if self._program_media_type == 'tv' or self._program_name is not None: - self._braviarc.media_tvpause() - else: - self._braviarc.media_pause() - - def media_next_track(self): - """Send next track command. - - Will switch to next channel when TV tuner is on. - """ - if self._program_media_type == 'tv' or self._program_name is not None: - self._braviarc.send_command('ChannelUp') - else: - self._braviarc.media_next_track() - - def media_previous_track(self): - """Send the previous track command. - - Will switch to previous channel when TV tuner is on. - """ - if self._program_media_type == 'tv' or self._program_name is not None: - self._braviarc.send_command('ChannelDown') - else: - self._braviarc.media_previous_track() diff --git a/requirements_all.txt b/requirements_all.txt index 7de7131b5622fa7007495dc30bc21e2b26d6c9ab..7deac08546683c5650418c5d333fb01efe1a1ecc 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -643,9 +643,6 @@ pyHS100==0.3.0 # homeassistant.components.rfxtrx pyRFXtrx==0.21.1 -# homeassistant.components.media_player.braviatv_psk -pySonyBraviaPSK==0.1.5 - # homeassistant.components.sensor.tibber pyTibber==0.2.1