Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Constants used by vizio component."""
2 
3 from pyvizio.const import (
4  DEVICE_CLASS_SPEAKER as VIZIO_DEVICE_CLASS_SPEAKER,
5  DEVICE_CLASS_TV as VIZIO_DEVICE_CLASS_TV,
6 )
7 import voluptuous as vol
8 
10  MediaPlayerDeviceClass,
11  MediaPlayerEntityFeature,
12 )
13 from homeassistant.const import (
14  CONF_ACCESS_TOKEN,
15  CONF_DEVICE_CLASS,
16  CONF_EXCLUDE,
17  CONF_HOST,
18  CONF_INCLUDE,
19  CONF_NAME,
20 )
22 from homeassistant.helpers.typing import VolDictType
23 
24 SERVICE_UPDATE_SETTING = "update_setting"
25 
26 ATTR_SETTING_TYPE = "setting_type"
27 ATTR_SETTING_NAME = "setting_name"
28 ATTR_NEW_VALUE = "new_value"
29 
30 UPDATE_SETTING_SCHEMA: VolDictType = {
31  vol.Required(ATTR_SETTING_TYPE): vol.All(cv.string, vol.Lower, cv.slugify),
32  vol.Required(ATTR_SETTING_NAME): vol.All(cv.string, vol.Lower, cv.slugify),
33  vol.Required(ATTR_NEW_VALUE): vol.Any(vol.Coerce(int), cv.string),
34 }
35 
36 CONF_ADDITIONAL_CONFIGS = "additional_configs"
37 CONF_APP_ID = "APP_ID"
38 CONF_APPS = "apps"
39 CONF_APPS_TO_INCLUDE_OR_EXCLUDE = "apps_to_include_or_exclude"
40 CONF_CONFIG = "config"
41 CONF_INCLUDE_OR_EXCLUDE = "include_or_exclude"
42 CONF_NAME_SPACE = "NAME_SPACE"
43 CONF_MESSAGE = "MESSAGE"
44 CONF_VOLUME_STEP = "volume_step"
45 
46 DEFAULT_DEVICE_CLASS = MediaPlayerDeviceClass.TV
47 DEFAULT_NAME = "Vizio SmartCast"
48 DEFAULT_TIMEOUT = 8
49 DEFAULT_VOLUME_STEP = 1
50 
51 DEVICE_ID = "pyvizio"
52 
53 DOMAIN = "vizio"
54 
55 COMMON_SUPPORTED_COMMANDS = (
56  MediaPlayerEntityFeature.PAUSE
57  | MediaPlayerEntityFeature.PLAY
58  | MediaPlayerEntityFeature.SELECT_SOURCE
59  | MediaPlayerEntityFeature.TURN_ON
60  | MediaPlayerEntityFeature.TURN_OFF
61  | MediaPlayerEntityFeature.VOLUME_MUTE
62  | MediaPlayerEntityFeature.VOLUME_SET
63  | MediaPlayerEntityFeature.VOLUME_STEP
64 )
65 
66 SUPPORTED_COMMANDS = {
67  MediaPlayerDeviceClass.SPEAKER: COMMON_SUPPORTED_COMMANDS,
68  MediaPlayerDeviceClass.TV: (
69  COMMON_SUPPORTED_COMMANDS
70  | MediaPlayerEntityFeature.NEXT_TRACK
71  | MediaPlayerEntityFeature.PREVIOUS_TRACK
72  ),
73 }
74 
75 VIZIO_SOUND_MODE = "eq"
76 VIZIO_AUDIO_SETTINGS = "audio"
77 VIZIO_MUTE_ON = "on"
78 VIZIO_VOLUME = "volume"
79 VIZIO_MUTE = "mute"
80 
81 # Since Vizio component relies on device class, this dict will ensure that changes to
82 # the values of DEVICE_CLASS_SPEAKER or DEVICE_CLASS_TV don't require changes to pyvizio.
83 VIZIO_DEVICE_CLASSES = {
84  MediaPlayerDeviceClass.SPEAKER: VIZIO_DEVICE_CLASS_SPEAKER,
85  MediaPlayerDeviceClass.TV: VIZIO_DEVICE_CLASS_TV,
86 }
87 
88 VIZIO_SCHEMA = {
89  vol.Required(CONF_HOST): cv.string,
90  vol.Optional(CONF_ACCESS_TOKEN): cv.string,
91  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
92  vol.Optional(CONF_DEVICE_CLASS, default=DEFAULT_DEVICE_CLASS): vol.All(
93  cv.string,
94  vol.Lower,
95  vol.In([MediaPlayerDeviceClass.TV, MediaPlayerDeviceClass.SPEAKER]),
96  ),
97  vol.Optional(CONF_VOLUME_STEP, default=DEFAULT_VOLUME_STEP): vol.All(
98  vol.Coerce(int), vol.Range(min=1, max=10)
99  ),
100  vol.Optional(CONF_APPS): vol.All(
101  {
102  vol.Exclusive(CONF_INCLUDE, "apps_filter"): vol.All(
103  cv.ensure_list, [cv.string]
104  ),
105  vol.Exclusive(CONF_EXCLUDE, "apps_filter"): vol.All(
106  cv.ensure_list, [cv.string]
107  ),
108  vol.Optional(CONF_ADDITIONAL_CONFIGS): vol.All(
109  cv.ensure_list,
110  [
111  {
112  vol.Required(CONF_NAME): cv.string,
113  vol.Required(CONF_CONFIG): {
114  vol.Required(CONF_APP_ID): cv.string,
115  vol.Required(CONF_NAME_SPACE): vol.Coerce(int),
116  vol.Optional(CONF_MESSAGE, default=None): vol.Or(
117  cv.string, None
118  ),
119  },
120  },
121  ],
122  ),
123  },
124  cv.has_at_least_one_key(CONF_INCLUDE, CONF_EXCLUDE, CONF_ADDITIONAL_CONFIGS),
125  ),
126 }