mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
directv: extended discovery via REST api, bug fix (#8800)
* fix not providing device for discovered directvs This fixes a bug introduced at 6884965c80 Discovered directv boxes would not be instantiated with a DEVICE parameter. Signed-off-by: Nicholas Sielicki <sielicki@yandex.com> * directv: add discovery of RVU clients If discovery is used with directv, also try to further discover and configure RVU client set-top boxes by requesting information from a REST service running on the main directv box/RVU-server. This commit also disables discovery if any directv configuration is supplied by the user. Signed-off-by: Nicholas Sielicki <sielicki@yandex.com> * components/media_player/directv.py: use hass.data Use hass.data instead of a global to remember state. Signed-off-by: Nicholas Sielicki <sielicki@yandex.com> * unconditionally import requests in directv.py Requests is a core requirement, so we're okay to import at the top of the file rather than conditionally / in a function. Signed-off-by: Nicholas Sielicki <sielicki@yandex.com>
This commit is contained in:
parent
7de73e9ef7
commit
ebc7ade591
@ -5,6 +5,7 @@ For more details about this platform, please refer to the documentation at
|
||||
https://home-assistant.io/components/media_player.directv/
|
||||
"""
|
||||
import voluptuous as vol
|
||||
import requests
|
||||
|
||||
from homeassistant.components.media_player import (
|
||||
MEDIA_TYPE_TVSHOW, MEDIA_TYPE_VIDEO, SUPPORT_PAUSE, SUPPORT_PLAY_MEDIA,
|
||||
@ -25,7 +26,7 @@ SUPPORT_DTV = SUPPORT_PAUSE | SUPPORT_TURN_ON | SUPPORT_TURN_OFF | \
|
||||
SUPPORT_PLAY_MEDIA | SUPPORT_STOP | SUPPORT_NEXT_TRACK | \
|
||||
SUPPORT_PREVIOUS_TRACK | SUPPORT_PLAY
|
||||
|
||||
KNOWN_HOSTS = []
|
||||
DATA_DIRECTV = "data_directv"
|
||||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
vol.Required(CONF_HOST): cv.string,
|
||||
@ -37,32 +38,45 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
|
||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||
"""Set up the DirecTV platform."""
|
||||
known_devices = hass.data.get(DATA_DIRECTV)
|
||||
if not known_devices:
|
||||
known_devices = []
|
||||
hosts = []
|
||||
|
||||
if discovery_info:
|
||||
host = discovery_info.get('host')
|
||||
|
||||
if host in KNOWN_HOSTS:
|
||||
return
|
||||
|
||||
hosts.append([
|
||||
'DirecTV_' + discovery_info.get('serial', ''),
|
||||
host, DEFAULT_PORT
|
||||
])
|
||||
|
||||
elif CONF_HOST in config:
|
||||
if CONF_HOST in config:
|
||||
hosts.append([
|
||||
config.get(CONF_NAME), config.get(CONF_HOST),
|
||||
config.get(CONF_PORT), config.get(CONF_DEVICE)
|
||||
])
|
||||
|
||||
elif discovery_info:
|
||||
host = discovery_info.get('host')
|
||||
name = 'DirecTV_' + discovery_info.get('serial', '')
|
||||
|
||||
# attempt to discover additional RVU units
|
||||
try:
|
||||
resp = requests.get(
|
||||
'http://%s:%d/info/getLocations' % (host, DEFAULT_PORT)).json()
|
||||
if "locations" in resp:
|
||||
for loc in resp["locations"]:
|
||||
if("locationName" in loc and "clientAddr" in loc
|
||||
and loc["clientAddr"] not in known_devices):
|
||||
hosts.append([str.title(loc["locationName"]), host,
|
||||
DEFAULT_PORT, loc["clientAddr"]])
|
||||
|
||||
except requests.exceptions.RequestException:
|
||||
# bail out and just go forward with uPnP data
|
||||
if DEFAULT_DEVICE not in known_devices:
|
||||
hosts.append([name, host, DEFAULT_PORT, DEFAULT_DEVICE])
|
||||
|
||||
dtvs = []
|
||||
|
||||
for host in hosts:
|
||||
dtvs.append(DirecTvDevice(*host))
|
||||
KNOWN_HOSTS.append(host)
|
||||
known_devices.append(host[-1])
|
||||
|
||||
add_devices(dtvs)
|
||||
hass.data[DATA_DIRECTV] = known_devices
|
||||
|
||||
return True
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user