Do not select all entities when omitting entity ID in service call (#29178)
* Do not select all entities when omitting entity ID * Address comments Matthew * Require either area_id or entity_id * Fix tests * Fix test
This commit is contained in:
parent
9587afc5ce
commit
02d9ed5e36
47 changed files with 538 additions and 626 deletions
|
@ -19,7 +19,7 @@ from homeassistant.const import (
|
|||
)
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.config_validation import ( # noqa: F401
|
||||
ENTITY_SERVICE_SCHEMA,
|
||||
make_entity_service_schema,
|
||||
PLATFORM_SCHEMA,
|
||||
PLATFORM_SCHEMA_BASE,
|
||||
)
|
||||
|
@ -84,38 +84,19 @@ CONVERTIBLE_ATTRIBUTE = [ATTR_TEMPERATURE, ATTR_TARGET_TEMP_LOW, ATTR_TARGET_TEM
|
|||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
SET_AUX_HEAT_SCHEMA = ENTITY_SERVICE_SCHEMA.extend(
|
||||
{vol.Required(ATTR_AUX_HEAT): cv.boolean}
|
||||
)
|
||||
SET_TEMPERATURE_SCHEMA = vol.Schema(
|
||||
vol.All(
|
||||
cv.has_at_least_one_key(
|
||||
ATTR_TEMPERATURE, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW
|
||||
),
|
||||
ENTITY_SERVICE_SCHEMA.extend(
|
||||
{
|
||||
vol.Exclusive(ATTR_TEMPERATURE, "temperature"): vol.Coerce(float),
|
||||
vol.Inclusive(ATTR_TARGET_TEMP_HIGH, "temperature"): vol.Coerce(float),
|
||||
vol.Inclusive(ATTR_TARGET_TEMP_LOW, "temperature"): vol.Coerce(float),
|
||||
vol.Optional(ATTR_HVAC_MODE): vol.In(HVAC_MODES),
|
||||
}
|
||||
),
|
||||
)
|
||||
)
|
||||
SET_FAN_MODE_SCHEMA = ENTITY_SERVICE_SCHEMA.extend(
|
||||
{vol.Required(ATTR_FAN_MODE): cv.string}
|
||||
)
|
||||
SET_PRESET_MODE_SCHEMA = ENTITY_SERVICE_SCHEMA.extend(
|
||||
{vol.Required(ATTR_PRESET_MODE): cv.string}
|
||||
)
|
||||
SET_HVAC_MODE_SCHEMA = ENTITY_SERVICE_SCHEMA.extend(
|
||||
{vol.Required(ATTR_HVAC_MODE): vol.In(HVAC_MODES)}
|
||||
)
|
||||
SET_HUMIDITY_SCHEMA = ENTITY_SERVICE_SCHEMA.extend(
|
||||
{vol.Required(ATTR_HUMIDITY): vol.Coerce(float)}
|
||||
)
|
||||
SET_SWING_MODE_SCHEMA = ENTITY_SERVICE_SCHEMA.extend(
|
||||
{vol.Required(ATTR_SWING_MODE): cv.string}
|
||||
|
||||
SET_TEMPERATURE_SCHEMA = vol.All(
|
||||
cv.has_at_least_one_key(
|
||||
ATTR_TEMPERATURE, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW
|
||||
),
|
||||
make_entity_service_schema(
|
||||
{
|
||||
vol.Exclusive(ATTR_TEMPERATURE, "temperature"): vol.Coerce(float),
|
||||
vol.Inclusive(ATTR_TARGET_TEMP_HIGH, "temperature"): vol.Coerce(float),
|
||||
vol.Inclusive(ATTR_TARGET_TEMP_LOW, "temperature"): vol.Coerce(float),
|
||||
vol.Optional(ATTR_HVAC_MODE): vol.In(HVAC_MODES),
|
||||
}
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
|
@ -126,32 +107,40 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType) -> bool:
|
|||
)
|
||||
await component.async_setup(config)
|
||||
|
||||
component.async_register_entity_service(SERVICE_TURN_ON, {}, "async_turn_on")
|
||||
component.async_register_entity_service(SERVICE_TURN_OFF, {}, "async_turn_off")
|
||||
component.async_register_entity_service(
|
||||
SERVICE_TURN_ON, ENTITY_SERVICE_SCHEMA, "async_turn_on"
|
||||
SERVICE_SET_HVAC_MODE,
|
||||
{vol.Required(ATTR_HVAC_MODE): vol.In(HVAC_MODES)},
|
||||
"async_set_hvac_mode",
|
||||
)
|
||||
component.async_register_entity_service(
|
||||
SERVICE_TURN_OFF, ENTITY_SERVICE_SCHEMA, "async_turn_off"
|
||||
SERVICE_SET_PRESET_MODE,
|
||||
{vol.Required(ATTR_PRESET_MODE): cv.string},
|
||||
"async_set_preset_mode",
|
||||
)
|
||||
component.async_register_entity_service(
|
||||
SERVICE_SET_HVAC_MODE, SET_HVAC_MODE_SCHEMA, "async_set_hvac_mode"
|
||||
SERVICE_SET_AUX_HEAT,
|
||||
{vol.Required(ATTR_AUX_HEAT): cv.boolean},
|
||||
async_service_aux_heat,
|
||||
)
|
||||
component.async_register_entity_service(
|
||||
SERVICE_SET_PRESET_MODE, SET_PRESET_MODE_SCHEMA, "async_set_preset_mode"
|
||||
SERVICE_SET_TEMPERATURE, SET_TEMPERATURE_SCHEMA, async_service_temperature_set,
|
||||
)
|
||||
component.async_register_entity_service(
|
||||
SERVICE_SET_AUX_HEAT, SET_AUX_HEAT_SCHEMA, async_service_aux_heat
|
||||
SERVICE_SET_HUMIDITY,
|
||||
{vol.Required(ATTR_HUMIDITY): vol.Coerce(float)},
|
||||
"async_set_humidity",
|
||||
)
|
||||
component.async_register_entity_service(
|
||||
SERVICE_SET_TEMPERATURE, SET_TEMPERATURE_SCHEMA, async_service_temperature_set
|
||||
SERVICE_SET_FAN_MODE,
|
||||
{vol.Required(ATTR_FAN_MODE): cv.string},
|
||||
"async_set_fan_mode",
|
||||
)
|
||||
component.async_register_entity_service(
|
||||
SERVICE_SET_HUMIDITY, SET_HUMIDITY_SCHEMA, "async_set_humidity"
|
||||
)
|
||||
component.async_register_entity_service(
|
||||
SERVICE_SET_FAN_MODE, SET_FAN_MODE_SCHEMA, "async_set_fan_mode"
|
||||
)
|
||||
component.async_register_entity_service(
|
||||
SERVICE_SET_SWING_MODE, SET_SWING_MODE_SCHEMA, "async_set_swing_mode"
|
||||
SERVICE_SET_SWING_MODE,
|
||||
{vol.Required(ATTR_SWING_MODE): cv.string},
|
||||
"async_set_swing_mode",
|
||||
)
|
||||
|
||||
return True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue