Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
ad864286fc | |||
13cff8caa0 | |||
5fc6245806 | |||
1dad0e14b8 | |||
b04c601ad6 | |||
3ec0f5a006 | |||
78bc85132f | |||
191928287f | |||
c0aab8b99d | |||
b37715d0ca | |||
411effd814 | |||
04f19c4609 | |||
a68dcac379 | |||
40cc0013a5 | |||
f2aa3dc8fd | |||
e887371bec | |||
18b0ecdd68 |
14
pyhon/appliances/ov.py
Normal file
14
pyhon/appliances/ov.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
class Appliance:
|
||||||
|
def data(self, data):
|
||||||
|
if data["attributes"]["lastConnEvent"]["category"] == "DISCONNECTED":
|
||||||
|
data["attributes"]["parameters"]["temp"] = "0"
|
||||||
|
data["attributes"]["parameters"]["onOffStatus"] = "0"
|
||||||
|
data["attributes"]["parameters"]["remoteCtrValid"] = "0"
|
||||||
|
data["attributes"]["parameters"]["remainingTimeMM"] = "0"
|
||||||
|
|
||||||
|
data["active"] = data["attributes"]["parameters"]["onOffStatus"] == "1"
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def settings(self, settings):
|
||||||
|
return settings
|
@ -1,3 +1,6 @@
|
|||||||
|
from pyhon.parameter.fixed import HonParameterFixed
|
||||||
|
|
||||||
|
|
||||||
class Appliance:
|
class Appliance:
|
||||||
def data(self, data):
|
def data(self, data):
|
||||||
if data["attributes"]["lastConnEvent"]["category"] == "DISCONNECTED":
|
if data["attributes"]["lastConnEvent"]["category"] == "DISCONNECTED":
|
||||||
@ -7,4 +10,7 @@ class Appliance:
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
def settings(self, settings):
|
def settings(self, settings):
|
||||||
|
dry_level = settings["startProgram.dryLevel"]
|
||||||
|
if isinstance(dry_level, HonParameterFixed) and dry_level.value == "11":
|
||||||
|
settings.pop("startProgram.dryLevel", None)
|
||||||
return settings
|
return settings
|
||||||
|
@ -62,11 +62,10 @@ class HonCommand:
|
|||||||
return self._ancillary_parameters
|
return self._ancillary_parameters
|
||||||
|
|
||||||
async def send(self) -> bool:
|
async def send(self) -> bool:
|
||||||
parameters = {
|
params = {k: v.value for k, v in self._parameters.items()}
|
||||||
name: parameter.value for name, parameter in self._parameters.items()
|
ancillary_params = {k: v.value for k, v in self._ancillary_parameters.items()}
|
||||||
}
|
|
||||||
return await self._api.send_command(
|
return await self._api.send_command(
|
||||||
self._appliance, self._name, parameters, self.ancillary_parameters
|
self._appliance, self._name, params, ancillary_params
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -74,13 +74,14 @@ class HonAPI:
|
|||||||
"applianceType": appliance.appliance_type,
|
"applianceType": appliance.appliance_type,
|
||||||
"code": appliance.info["code"],
|
"code": appliance.info["code"],
|
||||||
"applianceModelId": appliance.appliance_model_id,
|
"applianceModelId": appliance.appliance_model_id,
|
||||||
"firmwareId": appliance.info["eepromId"],
|
|
||||||
"macAddress": appliance.mac_address,
|
"macAddress": appliance.mac_address,
|
||||||
"fwVersion": appliance.info["fwVersion"],
|
"fwVersion": appliance.info["fwVersion"],
|
||||||
"os": const.OS,
|
"os": const.OS,
|
||||||
"appVersion": const.APP_VERSION,
|
"appVersion": const.APP_VERSION,
|
||||||
"series": appliance.info["series"],
|
"series": appliance.info["series"],
|
||||||
}
|
}
|
||||||
|
if firmware_id := appliance.info.get("eepromId"):
|
||||||
|
params["firmwareId"] = firmware_id
|
||||||
url: str = f"{const.API_URL}/commands/v1/retrieve"
|
url: str = f"{const.API_URL}/commands/v1/retrieve"
|
||||||
async with self._hon.get(url, params=params) as response:
|
async with self._hon.get(url, params=params) as response:
|
||||||
result: Dict = (await response.json()).get("payload", {})
|
result: Dict = (await response.json()).get("payload", {})
|
||||||
|
@ -228,7 +228,10 @@ class HonAuth:
|
|||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
await self._error_logger(response)
|
await self._error_logger(response)
|
||||||
return False
|
return False
|
||||||
self._cognito_token = json_data["cognitoUser"]["Token"]
|
self._cognito_token = json_data.get("cognitoUser", {}).get("Token", "")
|
||||||
|
if not self._cognito_token:
|
||||||
|
_LOGGER.error(json_data)
|
||||||
|
raise exceptions.HonAuthenticationError()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
async def authenticate(self) -> None:
|
async def authenticate(self) -> None:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from typing import Dict, Any
|
from typing import Dict, Any, List
|
||||||
|
|
||||||
from pyhon.parameter.base import HonParameter
|
from pyhon.parameter.base import HonParameter
|
||||||
|
|
||||||
@ -19,3 +19,7 @@ class HonParameterFixed(HonParameter):
|
|||||||
def value(self, value: str | float) -> None:
|
def value(self, value: str | float) -> None:
|
||||||
# Fixed values seems being not so fixed as thought
|
# Fixed values seems being not so fixed as thought
|
||||||
self._value = value
|
self._value = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def values(self) -> List[str]:
|
||||||
|
return list(str(self.value))
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from typing import List, TYPE_CHECKING
|
from typing import List, TYPE_CHECKING, Dict
|
||||||
|
|
||||||
from pyhon.parameter.enum import HonParameterEnum
|
from pyhon.parameter.enum import HonParameterEnum
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ class HonParameterProgram(HonParameterEnum):
|
|||||||
super().__init__(key, {})
|
super().__init__(key, {})
|
||||||
self._command = command
|
self._command = command
|
||||||
self._value: str = command.program
|
self._value: str = command.program
|
||||||
self._values: List[str] = list(command.programs)
|
self._programs: Dict[str, "HonCommand"] = command.programs
|
||||||
self._typology: str = "enum"
|
self._typology: str = "enum"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -25,9 +25,9 @@ class HonParameterProgram(HonParameterEnum):
|
|||||||
if value in self.values:
|
if value in self.values:
|
||||||
self._command.program = value
|
self._command.program = value
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Allowed values {self._values}")
|
raise ValueError(f"Allowed values {self.values}")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def values(self) -> List[str]:
|
def values(self) -> List[str]:
|
||||||
values = [v for v in self._values if all(f not in v for f in self._FILTER)]
|
values = [v for v in self._programs if all(f not in v for f in self._FILTER)]
|
||||||
return sorted(values)
|
return sorted(values)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from typing import Dict, Any
|
from typing import Dict, Any, List
|
||||||
|
|
||||||
from pyhon.parameter.base import HonParameter
|
from pyhon.parameter.base import HonParameter
|
||||||
|
|
||||||
@ -47,3 +47,7 @@ class HonParameterRange(HonParameter):
|
|||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Allowed: min {self._min} max {self._max} step {self._step}"
|
f"Allowed: min {self._min} max {self._max} step {self._step}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def values(self) -> List[str]:
|
||||||
|
return [str(i) for i in range(int(self.min), int(self.max) + 1, int(self.step))]
|
||||||
|
2
setup.py
2
setup.py
@ -7,7 +7,7 @@ with open("README.md", "r") as f:
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="pyhOn",
|
name="pyhOn",
|
||||||
version="0.8.0b5",
|
version="0.8.3",
|
||||||
author="Andre Basche",
|
author="Andre Basche",
|
||||||
description="Control hOn devices with python",
|
description="Control hOn devices with python",
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
|
Reference in New Issue
Block a user