1
0
mirror of https://github.com/no2chem/wideq.git synced 2025-05-17 07:40:09 -07:00

Merge branch 'feature/refrigerator' of https://github.com/NorDroN/wideq into feature/refrigerator

# Conflicts:
#	wideq/ac.py
This commit is contained in:
Andrey Klimov 2019-12-27 13:20:17 +03:00
commit cfd27c0100
2 changed files with 26 additions and 12 deletions

View File

@ -4,6 +4,7 @@ import enum
from .client import Device from .client import Device
from .util import lookup_enum from .util import lookup_enum
from .core import FailedRequestError
class ACVSwingMode(enum.Enum): class ACVSwingMode(enum.Enum):
@ -257,8 +258,11 @@ class ACDevice(Device):
def get_volume(self): def get_volume(self):
"""Get the speaker volume level.""" """Get the speaker volume level."""
try:
value = self._get_control('SpkVolume') value = self._get_control('SpkVolume')
return int(value) return int(value)
except FailedRequestError:
return 0 # Device does not support volume control.
def poll(self): def poll(self):
"""Poll the device's current state. """Poll the device's current state.

View File

@ -67,16 +67,10 @@ class APIError(Exception):
class NotLoggedInError(APIError): class NotLoggedInError(APIError):
"""The session is not valid or expired.""" """The session is not valid or expired."""
def __init__(self):
pass
class NotConnectedError(APIError): class NotConnectedError(APIError):
"""The service can't contact the specified device.""" """The service can't contact the specified device."""
def __init__(self):
pass
class TokenError(APIError): class TokenError(APIError):
"""An authentication token was rejected.""" """An authentication token was rejected."""
@ -85,6 +79,16 @@ class TokenError(APIError):
pass pass
class FailedRequestError(APIError):
"""A failed request typically indicates an unsupported control on a
device.
"""
class InvalidRequestError(APIError):
"""The server rejected a request as invalid."""
class MonitorError(APIError): class MonitorError(APIError):
"""Monitoring a device failed, possibly because the monitoring """Monitoring a device failed, possibly because the monitoring
session failed and needs to be restarted. session failed and needs to be restarted.
@ -95,6 +99,14 @@ class MonitorError(APIError):
self.code = code self.code = code
API_ERRORS = {
"0102": NotLoggedInError,
"0106": NotConnectedError,
"0100": FailedRequestError,
9000: InvalidRequestError, # Surprisingly, an integer (not a string).
}
def lgedm_post(url, data=None, access_token=None, session_id=None): def lgedm_post(url, data=None, access_token=None, session_id=None):
"""Make an HTTP request in the format used by the API servers. """Make an HTTP request in the format used by the API servers.
@ -125,10 +137,8 @@ def lgedm_post(url, data=None, access_token=None, session_id=None):
code = out['returnCd'] code = out['returnCd']
if code != '0000': if code != '0000':
message = out['returnMsg'] message = out['returnMsg']
if code == "0102": if code in API_ERRORS:
raise NotLoggedInError() raise API_ERRORS[code](code, message)
elif code == "0106":
raise NotConnectedError()
else: else:
raise APIError(code, message) raise APIError(code, message)