Add area support to vacuum service schemas (#25443)

* Add area support to vacuum service schemas

* Fixed tests

* De-couple platform schemas
This commit is contained in:
Aaron Bach 2019-07-24 00:29:08 -06:00 committed by Pascal Vizeli
parent 561bbecd25
commit 9e36448f03
3 changed files with 24 additions and 24 deletions

View File

@ -7,12 +7,12 @@ import voluptuous as vol
from homeassistant.components import group from homeassistant.components import group
from homeassistant.const import ( from homeassistant.const import (
ATTR_BATTERY_LEVEL, ATTR_COMMAND, ATTR_ENTITY_ID, SERVICE_TOGGLE, ATTR_BATTERY_LEVEL, ATTR_COMMAND, SERVICE_TOGGLE, SERVICE_TURN_OFF,
SERVICE_TURN_OFF, SERVICE_TURN_ON, STATE_ON, STATE_PAUSED, STATE_IDLE) SERVICE_TURN_ON, STATE_ON, STATE_PAUSED, STATE_IDLE)
from homeassistant.loader import bind_hass from homeassistant.loader import bind_hass
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.config_validation import ( # noqa from homeassistant.helpers.config_validation import ( # noqa
PLATFORM_SCHEMA, PLATFORM_SCHEMA_BASE) ENTITY_SERVICE_SCHEMA, PLATFORM_SCHEMA, PLATFORM_SCHEMA_BASE)
from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.entity import (ToggleEntity, Entity) from homeassistant.helpers.entity import (ToggleEntity, Entity)
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
@ -42,15 +42,11 @@ SERVICE_START = 'start'
SERVICE_PAUSE = 'pause' SERVICE_PAUSE = 'pause'
SERVICE_STOP = 'stop' SERVICE_STOP = 'stop'
VACUUM_SERVICE_SCHEMA = vol.Schema({ VACUUM_SET_FAN_SPEED_SERVICE_SCHEMA = ENTITY_SERVICE_SCHEMA.extend({
vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids,
})
VACUUM_SET_FAN_SPEED_SERVICE_SCHEMA = VACUUM_SERVICE_SCHEMA.extend({
vol.Required(ATTR_FAN_SPEED): cv.string, vol.Required(ATTR_FAN_SPEED): cv.string,
}) })
VACUUM_SEND_COMMAND_SERVICE_SCHEMA = VACUUM_SERVICE_SCHEMA.extend({ VACUUM_SEND_COMMAND_SERVICE_SCHEMA = ENTITY_SERVICE_SCHEMA.extend({
vol.Required(ATTR_COMMAND): cv.string, vol.Required(ATTR_COMMAND): cv.string,
vol.Optional(ATTR_PARAMS): vol.Any(dict, cv.ensure_list), vol.Optional(ATTR_PARAMS): vol.Any(dict, cv.ensure_list),
}) })
@ -95,43 +91,43 @@ async def async_setup(hass, config):
await component.async_setup(config) await component.async_setup(config)
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_TURN_ON, VACUUM_SERVICE_SCHEMA, SERVICE_TURN_ON, ENTITY_SERVICE_SCHEMA,
'async_turn_on' 'async_turn_on'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_TURN_OFF, VACUUM_SERVICE_SCHEMA, SERVICE_TURN_OFF, ENTITY_SERVICE_SCHEMA,
'async_turn_off' 'async_turn_off'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_TOGGLE, VACUUM_SERVICE_SCHEMA, SERVICE_TOGGLE, ENTITY_SERVICE_SCHEMA,
'async_toggle' 'async_toggle'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_START_PAUSE, VACUUM_SERVICE_SCHEMA, SERVICE_START_PAUSE, ENTITY_SERVICE_SCHEMA,
'async_start_pause' 'async_start_pause'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_START, VACUUM_SERVICE_SCHEMA, SERVICE_START, ENTITY_SERVICE_SCHEMA,
'async_start' 'async_start'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_PAUSE, VACUUM_SERVICE_SCHEMA, SERVICE_PAUSE, ENTITY_SERVICE_SCHEMA,
'async_pause' 'async_pause'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_RETURN_TO_BASE, VACUUM_SERVICE_SCHEMA, SERVICE_RETURN_TO_BASE, ENTITY_SERVICE_SCHEMA,
'async_return_to_base' 'async_return_to_base'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_CLEAN_SPOT, VACUUM_SERVICE_SCHEMA, SERVICE_CLEAN_SPOT, ENTITY_SERVICE_SCHEMA,
'async_clean_spot' 'async_clean_spot'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_LOCATE, VACUUM_SERVICE_SCHEMA, SERVICE_LOCATE, ENTITY_SERVICE_SCHEMA,
'async_locate' 'async_locate'
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_STOP, VACUUM_SERVICE_SCHEMA, SERVICE_STOP, ENTITY_SERVICE_SCHEMA,
'async_stop' 'async_stop'
) )
component.async_register_entity_service( component.async_register_entity_service(

View File

@ -9,9 +9,8 @@ from homeassistant.components.vacuum import (
ATTR_CLEANED_AREA, DOMAIN, PLATFORM_SCHEMA, SUPPORT_BATTERY, ATTR_CLEANED_AREA, DOMAIN, PLATFORM_SCHEMA, SUPPORT_BATTERY,
SUPPORT_CLEAN_SPOT, SUPPORT_FAN_SPEED, SUPPORT_LOCATE, SUPPORT_PAUSE, SUPPORT_CLEAN_SPOT, SUPPORT_FAN_SPEED, SUPPORT_LOCATE, SUPPORT_PAUSE,
SUPPORT_RETURN_HOME, SUPPORT_SEND_COMMAND, SUPPORT_STOP, SUPPORT_RETURN_HOME, SUPPORT_SEND_COMMAND, SUPPORT_STOP,
SUPPORT_STATE, SUPPORT_START, VACUUM_SERVICE_SCHEMA, StateVacuumDevice, SUPPORT_STATE, SUPPORT_START, StateVacuumDevice, STATE_CLEANING,
STATE_CLEANING, STATE_DOCKED, STATE_PAUSED, STATE_IDLE, STATE_RETURNING, STATE_DOCKED, STATE_PAUSED, STATE_IDLE, STATE_RETURNING, STATE_ERROR)
STATE_ERROR)
from homeassistant.const import ( from homeassistant.const import (
ATTR_ENTITY_ID, CONF_HOST, CONF_NAME, CONF_TOKEN, STATE_OFF, STATE_ON) ATTR_ENTITY_ID, CONF_HOST, CONF_NAME, CONF_TOKEN, STATE_OFF, STATE_ON)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -60,6 +59,10 @@ ATTR_STATUS = 'status'
ATTR_ZONE_ARRAY = 'zone' ATTR_ZONE_ARRAY = 'zone'
ATTR_ZONE_REPEATER = 'repeats' ATTR_ZONE_REPEATER = 'repeats'
VACUUM_SERVICE_SCHEMA = vol.Schema({
vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids,
})
SERVICE_SCHEMA_REMOTE_CONTROL = VACUUM_SERVICE_SCHEMA.extend({ SERVICE_SCHEMA_REMOTE_CONTROL = VACUUM_SERVICE_SCHEMA.extend({
vol.Optional(ATTR_RC_VELOCITY): vol.Optional(ATTR_RC_VELOCITY):
vol.All(vol.Coerce(float), vol.Clamp(min=-0.29, max=0.29)), vol.All(vol.Coerce(float), vol.Clamp(min=-0.29, max=0.29)),

View File

@ -3,7 +3,7 @@ import unittest
from homeassistant.components import vacuum from homeassistant.components import vacuum
from homeassistant.components.vacuum import ( from homeassistant.components.vacuum import (
ATTR_BATTERY_LEVEL, ATTR_COMMAND, ATTR_ENTITY_ID, ATTR_FAN_SPEED, ATTR_BATTERY_LEVEL, ATTR_COMMAND, ATTR_FAN_SPEED,
ATTR_FAN_SPEED_LIST, ATTR_PARAMS, ATTR_STATUS, DOMAIN, ATTR_FAN_SPEED_LIST, ATTR_PARAMS, ATTR_STATUS, DOMAIN,
ENTITY_ID_ALL_VACUUMS, ENTITY_ID_ALL_VACUUMS,
SERVICE_SEND_COMMAND, SERVICE_SET_FAN_SPEED, SERVICE_SEND_COMMAND, SERVICE_SET_FAN_SPEED,
@ -13,7 +13,8 @@ from homeassistant.components.demo.vacuum import (
DEMO_VACUUM_BASIC, DEMO_VACUUM_COMPLETE, DEMO_VACUUM_MINIMAL, DEMO_VACUUM_BASIC, DEMO_VACUUM_COMPLETE, DEMO_VACUUM_MINIMAL,
DEMO_VACUUM_MOST, DEMO_VACUUM_NONE, DEMO_VACUUM_STATE, FAN_SPEEDS) DEMO_VACUUM_MOST, DEMO_VACUUM_NONE, DEMO_VACUUM_STATE, FAN_SPEEDS)
from homeassistant.const import ( from homeassistant.const import (
ATTR_SUPPORTED_FEATURES, CONF_PLATFORM, STATE_OFF, STATE_ON) ATTR_ENTITY_ID, ATTR_SUPPORTED_FEATURES, CONF_PLATFORM, STATE_OFF,
STATE_ON)
from homeassistant.setup import setup_component from homeassistant.setup import setup_component
from tests.common import get_test_home_assistant, mock_service from tests.common import get_test_home_assistant, mock_service