From 5db13a90e7e3f5498a2c0d55118abd34e450f42f Mon Sep 17 00:00:00 2001 From: Andre Basche Date: Mon, 24 Apr 2023 04:33:00 +0200 Subject: [PATCH] Fix some stuff for hoover appliances --- pyhon/__main__.py | 0 pyhon/appliance.py | 11 +++++------ pyhon/appliances/td.py | 7 ++++--- pyhon/commands.py | 2 +- pyhon/helper.py | 14 +++++++++++++- pyhon/hon.py | 2 +- pyhon/parameter/base.py | 6 +++++- pyhon/parameter/fixed.py | 6 +----- setup.py | 2 +- 9 files changed, 31 insertions(+), 19 deletions(-) mode change 100644 => 100755 pyhon/__main__.py diff --git a/pyhon/__main__.py b/pyhon/__main__.py old mode 100644 new mode 100755 diff --git a/pyhon/appliance.py b/pyhon/appliance.py index 81aa040..e733646 100644 --- a/pyhon/appliance.py +++ b/pyhon/appliance.py @@ -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") diff --git a/pyhon/appliances/td.py b/pyhon/appliances/td.py index 3ab1385..ef79759 100644 --- a/pyhon/appliances/td.py +++ b/pyhon/appliances/td.py @@ -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 diff --git a/pyhon/commands.py b/pyhon/commands.py index 53c7647..f0075f3 100644 --- a/pyhon/commands.py +++ b/pyhon/commands.py @@ -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( diff --git a/pyhon/helper.py b/pyhon/helper.py index c820dd1..bb1c00f 100644 --- a/pyhon/helper.py +++ b/pyhon/helper.py @@ -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": diff --git a/pyhon/hon.py b/pyhon/hon.py index bffa246..0dfde58 100644 --- a/pyhon/hon.py +++ b/pyhon/hon.py @@ -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( *[ diff --git a/pyhon/parameter/base.py b/pyhon/parameter/base.py index c2c818a..3672d29 100644 --- a/pyhon/parameter/base.py +++ b/pyhon/parameter/base.py @@ -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 diff --git a/pyhon/parameter/fixed.py b/pyhon/parameter/fixed.py index 6c045ef..52595ed 100644 --- a/pyhon/parameter/fixed.py +++ b/pyhon/parameter/fixed.py @@ -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)) diff --git a/setup.py b/setup.py index 628b6e0..7862ecd 100644 --- a/setup.py +++ b/setup.py @@ -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,