92 lines
2.5 KiB
Python
92 lines
2.5 KiB
Python
"""Alexa related errors."""
|
|
from homeassistant.exceptions import HomeAssistantError
|
|
|
|
from .const import API_TEMP_UNITS
|
|
|
|
|
|
class UnsupportedInterface(HomeAssistantError):
|
|
"""This entity does not support the requested Smart Home API interface."""
|
|
|
|
|
|
class UnsupportedProperty(HomeAssistantError):
|
|
"""This entity does not support the requested Smart Home API property."""
|
|
|
|
|
|
class NoTokenAvailable(HomeAssistantError):
|
|
"""There is no access token available."""
|
|
|
|
|
|
class AlexaError(Exception):
|
|
"""Base class for errors that can be serialized for the Alexa API.
|
|
|
|
A handler can raise subclasses of this to return an error to the request.
|
|
"""
|
|
|
|
namespace = None
|
|
error_type = None
|
|
|
|
def __init__(self, error_message, payload=None):
|
|
"""Initialize an alexa error."""
|
|
Exception.__init__(self)
|
|
self.error_message = error_message
|
|
self.payload = None
|
|
|
|
|
|
class AlexaInvalidEndpointError(AlexaError):
|
|
"""The endpoint in the request does not exist."""
|
|
|
|
namespace = 'Alexa'
|
|
error_type = 'NO_SUCH_ENDPOINT'
|
|
|
|
def __init__(self, endpoint_id):
|
|
"""Initialize invalid endpoint error."""
|
|
msg = 'The endpoint {} does not exist'.format(endpoint_id)
|
|
AlexaError.__init__(self, msg)
|
|
self.endpoint_id = endpoint_id
|
|
|
|
|
|
class AlexaInvalidValueError(AlexaError):
|
|
"""Class to represent InvalidValue errors."""
|
|
|
|
namespace = 'Alexa'
|
|
error_type = 'INVALID_VALUE'
|
|
|
|
|
|
class AlexaUnsupportedThermostatModeError(AlexaError):
|
|
"""Class to represent UnsupportedThermostatMode errors."""
|
|
|
|
namespace = 'Alexa.ThermostatController'
|
|
error_type = 'UNSUPPORTED_THERMOSTAT_MODE'
|
|
|
|
|
|
class AlexaTempRangeError(AlexaError):
|
|
"""Class to represent TempRange errors."""
|
|
|
|
namespace = 'Alexa'
|
|
error_type = 'TEMPERATURE_VALUE_OUT_OF_RANGE'
|
|
|
|
def __init__(self, hass, temp, min_temp, max_temp):
|
|
"""Initialize TempRange error."""
|
|
unit = hass.config.units.temperature_unit
|
|
temp_range = {
|
|
'minimumValue': {
|
|
'value': min_temp,
|
|
'scale': API_TEMP_UNITS[unit],
|
|
},
|
|
'maximumValue': {
|
|
'value': max_temp,
|
|
'scale': API_TEMP_UNITS[unit],
|
|
},
|
|
}
|
|
payload = {'validRange': temp_range}
|
|
msg = 'The requested temperature {} is out of range'.format(temp)
|
|
|
|
AlexaError.__init__(self, msg, payload)
|
|
|
|
|
|
class AlexaBridgeUnreachableError(AlexaError):
|
|
"""Class to represent BridgeUnreachable errors."""
|
|
|
|
namespace = 'Alexa'
|
|
error_type = 'BRIDGE_UNREACHABLE'
|