Validate tone is valid when processing siren.turn_on service call (#52953)
* Validate tone is valid when processing siren.turn_on service call * Better message
This commit is contained in:
parent
ac39607ae9
commit
30def802fc
2 changed files with 23 additions and 3 deletions
|
@ -51,14 +51,24 @@ class SirenTurnOnServiceParameters(TypedDict, total=False):
|
|||
volume_level: float
|
||||
|
||||
|
||||
def filter_turn_on_params(
|
||||
def process_turn_on_params(
|
||||
siren: SirenEntity, params: SirenTurnOnServiceParameters
|
||||
) -> SirenTurnOnServiceParameters:
|
||||
"""Filter out params not supported by the siren."""
|
||||
"""
|
||||
Process turn_on service params.
|
||||
|
||||
Filters out unsupported params and validates the rest.
|
||||
"""
|
||||
supported_features = siren.supported_features or 0
|
||||
|
||||
if not supported_features & SUPPORT_TONES:
|
||||
params.pop(ATTR_TONE, None)
|
||||
elif ATTR_TONE in params and (
|
||||
not siren.available_tones
|
||||
or (tone := params[ATTR_TONE]) not in siren.available_tones
|
||||
):
|
||||
raise ValueError(f"Tone {tone} is not a valid tone for this device")
|
||||
|
||||
if not supported_features & SUPPORT_DURATION:
|
||||
params.pop(ATTR_DURATION, None)
|
||||
if not supported_features & SUPPORT_VOLUME_SET:
|
||||
|
@ -84,7 +94,7 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType) -> bool:
|
|||
if k in (ATTR_TONE, ATTR_DURATION, ATTR_VOLUME_LEVEL)
|
||||
}
|
||||
await siren.async_turn_on(
|
||||
**filter_turn_on_params(siren, cast(SirenTurnOnServiceParameters, data))
|
||||
**process_turn_on_params(siren, cast(SirenTurnOnServiceParameters, data))
|
||||
)
|
||||
|
||||
component.async_register_entity_service(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue