Adding `number` as valid volume player control entities (#1969)
authorAlex Barcelo <alex.barcelo@gmail.com>
Thu, 20 Feb 2025 16:44:03 +0000 (17:44 +0100)
committerGitHub <noreply@github.com>
Thu, 20 Feb 2025 16:44:03 +0000 (17:44 +0100)
music_assistant/helpers/util.py
music_assistant/providers/hass/__init__.py

index f06670204cb6d13af5d8c56795544cb77006f4fb..878dc04a9dae52e6b627ec93726d68e696637855 100644 (file)
@@ -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
 
index 245b6419572ce62021a58233721d2660a690e78a..9a9f84fc6c3e3c2f6ac7ab6a851d2a76a761e2bb 100644 (file)
@@ -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."""