From bbe45cbd4bc3f34d4b8b3d3b98d68dbd8b073840 Mon Sep 17 00:00:00 2001 From: ktnrg45 <38207570+ktnrg45@users.noreply.github.com> Date: Fri, 12 Jul 2019 04:14:35 -0700 Subject: [PATCH] Ps4 move send_command service to init (#25094) * Move services from media_player * Move services to init * add COMMANDS to const * change service handler to sync --- homeassistant/components/ps4/__init__.py | 33 +++++++++++++++-- homeassistant/components/ps4/const.py | 3 ++ homeassistant/components/ps4/media_player.py | 38 +------------------- 3 files changed, 34 insertions(+), 40 deletions(-) diff --git a/homeassistant/components/ps4/__init__.py b/homeassistant/components/ps4/__init__.py index 7f7561304d2..6a30e086e56 100644 --- a/homeassistant/components/ps4/__init__.py +++ b/homeassistant/components/ps4/__init__.py @@ -1,16 +1,27 @@ """Support for PlayStation 4 consoles.""" import logging +import voluptuous as vol + +from homeassistant.const import ( + ATTR_COMMAND, ATTR_ENTITY_ID, CONF_REGION, CONF_TOKEN) from homeassistant.core import split_entity_id -from homeassistant.const import CONF_REGION, CONF_TOKEN -from homeassistant.helpers import entity_registry +from homeassistant.helpers import entity_registry, config_validation as cv +from homeassistant.helpers.typing import HomeAssistantType from homeassistant.util import location from .config_flow import PlayStation4FlowHandler # noqa: pylint: disable=unused-import -from .const import DOMAIN, PS4_DATA # noqa: pylint: disable=unused-import +from .const import COMMANDS, DOMAIN, PS4_DATA _LOGGER = logging.getLogger(__name__) +SERVICE_COMMAND = 'send_command' + +PS4_COMMAND_SCHEMA = vol.Schema({ + vol.Required(ATTR_ENTITY_ID): cv.entity_ids, + vol.Required(ATTR_COMMAND): vol.In(list(COMMANDS)) +}) + class PS4Data(): """Init Data Class.""" @@ -30,6 +41,7 @@ async def async_setup(hass, config): transport, protocol = await async_create_ddp_endpoint() hass.data[PS4_DATA].protocol = protocol _LOGGER.debug("PS4 DDP endpoint created: %s, %s", transport, protocol) + service_handle(hass) return True @@ -124,3 +136,18 @@ def format_unique_id(creds, mac_address): """Use last 4 Chars of credential as suffix. Unique ID per PSN user.""" suffix = creds[-4:] return "{}_{}".format(mac_address, suffix) + + +def service_handle(hass: HomeAssistantType): + """Handle for services.""" + async def async_service_command(call): + """Service for sending commands.""" + entity_ids = call.data[ATTR_ENTITY_ID] + command = call.data[ATTR_COMMAND] + for device in hass.data[PS4_DATA].devices: + if device.entity_id in entity_ids: + await device.async_send_command(command) + + hass.services.async_register( + DOMAIN, SERVICE_COMMAND, async_service_command, + schema=PS4_COMMAND_SCHEMA) diff --git a/homeassistant/components/ps4/const.py b/homeassistant/components/ps4/const.py index 3c0dad6119f..50be7ee9177 100644 --- a/homeassistant/components/ps4/const.py +++ b/homeassistant/components/ps4/const.py @@ -5,5 +5,8 @@ DEFAULT_ALIAS = 'Home-Assistant' DOMAIN = 'ps4' PS4_DATA = 'ps4_data' +COMMANDS = ( + 'up', 'down', 'right', 'left', 'enter', 'back', 'option', 'ps') + # Deprecated used for logger/backwards compatibility from 0.89 REGIONS = ['R1', 'R2', 'R3', 'R4', 'R5'] diff --git a/homeassistant/components/ps4/media_player.py b/homeassistant/components/ps4/media_player.py index ec70a2cfb0e..7cd0d77113e 100644 --- a/homeassistant/components/ps4/media_player.py +++ b/homeassistant/components/ps4/media_player.py @@ -2,8 +2,6 @@ import logging import asyncio -import voluptuous as vol - from homeassistant.core import callback from homeassistant.components.media_player import ( ENTITY_IMAGE_URL, MediaPlayerDevice) @@ -12,9 +10,8 @@ from homeassistant.components.media_player.const import ( SUPPORT_PAUSE, SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_TURN_ON) from homeassistant.components.ps4 import format_unique_id from homeassistant.const import ( - ATTR_COMMAND, ATTR_ENTITY_ID, CONF_HOST, CONF_NAME, CONF_REGION, + CONF_HOST, CONF_NAME, CONF_REGION, CONF_TOKEN, STATE_IDLE, STATE_OFF, STATE_PLAYING) -import homeassistant.helpers.config_validation as cv from homeassistant.helpers import device_registry, entity_registry from homeassistant.util.json import load_json, save_json @@ -30,24 +27,6 @@ ICON = 'mdi:playstation' GAMES_FILE = '.ps4-games.json' MEDIA_IMAGE_DEFAULT = None -COMMANDS = ( - 'up', - 'down', - 'right', - 'left', - 'enter', - 'back', - 'option', - 'ps', -) - -SERVICE_COMMAND = 'send_command' - -PS4_COMMAND_SCHEMA = vol.Schema({ - vol.Required(ATTR_ENTITY_ID): cv.entity_ids, - vol.Required(ATTR_COMMAND): vol.In(list(COMMANDS)) -}) - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up PS4 from a config entry.""" @@ -55,21 +34,6 @@ async def async_setup_entry(hass, config_entry, async_add_entities): await async_setup_platform( hass, config, async_add_entities, discovery_info=None) - async def async_service_handle(hass): - """Handle for services.""" - async def async_service_command(call): - entity_ids = call.data[ATTR_ENTITY_ID] - command = call.data[ATTR_COMMAND] - for device in hass.data[PS4_DATA].devices: - if device.entity_id in entity_ids: - await device.async_send_command(command) - - hass.services.async_register( - PS4_DOMAIN, SERVICE_COMMAND, async_service_command, - schema=PS4_COMMAND_SCHEMA) - - await async_service_handle(hass) - async def async_setup_platform( hass, config, async_add_entities, discovery_info=None):