Fix some stuff for hoover appliances

This commit is contained in:
Andre Basche 2023-04-24 04:33:00 +02:00
parent 9ee5dbc956
commit 5db13a90e7
9 changed files with 31 additions and 19 deletions

0
pyhon/__main__.py Normal file → Executable file
View file

View file

@ -6,6 +6,7 @@ from typing import TYPE_CHECKING
from pyhon import helper
from pyhon.commands import HonCommand
from pyhon.parameter.base import HonParameter
from pyhon.parameter.fixed import HonParameterFixed
if TYPE_CHECKING:
@ -169,7 +170,8 @@ class HonAppliance:
def settings(self):
result = {}
for name, command in self._commands.items():
for key, setting in command.settings.items():
for key in command.setting_keys:
setting = command.settings.get(key, HonParameter(key, {}))
result[f"{name}.{key}"] = setting
if self._extra:
return self._extra.settings(result)
@ -187,10 +189,7 @@ class HonAppliance:
async def load_attributes(self):
self._attributes = await self._api.load_attributes(self)
_LOGGER.warning(self._attributes)
for name, values in (
self._attributes.pop("shadow", {}).get("parameters", {}).items()
):
for name, values in self._attributes.pop("shadow").get("parameters").items():
self._attributes.setdefault("parameters", {})[name] = values["parNewVal"]
async def load_statistics(self):
@ -221,4 +220,4 @@ class HonAppliance:
{"commands": helper.create_command(self.commands)},
whitespace="\u200B \u200B ",
)
return result.replace(self.mac_address, "12-34-56-78-90-ab")
return result.replace(self.mac_address, "xx-xx-xx-xx-xx-xx")

View file

@ -10,12 +10,13 @@ class Appliance:
data["attributes"]["parameters"]["machMode"] = "0"
data["active"] = bool(data.get("attributes", {}).get("activity"))
data["pause"] = data["attributes"]["parameters"]["machMode"] == "3"
program = int(data["attributes"]["parameters"]["prCode"])
data["programName"] = self.parent.settings["startProgram.program"].ids[program]
if program := int(data["attributes"]["parameters"]["prCode"]):
ids = self.parent.settings["startProgram.program"].ids
data["programName"] = ids.get(program, "")
return data
def settings(self, settings):
dry_level = settings["startProgram.dryLevel"]
dry_level = settings.get("startProgram.dryLevel")
if isinstance(dry_level, HonParameterFixed) and dry_level.value == "11":
settings.pop("startProgram.dryLevel", None)
return settings

View file

@ -24,7 +24,7 @@ class HonCommand:
self._api: HonAPI = api
self._appliance: "HonAppliance" = appliance
self._name: str = name
self._programs: Optional[Dict[str, "HonCommand"]] = programs or {}
self._programs: Optional[Dict[str, "HonCommand"]] = programs
self._program_name: str = program_name
self._description: str = attributes.get("description", "")
self._parameters: Dict[str, HonParameter] = self._create_parameters(

View file

@ -1,3 +1,6 @@
from pyhon.parameter.base import HonParameter
def key_print(data, key="", start=True):
result = ""
if isinstance(data, list):
@ -44,12 +47,21 @@ def pretty_print(data, key="", intend=0, is_list=False, whitespace=" "):
return result
def get_parameter(command, parameter):
if programs := command.programs:
for program in programs.values():
if data := program.settings.get(parameter):
return data
return command.settings.get(parameter)
def create_command(commands, concat=False):
result = {}
for name, command in commands.items():
if not concat:
result[name] = {}
for parameter, data in command.settings.items():
for parameter in command.setting_keys:
data = get_parameter(command, parameter)
if data.typology == "enum":
value = data.values
elif data.typology == "range":

View file

@ -47,7 +47,7 @@ class Hon:
async def _create_appliance(self, appliance_data: Dict[str, Any], zone=0) -> None:
appliance = HonAppliance(self._api, appliance_data, zone=zone)
if appliance.mac_address is None:
if appliance.mac_address == "":
return
await asyncio.gather(
*[

View file

@ -1,4 +1,4 @@
from typing import Dict, Any
from typing import Dict, Any, List
class HonParameter:
@ -17,6 +17,10 @@ class HonParameter:
def value(self) -> str | float:
return self._value if self._value is not None else "0"
@property
def values(self) -> List[str]:
return list(str(self.value))
@property
def category(self) -> str:
return self._category

View file

@ -1,4 +1,4 @@
from typing import Dict, Any, List
from typing import Dict, Any
from pyhon.parameter.base import HonParameter
@ -19,7 +19,3 @@ class HonParameterFixed(HonParameter):
def value(self, value: str | float) -> None:
# Fixed values seems being not so fixed as thought
self._value = value
@property
def values(self) -> List[str]:
return list(str(self.value))

View file

@ -7,7 +7,7 @@ with open("README.md", "r") as f:
setup(
name="pyhOn",
version="0.8.6",
version="0.9.0",
author="Andre Basche",
description="Control hOn devices with python",
long_description=long_description,