"""Constants used by vizio component.""" from pyvizio.const import ( DEVICE_CLASS_SPEAKER as VIZIO_DEVICE_CLASS_SPEAKER, DEVICE_CLASS_TV as VIZIO_DEVICE_CLASS_TV, ) import voluptuous as vol from homeassistant.components.media_player import ( MediaPlayerDeviceClass, MediaPlayerEntityFeature, ) from homeassistant.const import ( CONF_ACCESS_TOKEN, CONF_DEVICE_CLASS, CONF_EXCLUDE, CONF_HOST, CONF_INCLUDE, CONF_NAME, ) import homeassistant.helpers.config_validation as cv SERVICE_UPDATE_SETTING = "update_setting" ATTR_SETTING_TYPE = "setting_type" ATTR_SETTING_NAME = "setting_name" ATTR_NEW_VALUE = "new_value" UPDATE_SETTING_SCHEMA = { vol.Required(ATTR_SETTING_TYPE): vol.All(cv.string, vol.Lower, cv.slugify), vol.Required(ATTR_SETTING_NAME): vol.All(cv.string, vol.Lower, cv.slugify), vol.Required(ATTR_NEW_VALUE): vol.Any(vol.Coerce(int), cv.string), } CONF_ADDITIONAL_CONFIGS = "additional_configs" CONF_APP_ID = "APP_ID" CONF_APPS = "apps" CONF_APPS_TO_INCLUDE_OR_EXCLUDE = "apps_to_include_or_exclude" CONF_CONFIG = "config" CONF_INCLUDE_OR_EXCLUDE = "include_or_exclude" CONF_NAME_SPACE = "NAME_SPACE" CONF_MESSAGE = "MESSAGE" CONF_VOLUME_STEP = "volume_step" DEFAULT_DEVICE_CLASS = MediaPlayerDeviceClass.TV DEFAULT_NAME = "Vizio SmartCast" DEFAULT_TIMEOUT = 8 DEFAULT_VOLUME_STEP = 1 DEVICE_ID = "pyvizio" DOMAIN = "vizio" ICON = { MediaPlayerDeviceClass.TV: "mdi:television", MediaPlayerDeviceClass.SPEAKER: "mdi:speaker", } COMMON_SUPPORTED_COMMANDS = ( MediaPlayerEntityFeature.SELECT_SOURCE | MediaPlayerEntityFeature.TURN_ON | MediaPlayerEntityFeature.TURN_OFF | MediaPlayerEntityFeature.VOLUME_MUTE | MediaPlayerEntityFeature.VOLUME_SET | MediaPlayerEntityFeature.VOLUME_STEP ) SUPPORTED_COMMANDS = { MediaPlayerDeviceClass.SPEAKER: COMMON_SUPPORTED_COMMANDS, MediaPlayerDeviceClass.TV: ( COMMON_SUPPORTED_COMMANDS | MediaPlayerEntityFeature.NEXT_TRACK | MediaPlayerEntityFeature.PREVIOUS_TRACK ), } VIZIO_SOUND_MODE = "eq" VIZIO_AUDIO_SETTINGS = "audio" VIZIO_MUTE_ON = "on" VIZIO_VOLUME = "volume" VIZIO_MUTE = "mute" # Since Vizio component relies on device class, this dict will ensure that changes to # the values of DEVICE_CLASS_SPEAKER or DEVICE_CLASS_TV don't require changes to pyvizio. VIZIO_DEVICE_CLASSES = { MediaPlayerDeviceClass.SPEAKER: VIZIO_DEVICE_CLASS_SPEAKER, MediaPlayerDeviceClass.TV: VIZIO_DEVICE_CLASS_TV, } VIZIO_SCHEMA = { vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_ACCESS_TOKEN): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_DEVICE_CLASS, default=DEFAULT_DEVICE_CLASS): vol.All( cv.string, vol.Lower, vol.In([MediaPlayerDeviceClass.TV, MediaPlayerDeviceClass.SPEAKER]), ), vol.Optional(CONF_VOLUME_STEP, default=DEFAULT_VOLUME_STEP): vol.All( vol.Coerce(int), vol.Range(min=1, max=10) ), vol.Optional(CONF_APPS): vol.All( { vol.Exclusive(CONF_INCLUDE, "apps_filter"): vol.All( cv.ensure_list, [cv.string] ), vol.Exclusive(CONF_EXCLUDE, "apps_filter"): vol.All( cv.ensure_list, [cv.string] ), vol.Optional(CONF_ADDITIONAL_CONFIGS): vol.All( cv.ensure_list, [ { vol.Required(CONF_NAME): cv.string, vol.Required(CONF_CONFIG): { vol.Required(CONF_APP_ID): cv.string, vol.Required(CONF_NAME_SPACE): vol.Coerce(int), vol.Optional(CONF_MESSAGE, default=None): vol.Or( cv.string, None ), }, }, ], ), }, cv.has_at_least_one_key(CONF_INCLUDE, CONF_EXCLUDE, CONF_ADDITIONAL_CONFIGS), ), }