Add wake on lan capability to philips TV (#12065)

* Add wake on lan capability to philips TV

* Update requirements_all.txt

* Fix line length issues.

* Replace wake on lan with turn on script for philips TV

* rerun requirements script
pull/12217/merge
Marc Egli 2018-02-07 18:35:08 +01:00 committed by Paulus Schoutsen
parent d05a1e35fc
commit ea35ffbc81
1 changed files with 19 additions and 7 deletions

View File

@ -12,10 +12,11 @@ import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.components.media_player import (
PLATFORM_SCHEMA, SUPPORT_NEXT_TRACK, SUPPORT_PREVIOUS_TRACK,
SUPPORT_SELECT_SOURCE, SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE,
SUPPORT_VOLUME_STEP, SUPPORT_PLAY, MediaPlayerDevice)
SUPPORT_SELECT_SOURCE, SUPPORT_TURN_OFF, SUPPORT_TURN_ON,
SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_STEP, SUPPORT_PLAY, MediaPlayerDevice)
from homeassistant.const import (
CONF_HOST, CONF_NAME, STATE_OFF, STATE_ON, STATE_UNKNOWN)
from homeassistant.helpers.script import Script
from homeassistant.util import Throttle
REQUIREMENTS = ['ha-philipsjs==0.0.1']
@ -30,14 +31,16 @@ SUPPORT_PHILIPS_JS = SUPPORT_TURN_OFF | SUPPORT_VOLUME_STEP | \
SUPPORT_PHILIPS_JS_TV = SUPPORT_PHILIPS_JS | SUPPORT_NEXT_TRACK | \
SUPPORT_PREVIOUS_TRACK | SUPPORT_PLAY
CONF_ON_ACTION = 'turn_on_action'
DEFAULT_DEVICE = 'default'
DEFAULT_HOST = '127.0.0.1'
DEFAULT_NAME = 'Philips TV'
BASE_URL = 'http://{0}:1925/1/{1}'
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_HOST, default=DEFAULT_HOST): cv.string,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
vol.Optional(CONF_ON_ACTION): cv.SCRIPT_SCHEMA,
})
@ -48,16 +51,18 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
name = config.get(CONF_NAME)
host = config.get(CONF_HOST)
turn_on_action = config.get(CONF_ON_ACTION)
tvapi = haphilipsjs.PhilipsTV(host)
on_script = Script(hass, turn_on_action) if turn_on_action else None
add_devices([PhilipsTV(tvapi, name)])
add_devices([PhilipsTV(tvapi, name, on_script)])
class PhilipsTV(MediaPlayerDevice):
"""Representation of a Philips TV exposing the JointSpace API."""
def __init__(self, tv, name):
def __init__(self, tv, name, on_script):
"""Initialize the Philips TV."""
self._tv = tv
self._name = name
@ -74,6 +79,7 @@ class PhilipsTV(MediaPlayerDevice):
self._source_mapping = {}
self._watching_tv = None
self._channel_name = None
self._on_script = on_script
@property
def name(self):
@ -88,9 +94,10 @@ class PhilipsTV(MediaPlayerDevice):
@property
def supported_features(self):
"""Flag media player features that are supported."""
is_supporting_turn_on = SUPPORT_TURN_ON if self._on_script else 0
if self._watching_tv:
return SUPPORT_PHILIPS_JS_TV
return SUPPORT_PHILIPS_JS
return SUPPORT_PHILIPS_JS_TV | is_supporting_turn_on
return SUPPORT_PHILIPS_JS | is_supporting_turn_on
@property
def state(self):
@ -126,6 +133,11 @@ class PhilipsTV(MediaPlayerDevice):
"""Boolean if volume is currently muted."""
return self._muted
def turn_on(self):
"""Turn on the device."""
if self._on_script:
self._on_script.run()
def turn_off(self):
"""Turn off the device."""
self._tv.sendKey('Standby')