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 import helper
from pyhon.commands import HonCommand from pyhon.commands import HonCommand
from pyhon.parameter.base import HonParameter
from pyhon.parameter.fixed import HonParameterFixed from pyhon.parameter.fixed import HonParameterFixed
if TYPE_CHECKING: if TYPE_CHECKING:
@ -169,7 +170,8 @@ class HonAppliance:
def settings(self): def settings(self):
result = {} result = {}
for name, command in self._commands.items(): 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 result[f"{name}.{key}"] = setting
if self._extra: if self._extra:
return self._extra.settings(result) return self._extra.settings(result)
@ -187,10 +189,7 @@ class HonAppliance:
async def load_attributes(self): async def load_attributes(self):
self._attributes = await self._api.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"] self._attributes.setdefault("parameters", {})[name] = values["parNewVal"]
async def load_statistics(self): async def load_statistics(self):
@ -221,4 +220,4 @@ class HonAppliance:
{"commands": helper.create_command(self.commands)}, {"commands": helper.create_command(self.commands)},
whitespace="\u200B \u200B ", 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["attributes"]["parameters"]["machMode"] = "0"
data["active"] = bool(data.get("attributes", {}).get("activity")) data["active"] = bool(data.get("attributes", {}).get("activity"))
data["pause"] = data["attributes"]["parameters"]["machMode"] == "3" data["pause"] = data["attributes"]["parameters"]["machMode"] == "3"
program = int(data["attributes"]["parameters"]["prCode"]) if program := int(data["attributes"]["parameters"]["prCode"]):
data["programName"] = self.parent.settings["startProgram.program"].ids[program] ids = self.parent.settings["startProgram.program"].ids
data["programName"] = ids.get(program, "")
return data return data
def settings(self, settings): 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": if isinstance(dry_level, HonParameterFixed) and dry_level.value == "11":
settings.pop("startProgram.dryLevel", None) settings.pop("startProgram.dryLevel", None)
return settings return settings

View File

@ -24,7 +24,7 @@ class HonCommand:
self._api: HonAPI = api self._api: HonAPI = api
self._appliance: "HonAppliance" = appliance self._appliance: "HonAppliance" = appliance
self._name: str = name 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._program_name: str = program_name
self._description: str = attributes.get("description", "") self._description: str = attributes.get("description", "")
self._parameters: Dict[str, HonParameter] = self._create_parameters( 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): def key_print(data, key="", start=True):
result = "" result = ""
if isinstance(data, list): if isinstance(data, list):
@ -44,12 +47,21 @@ def pretty_print(data, key="", intend=0, is_list=False, whitespace=" "):
return result 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): def create_command(commands, concat=False):
result = {} result = {}
for name, command in commands.items(): for name, command in commands.items():
if not concat: if not concat:
result[name] = {} result[name] = {}
for parameter, data in command.settings.items(): for parameter in command.setting_keys:
data = get_parameter(command, parameter)
if data.typology == "enum": if data.typology == "enum":
value = data.values value = data.values
elif data.typology == "range": 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: async def _create_appliance(self, appliance_data: Dict[str, Any], zone=0) -> None:
appliance = HonAppliance(self._api, appliance_data, zone=zone) appliance = HonAppliance(self._api, appliance_data, zone=zone)
if appliance.mac_address is None: if appliance.mac_address == "":
return return
await asyncio.gather( await asyncio.gather(
*[ *[

View File

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

View File

@ -7,7 +7,7 @@ with open("README.md", "r") as f:
setup( setup(
name="pyhOn", name="pyhOn",
version="0.8.6", version="0.9.0",
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,