1 """Support for Cambridge Audio select entities."""
3 from collections.abc
import Awaitable, Callable
4 from dataclasses
import dataclass, field
6 from aiostreammagic
import StreamMagicClient
7 from aiostreammagic.models
import DisplayBrightness
15 from .entity
import CambridgeAudioEntity, command
20 @dataclass(frozen=True, kw_only=True)
22 """Describes Cambridge Audio select entity."""
24 options_fn: Callable[[StreamMagicClient], list[str]] = field(default=
lambda _: [])
25 load_fn: Callable[[StreamMagicClient], bool] = field(default=
lambda _:
True)
26 value_fn: Callable[[StreamMagicClient], str |
None]
27 set_value_fn: Callable[[StreamMagicClient, str], Awaitable[
None]]
31 """Set the audio output using the display name."""
32 audio_output_id = next(
33 (output.id
for output
in client.audio_output.outputs
if value == output.name),
36 assert audio_output_id
is not None
37 await client.set_audio_output(audio_output_id)
41 """Convert the current audio output id to name."""
45 for output
in client.audio_output.outputs
46 if client.state.audio_output == output.id
52 CONTROL_ENTITIES: tuple[CambridgeAudioSelectEntityDescription, ...] = (
54 key=
"display_brightness",
55 translation_key=
"display_brightness",
57 DisplayBrightness.BRIGHT.value,
58 DisplayBrightness.DIM.value,
59 DisplayBrightness.OFF.value,
61 entity_category=EntityCategory.CONFIG,
62 load_fn=
lambda client: client.display.brightness != DisplayBrightness.NONE,
63 value_fn=
lambda client: client.display.brightness,
64 set_value_fn=
lambda client, value: client.set_display_brightness(
65 DisplayBrightness(value)
70 translation_key=
"audio_output",
71 entity_category=EntityCategory.CONFIG,
72 options_fn=
lambda client: [
73 output.name
for output
in client.audio_output.outputs
75 load_fn=
lambda client: len(client.audio_output.outputs) > 0,
76 value_fn=_audio_output_value_fn,
77 set_value_fn=_audio_output_set_value_fn,
85 async_add_entities: AddEntitiesCallback,
87 """Set up Cambridge Audio select entities based on a config entry."""
89 client: StreamMagicClient = entry.runtime_data
90 entities: list[CambridgeAudioSelect] = [
92 for description
in CONTROL_ENTITIES
93 if description.load_fn(client)
99 """Defines a Cambridge Audio select entity."""
101 entity_description: CambridgeAudioSelectEntityDescription
105 client: StreamMagicClient,
106 description: CambridgeAudioSelectEntityDescription,
108 """Initialize Cambridge Audio select."""
112 options_fn = description.options_fn(client)
118 """Return the state of the select."""
123 """Change the selected option."""
str|None current_option(self)
None __init__(self, StreamMagicClient client, CambridgeAudioSelectEntityDescription description)
None async_select_option(self, str option)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
None _audio_output_set_value_fn(StreamMagicClient client, str value)
str|None _audio_output_value_fn(StreamMagicClient client)