Fix zwave_js.set_value schema (#51114)
* fix zwave_js.set_value schema * wrap all schemas in vol.Schema * readd removed assertions
This commit is contained in:
parent
3e7729faf2
commit
877d3e38b4
2 changed files with 75 additions and 46 deletions
|
@ -67,22 +67,26 @@ class ZWaveServices:
|
||||||
const.DOMAIN,
|
const.DOMAIN,
|
||||||
const.SERVICE_SET_CONFIG_PARAMETER,
|
const.SERVICE_SET_CONFIG_PARAMETER,
|
||||||
self.async_set_config_parameter,
|
self.async_set_config_parameter,
|
||||||
schema=vol.All(
|
schema=vol.Schema(
|
||||||
{
|
vol.All(
|
||||||
vol.Optional(ATTR_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]),
|
{
|
||||||
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
|
vol.Optional(ATTR_DEVICE_ID): vol.All(
|
||||||
vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Any(
|
cv.ensure_list, [cv.string]
|
||||||
vol.Coerce(int), cv.string
|
),
|
||||||
),
|
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
|
||||||
vol.Optional(const.ATTR_CONFIG_PARAMETER_BITMASK): vol.Any(
|
vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Any(
|
||||||
vol.Coerce(int), BITMASK_SCHEMA
|
vol.Coerce(int), cv.string
|
||||||
),
|
),
|
||||||
vol.Required(const.ATTR_CONFIG_VALUE): vol.Any(
|
vol.Optional(const.ATTR_CONFIG_PARAMETER_BITMASK): vol.Any(
|
||||||
vol.Coerce(int), cv.string
|
vol.Coerce(int), BITMASK_SCHEMA
|
||||||
),
|
),
|
||||||
},
|
vol.Required(const.ATTR_CONFIG_VALUE): vol.Any(
|
||||||
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
|
vol.Coerce(int), cv.string
|
||||||
parameter_name_does_not_need_bitmask,
|
),
|
||||||
|
},
|
||||||
|
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
|
||||||
|
parameter_name_does_not_need_bitmask,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -90,21 +94,25 @@ class ZWaveServices:
|
||||||
const.DOMAIN,
|
const.DOMAIN,
|
||||||
const.SERVICE_BULK_SET_PARTIAL_CONFIG_PARAMETERS,
|
const.SERVICE_BULK_SET_PARTIAL_CONFIG_PARAMETERS,
|
||||||
self.async_bulk_set_partial_config_parameters,
|
self.async_bulk_set_partial_config_parameters,
|
||||||
schema=vol.All(
|
schema=vol.Schema(
|
||||||
{
|
vol.All(
|
||||||
vol.Optional(ATTR_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]),
|
{
|
||||||
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
|
vol.Optional(ATTR_DEVICE_ID): vol.All(
|
||||||
vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Coerce(int),
|
cv.ensure_list, [cv.string]
|
||||||
vol.Required(const.ATTR_CONFIG_VALUE): vol.Any(
|
),
|
||||||
vol.Coerce(int),
|
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
|
||||||
{
|
vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Coerce(int),
|
||||||
vol.Any(
|
vol.Required(const.ATTR_CONFIG_VALUE): vol.Any(
|
||||||
vol.Coerce(int), BITMASK_SCHEMA, cv.string
|
vol.Coerce(int),
|
||||||
): vol.Any(vol.Coerce(int), cv.string)
|
{
|
||||||
},
|
vol.Any(
|
||||||
),
|
vol.Coerce(int), BITMASK_SCHEMA, cv.string
|
||||||
},
|
): vol.Any(vol.Coerce(int), cv.string)
|
||||||
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
|
},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -125,21 +133,27 @@ class ZWaveServices:
|
||||||
const.SERVICE_SET_VALUE,
|
const.SERVICE_SET_VALUE,
|
||||||
self.async_set_value,
|
self.async_set_value,
|
||||||
schema=vol.Schema(
|
schema=vol.Schema(
|
||||||
{
|
vol.All(
|
||||||
vol.Optional(ATTR_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]),
|
{
|
||||||
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
|
vol.Optional(ATTR_DEVICE_ID): vol.All(
|
||||||
vol.Required(const.ATTR_COMMAND_CLASS): vol.Coerce(int),
|
cv.ensure_list, [cv.string]
|
||||||
vol.Required(const.ATTR_PROPERTY): vol.Any(vol.Coerce(int), str),
|
),
|
||||||
vol.Optional(const.ATTR_PROPERTY_KEY): vol.Any(
|
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
|
||||||
vol.Coerce(int), str
|
vol.Required(const.ATTR_COMMAND_CLASS): vol.Coerce(int),
|
||||||
),
|
vol.Required(const.ATTR_PROPERTY): vol.Any(
|
||||||
vol.Optional(const.ATTR_ENDPOINT): vol.Coerce(int),
|
vol.Coerce(int), str
|
||||||
vol.Required(const.ATTR_VALUE): vol.Any(
|
),
|
||||||
bool, vol.Coerce(int), vol.Coerce(float), cv.string
|
vol.Optional(const.ATTR_PROPERTY_KEY): vol.Any(
|
||||||
),
|
vol.Coerce(int), str
|
||||||
vol.Optional(const.ATTR_WAIT_FOR_RESULT): vol.Coerce(bool),
|
),
|
||||||
},
|
vol.Optional(const.ATTR_ENDPOINT): vol.Coerce(int),
|
||||||
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
|
vol.Required(const.ATTR_VALUE): vol.Any(
|
||||||
|
bool, vol.Coerce(int), vol.Coerce(float), cv.string
|
||||||
|
),
|
||||||
|
vol.Optional(const.ATTR_WAIT_FOR_RESULT): vol.Coerce(bool),
|
||||||
|
},
|
||||||
|
cv.has_at_least_one_key(ATTR_DEVICE_ID, ATTR_ENTITY_ID),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -599,6 +599,7 @@ async def test_set_value(hass, client, climate_danfoss_lc_13, integration):
|
||||||
)
|
)
|
||||||
|
|
||||||
assert len(client.async_send_command.call_args_list) == 1
|
assert len(client.async_send_command.call_args_list) == 1
|
||||||
|
|
||||||
args = client.async_send_command.call_args[0][0]
|
args = client.async_send_command.call_args[0][0]
|
||||||
assert args["command"] == "node.set_value"
|
assert args["command"] == "node.set_value"
|
||||||
assert args["nodeId"] == 5
|
assert args["nodeId"] == 5
|
||||||
|
@ -619,3 +620,17 @@ async def test_set_value(hass, client, climate_danfoss_lc_13, integration):
|
||||||
"value": 0,
|
"value": 0,
|
||||||
}
|
}
|
||||||
assert args["value"] == 2
|
assert args["value"] == 2
|
||||||
|
|
||||||
|
# Test missing device and entities keys
|
||||||
|
with pytest.raises(vol.MultipleInvalid):
|
||||||
|
await hass.services.async_call(
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_SET_VALUE,
|
||||||
|
{
|
||||||
|
ATTR_COMMAND_CLASS: 117,
|
||||||
|
ATTR_PROPERTY: "local",
|
||||||
|
ATTR_VALUE: 2,
|
||||||
|
ATTR_WAIT_FOR_RESULT: True,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue