diff --git a/API.md b/API.md index 8a5aa4b3d..ae5400f95 100644 --- a/API.md +++ b/API.md @@ -222,10 +222,8 @@ Return QR-Code ```json { - "audio": { - "input": "0,0", - "output": "0,0" - } + "audio_input": "0,0", + "audio_output": "0,0" } ``` diff --git a/hassio/api/host.py b/hassio/api/host.py index 2a53e5221..074452897 100644 --- a/hassio/api/host.py +++ b/hassio/api/host.py @@ -7,7 +7,8 @@ import voluptuous as vol from .util import api_process_hostcontrol, api_process, api_validate from ..const import ( ATTR_VERSION, ATTR_LAST_VERSION, ATTR_TYPE, ATTR_HOSTNAME, ATTR_FEATURES, - ATTR_OS, ATTR_SERIAL, ATTR_INPUT, ATTR_DISK, ATTR_AUDIO, ATTR_OUTPUT) + ATTR_OS, ATTR_SERIAL, ATTR_INPUT, ATTR_DISK, ATTR_AUDIO, ATTR_AUDIO_INPUT, + ATTR_AUDIO_OUTPUT) from ..validate import ALSA_CHANNEL _LOGGER = logging.getLogger(__name__) @@ -17,10 +18,8 @@ SCHEMA_VERSION = vol.Schema({ }) SCHEMA_OPTIONS = vol.Schema({ - vol.Optional(ATTR_AUDIO): vol.Schema({ - vol.Optional(ATTR_OUTPUT): ALSA_CHANNEL, - vol.Optional(ATTR_INPUT): ALSA_CHANNEL, - }) + vol.Optional(ATTR_AUDIO_OUTPUT): ALSA_CHANNEL, + vol.Optional(ATTR_AUDIO_INPUT): ALSA_CHANNEL, }) @@ -51,11 +50,11 @@ class APIHost(object): """Process host options.""" body = await api_validate(SCHEMA_OPTIONS, request) - if ATTR_AUDIO in body: - if ATTR_OUTPUT in body[ATTR_AUDIO]: - self.config.audio_output = body[ATTR_AUDIO][ATTR_OUTPUT] - if ATTR_INPUT in body[ATTR_AUDIO]: - self.config.audio_input = body[ATTR_AUDIO][ATTR_INPUT] + if ATTR_AUDIO_OUTPUT in body: + self.config.audio_output = body[ATTR_AUDIO_OUTPUT] + + if ATTR_AUDIO_INPUT in body: + self.config.audio_input = body[ATTR_AUDIO_INPUT] return True diff --git a/hassio/config.py b/hassio/config.py index ae076520c..7f501ba68 100644 --- a/hassio/config.py +++ b/hassio/config.py @@ -7,8 +7,7 @@ from pathlib import Path, PurePath from .const import ( FILE_HASSIO_CONFIG, HASSIO_DATA, ATTR_SECURITY, ATTR_SESSIONS, ATTR_PASSWORD, ATTR_TOTP, ATTR_TIMEZONE, ATTR_API_ENDPOINT, - ATTR_INITIALIZE, ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO, ATTR_INPUT, - ATTR_OUTPUT) + ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO_INPUT, ATTR_AUDIO_OUTPUT) from .tools import JsonConfig from .validate import SCHEMA_HASSIO_CONFIG @@ -168,80 +167,74 @@ class CoreConfig(JsonConfig): @property def security_initialize(self): """Return is security was initialize.""" - return self._data[ATTR_SECURITY][ATTR_INITIALIZE] + return self._data[ATTR_SECURITY] @security_initialize.setter def security_initialize(self, value): """Set is security initialize.""" - self._data[ATTR_SECURITY][ATTR_INITIALIZE] = value + self._data[ATTR_SECURITY] = value self.save() @property def security_totp(self): """Return the TOTP key.""" - return self._data[ATTR_SECURITY].get(ATTR_TOTP) + return self._data.get(ATTR_TOTP) @security_totp.setter def security_totp(self, value): """Set the TOTP key.""" - self._data[ATTR_SECURITY][ATTR_TOTP] = value + self._data[ATTR_TOTP] = value self.save() @property def security_password(self): """Return the password key.""" - return self._data[ATTR_SECURITY].get(ATTR_PASSWORD) + return self._data.get(ATTR_PASSWORD) @security_password.setter def security_password(self, value): """Set the password key.""" - self._data[ATTR_SECURITY][ATTR_PASSWORD] = value + self._data[ATTR_PASSWORD] = value self.save() @property def security_sessions(self): """Return api sessions.""" - if ATTR_SESSIONS not in self._data[ATTR_SECURITY]: - return {} - return { session: datetime.strptime(until, DATETIME_FORMAT) for - session, until in self._data[ATTR_SECURITY][ATTR_SESSIONS].items() + session, until in self._data[ATTR_SESSIONS].items() } def add_security_session(self, session, valid): """Set the a new session.""" - self._data[ATTR_SECURITY][ATTR_SESSIONS].update( + self._data[ATTR_SESSIONS].update( {session: valid.strftime(DATETIME_FORMAT)} ) self.save() def drop_security_session(self, session): """Delete the a session.""" - if ATTR_SESSIONS not in self._data[ATTR_SECURITY]: - return - - self._data[ATTR_SECURITY][ATTR_SESSIONS].pop(session, None) + self._data[ATTR_SESSIONS].pop(session, None) self.save() @property def audio_output(self): """Return ALSA audio output card,dev.""" - return self._data[ATTR_AUDIO].get(ATTR_OUTPUT) + return self._data.get(ATTR_AUDIO_OUTPUT) @audio_output.setter def audio_output(self, value): """Set ALSA audio output card,dev.""" - self._data[ATTR_AUDIO][ATTR_OUTPUT] = value + self._data[ATTR_AUDIO_OUTPUT] = value self.save() @property def audio_input(self): """Return ALSA audio input card,dev.""" - return self._data[ATTR_AUDIO].get(ATTR_INPUT) + return self._data.get(ATTR_AUDIO_INPUT) @audio_input.setter def audio_input(self, value): """Set ALSA audio input card,dev.""" - self._data[ATTR_AUDIO][ATTR_INPUT] = value + self._data[ATTR_AUDIO_INPUT] = value self.save() diff --git a/hassio/const.py b/hassio/const.py index 65b8c95b7..65f7ea853 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -103,6 +103,8 @@ ATTR_TIMEOUT = 'timeout' ATTR_AUTO_UPDATE = 'auto_update' ATTR_CUSTOM = 'custom' ATTR_AUDIO = 'audio' +ATTR_AUDIO_INPUT = 'audio_input' +ATTR_AUDIO_OUTPUT = 'audio_output' ATTR_INPUT = 'input' ATTR_OUTPUT = 'output' ATTR_DISK = 'disk' diff --git a/hassio/validate.py b/hassio/validate.py index c2b6ae04e..6f50ecc98 100644 --- a/hassio/validate.py +++ b/hassio/validate.py @@ -5,9 +5,9 @@ import pytz from .const import ( ATTR_DEVICES, ATTR_IMAGE, ATTR_LAST_VERSION, ATTR_SESSIONS, ATTR_PASSWORD, - ATTR_TOTP, ATTR_INITIALIZE, ATTR_BETA_CHANNEL, ATTR_TIMEZONE, ATTR_INPUT, - ATTR_SECURITY, ATTR_API_ENDPOINT, ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO, - ATTR_OUTPUT, ATTR_HOMEASSISTANT, ATTR_HASSIO) + ATTR_TOTP, ATTR_SECURITY, ATTR_BETA_CHANNEL, ATTR_TIMEZONE, + ATTR_API_ENDPOINT, ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO_OUTPUT, + ATTR_AUDIO_INPUT, ATTR_HOMEASSISTANT, ATTR_HASSIO) NETWORK_PORT = vol.All(vol.Coerce(int), vol.Range(min=1, max=65535)) @@ -75,15 +75,11 @@ SCHEMA_HASSIO_CONFIG = vol.Schema({ vol.Optional(ATTR_API_ENDPOINT): vol.Coerce(str), vol.Optional(ATTR_TIMEZONE, default='UTC'): validate_timezone, vol.Optional(ATTR_ADDONS_CUSTOM_LIST, default=[]): [vol.Url()], - vol.Optional(ATTR_SECURITY, default={}): vol.Schema({ - vol.Optional(ATTR_INITIALIZE, default=False): vol.Boolean(), - vol.Optional(ATTR_TOTP): vol.Coerce(str), - vol.Optional(ATTR_PASSWORD): vol.Coerce(str), - vol.Optional(ATTR_SESSIONS, default={}): - vol.Schema({vol.Coerce(str): vol.Coerce(str)}), - }), - vol.Optional(ATTR_AUDIO, default={}): vol.Schema({ - vol.Optional(ATTR_OUTPUT): ALSA_CHANNEL, - vol.Optional(ATTR_INPUT): ALSA_CHANNEL, - }), + vol.Optional(ATTR_SECURITY, default=False): vol.Boolean(), + vol.Optional(ATTR_TOTP): vol.Coerce(str), + vol.Optional(ATTR_PASSWORD): vol.Coerce(str), + vol.Optional(ATTR_SESSIONS, default={}): + vol.Schema({vol.Coerce(str): vol.Coerce(str)}), + vol.Optional(ATTR_AUDIO_OUTPUT): ALSA_CHANNEL, + vol.Optional(ATTR_AUDIO_INPUT): ALSA_CHANNEL, }, extra=vol.REMOVE_EXTRA)