From: Alex Barcelo Date: Thu, 20 Feb 2025 16:44:03 +0000 (+0100) Subject: Adding `number` as valid volume player control entities (#1969) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=9fc6212768d1e5589b361278474fac7549af3e07;p=music-assistant-server.git Adding `number` as valid volume player control entities (#1969) --- diff --git a/music_assistant/helpers/util.py b/music_assistant/helpers/util.py index f0667020..878dc04a 100644 --- a/music_assistant/helpers/util.py +++ b/music_assistant/helpers/util.py @@ -92,7 +92,7 @@ def filename_from_string(string: str) -> str: def try_parse_int(possible_int: Any, default: int | None = 0) -> int | None: """Try to parse an int.""" try: - return int(possible_int) + return int(float(possible_int)) except (TypeError, ValueError): return default diff --git a/music_assistant/providers/hass/__init__.py b/music_assistant/providers/hass/__init__.py index 245b6419..9a9f84fc 100644 --- a/music_assistant/providers/hass/__init__.py +++ b/music_assistant/providers/hass/__init__.py @@ -227,8 +227,8 @@ async def _get_player_control_config_entries(hass: HomeAssistantClient) -> tuple all_power_entities.append(ConfigValueOption(name, state["entity_id"])) all_mute_entities.append(ConfigValueOption(name, state["entity_id"])) continue - if entity_platform == "input_number": - # input_number is suitable for volume control + if entity_platform in ("number", "input_number"): + # number and input_number are very similar, both are suitable for volume control all_volume_entities.append(ConfigValueOption(name, state["entity_id"])) continue @@ -445,20 +445,24 @@ class HomeAssistantProvider(PluginProvider): async def _handle_player_control_volume_set(self, entity_id: str, volume_level: int) -> None: """Handle setting volume on the playercontrol.""" - if entity_id.startswith("media_player."): + domain = entity_id.split(".", 1)[0] + + if domain == "media_player": await self.hass.call_service( - domain="media_player", + domain=domain, service="volume_set", service_data={"volume_level": volume_level / 100}, target={"entity_id": entity_id}, ) - else: - await self.hass.call_service( - domain="input_number", - service="set_value", - target={"entity_id": entity_id}, - service_data={"value": volume_level}, - ) + return + + # At this point, `set_value` will work for both `number` or `input_number` + await self.hass.call_service( + domain=domain, + service="set_value", + target={"entity_id": entity_id}, + service_data={"value": volume_level}, + ) def _update_control_from_state_msg(self, entity_id: str, state: CompressedState) -> None: """Update PlayerControl from state(update) message."""