Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Constants for the Onkyo integration."""
2 
3 from enum import Enum
4 import typing
5 from typing import ClassVar, Literal, Self
6 
7 import pyeiscp
8 
9 DOMAIN = "onkyo"
10 
11 DEVICE_INTERVIEW_TIMEOUT = 5
12 DEVICE_DISCOVERY_TIMEOUT = 5
13 
14 CONF_SOURCES = "sources"
15 CONF_RECEIVER_MAX_VOLUME = "receiver_max_volume"
16 
17 type VolumeResolution = Literal[50, 80, 100, 200]
18 OPTION_VOLUME_RESOLUTION = "volume_resolution"
19 OPTION_VOLUME_RESOLUTION_DEFAULT: VolumeResolution = 50
20 VOLUME_RESOLUTION_ALLOWED: tuple[VolumeResolution, ...] = typing.get_args(
21  VolumeResolution.__value__
22 )
23 
24 OPTION_MAX_VOLUME = "max_volume"
25 OPTION_MAX_VOLUME_DEFAULT = 100.0
26 
27 OPTION_INPUT_SOURCES = "input_sources"
28 
29 _INPUT_SOURCE_MEANINGS = {
30  "00": "VIDEO1 ··· VCR/DVR ··· STB/DVR",
31  "01": "VIDEO2 ··· CBL/SAT",
32  "02": "VIDEO3 ··· GAME/TV ··· GAME",
33  "03": "VIDEO4 ··· AUX",
34  "04": "VIDEO5 ··· AUX2 ··· GAME2",
35  "05": "VIDEO6 ··· PC",
36  "06": "VIDEO7",
37  "07": "HIDDEN1 ··· EXTRA1",
38  "08": "HIDDEN2 ··· EXTRA2",
39  "09": "HIDDEN3 ··· EXTRA3",
40  "10": "DVD ··· BD/DVD",
41  "11": "STRM BOX",
42  "12": "TV",
43  "20": "TAPE ··· TV/TAPE",
44  "21": "TAPE2",
45  "22": "PHONO",
46  "23": "CD ··· TV/CD",
47  "24": "FM",
48  "25": "AM",
49  "26": "TUNER",
50  "27": "MUSIC SERVER ··· P4S ··· DLNA",
51  "28": "INTERNET RADIO ··· IRADIO FAVORITE",
52  "29": "USB ··· USB(FRONT)",
53  "2A": "USB(REAR)",
54  "2B": "NETWORK ··· NET",
55  "2D": "AIRPLAY",
56  "2E": "BLUETOOTH",
57  "2F": "USB DAC IN",
58  "30": "MULTI CH",
59  "31": "XM",
60  "32": "SIRIUS",
61  "33": "DAB",
62  "40": "UNIVERSAL PORT",
63  "41": "LINE",
64  "42": "LINE2",
65  "44": "OPTICAL",
66  "45": "COAXIAL",
67  "55": "HDMI 5",
68  "56": "HDMI 6",
69  "57": "HDMI 7",
70  "80": "MAIN SOURCE",
71 }
72 
73 
74 class InputSource(Enum):
75  """Receiver input source."""
76 
77  DVR = "00"
78  CBL = "01"
79  GAME = "02"
80  AUX = "03"
81  GAME2 = "04"
82  PC = "05"
83  VIDEO7 = "06"
84  EXTRA1 = "07"
85  EXTRA2 = "08"
86  EXTRA3 = "09"
87  DVD = "10"
88  STRM_BOX = "11"
89  TV = "12"
90  TAPE = "20"
91  TAPE2 = "21"
92  PHONO = "22"
93  CD = "23"
94  FM = "24"
95  AM = "25"
96  TUNER = "26"
97  MUSIC_SERVER = "27"
98  INTERNET_RADIO = "28"
99  USB = "29"
100  USB_REAR = "2A"
101  NETWORK = "2B"
102  AIRPLAY = "2D"
103  BLUETOOTH = "2E"
104  USB_DAC_IN = "2F"
105  MULTI_CH = "30"
106  XM = "31"
107  SIRIUS = "32"
108  DAB = "33"
109  UNIVERSAL_PORT = "40"
110  LINE = "41"
111  LINE2 = "42"
112  OPTICAL = "44"
113  COAXIAL = "45"
114  HDMI_5 = "55"
115  HDMI_6 = "56"
116  HDMI_7 = "57"
117  MAIN_SOURCE = "80"
118 
119  __meaning_mapping: ClassVar[dict[str, Self]] = {} # type: ignore[misc]
120 
121  value_meaning: str
122 
123  def __new__(cls, value: str) -> Self:
124  """Create InputSource enum."""
125  obj = object.__new__(cls)
126  obj._value_ = value
127  obj.value_meaning = _INPUT_SOURCE_MEANINGS[value]
128 
129  cls.__meaning_mapping[obj.value_meaning] = obj
130 
131  return obj
132 
133  @classmethod
134  def from_meaning(cls, meaning: str) -> Self:
135  """Get InputSource enum from its meaning."""
136  return cls.__meaning_mapping[meaning]
137 
138 
139 ZONES = {"main": "Main", "zone2": "Zone 2", "zone3": "Zone 3", "zone4": "Zone 4"}
140 
141 PYEISCP_COMMANDS = pyeiscp.commands.COMMANDS