From 31c03faca849f3c98306f12a95b87e1dff221933 Mon Sep 17 00:00:00 2001 From: Andre Basche Date: Mon, 29 May 2023 18:58:50 +0200 Subject: [PATCH] Get program name --- pyhon/appliance.py | 6 +++++- pyhon/appliances/base.py | 13 +++++++++++++ pyhon/appliances/dw.py | 10 ++++------ pyhon/appliances/ov.py | 10 ++++------ pyhon/appliances/ref.py | 11 +++-------- pyhon/appliances/td.py | 10 +++------- pyhon/appliances/wd.py | 7 ++++--- pyhon/appliances/wm.py | 7 ++++--- pyhon/parameter/program.py | 4 +++- setup.py | 2 +- 10 files changed, 44 insertions(+), 36 deletions(-) create mode 100644 pyhon/appliances/base.py diff --git a/pyhon/appliance.py b/pyhon/appliance.py index 0efd603..e7cd8ff 100644 --- a/pyhon/appliance.py +++ b/pyhon/appliance.py @@ -226,13 +226,15 @@ class HonAppliance: command_name = command.get("commandName") program_name = command.get("programName", "").split(".")[-1].lower() base = copy(self._commands[command_name].categories[program_name]) - for param, data in command.items(): + for data in command.values(): if isinstance(data, str): continue for key, value in data.items(): if parameter := base.parameters.get(key): with suppress(ValueError): parameter.value = value + extra_param = HonParameterFixed("favourite", {"fixedValue": "1"}, "custom") + base.parameters.update(favourite=extra_param) base.parameters["program"].set_value(name) self._commands[command_name].categories[name] = base @@ -296,6 +298,8 @@ class HonAppliance: "statistics": self.statistics, "additional_data": self._additional_data, } + if self._extra and data.get("attributes"): + data = self._extra.data(data) if command_only: data.pop("attributes") data.pop("appliance") diff --git a/pyhon/appliances/base.py b/pyhon/appliances/base.py new file mode 100644 index 0000000..10cd726 --- /dev/null +++ b/pyhon/appliances/base.py @@ -0,0 +1,13 @@ +class ApplianceBase: + def __init__(self, appliance): + self.parent = appliance + + def data(self, data): + program_name = "No Program" + if program := int(data["attributes"]["parameters"].get("prCode", "0")): + if ids := self.parent.settings["startProgram.program"].ids: + program_name = ids.get(program, program_name) + data["programName"] = program_name + + def settings(self, settings): + return settings diff --git a/pyhon/appliances/dw.py b/pyhon/appliances/dw.py index 6992e11..635c73b 100644 --- a/pyhon/appliances/dw.py +++ b/pyhon/appliances/dw.py @@ -1,12 +1,10 @@ -class Appliance: - def __init__(self, appliance): - self.parent = appliance +from pyhon.appliances.base import ApplianceBase + +class Appliance(ApplianceBase): def data(self, data): + super().data(data) if data["attributes"]["lastConnEvent"]["category"] == "DISCONNECTED": data["attributes"]["parameters"]["machMode"] = "0" data["active"] = bool(data.get("attributes", {}).get("activity")) return data - - def settings(self, settings): - return settings diff --git a/pyhon/appliances/ov.py b/pyhon/appliances/ov.py index ec57ffd..f09e45f 100644 --- a/pyhon/appliances/ov.py +++ b/pyhon/appliances/ov.py @@ -1,8 +1,9 @@ -class Appliance: - def __init__(self, appliance): - self.parent = appliance +from pyhon.appliances.base import ApplianceBase + +class Appliance(ApplianceBase): def data(self, data): + super().data(data) if data["attributes"]["lastConnEvent"]["category"] == "DISCONNECTED": data["attributes"]["parameters"]["temp"] = "0" data["attributes"]["parameters"]["onOffStatus"] = "0" @@ -16,6 +17,3 @@ class Appliance: data["programName"] = ids.get(program, "") return data - - def settings(self, settings): - return settings diff --git a/pyhon/appliances/ref.py b/pyhon/appliances/ref.py index bbdd797..1c9f31a 100644 --- a/pyhon/appliances/ref.py +++ b/pyhon/appliances/ref.py @@ -1,11 +1,9 @@ -from pyhon.parameter.fixed import HonParameterFixed +from pyhon.appliances.base import ApplianceBase -class Appliance: - def __init__(self, appliance): - self.parent = appliance - +class Appliance(ApplianceBase): def data(self, data): + super().data(data) if data["attributes"]["parameters"]["holidayMode"] == "1": data["modeZ1"] = "holiday" elif data["attributes"]["parameters"]["intelligenceMode"] == "1": @@ -23,6 +21,3 @@ class Appliance: data["modeZ2"] = "no_mode" return data - - def settings(self, settings): - return settings diff --git a/pyhon/appliances/td.py b/pyhon/appliances/td.py index ef79759..09dc34e 100644 --- a/pyhon/appliances/td.py +++ b/pyhon/appliances/td.py @@ -1,18 +1,14 @@ +from pyhon.appliances.base import ApplianceBase from pyhon.parameter.fixed import HonParameterFixed -class Appliance: - def __init__(self, appliance): - self.parent = appliance - +class Appliance(ApplianceBase): def data(self, data): + super().data(data) if data["attributes"]["lastConnEvent"]["category"] == "DISCONNECTED": data["attributes"]["parameters"]["machMode"] = "0" data["active"] = bool(data.get("attributes", {}).get("activity")) data["pause"] = data["attributes"]["parameters"]["machMode"] == "3" - 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): diff --git a/pyhon/appliances/wd.py b/pyhon/appliances/wd.py index a60875a..3d864f1 100644 --- a/pyhon/appliances/wd.py +++ b/pyhon/appliances/wd.py @@ -1,8 +1,9 @@ -class Appliance: - def __init__(self, appliance): - self.parent = appliance +from pyhon.appliances.base import ApplianceBase + +class Appliance(ApplianceBase): def data(self, data): + super().data(data) if data["attributes"]["lastConnEvent"]["category"] == "DISCONNECTED": data["attributes"]["parameters"]["machMode"] = "0" data["active"] = bool(data.get("attributes", {}).get("activity")) diff --git a/pyhon/appliances/wm.py b/pyhon/appliances/wm.py index a60875a..3d864f1 100644 --- a/pyhon/appliances/wm.py +++ b/pyhon/appliances/wm.py @@ -1,8 +1,9 @@ -class Appliance: - def __init__(self, appliance): - self.parent = appliance +from pyhon.appliances.base import ApplianceBase + +class Appliance(ApplianceBase): def data(self, data): + super().data(data) if data["attributes"]["lastConnEvent"]["category"] == "DISCONNECTED": data["attributes"]["parameters"]["machMode"] = "0" data["active"] = bool(data.get("attributes", {}).get("activity")) diff --git a/pyhon/parameter/program.py b/pyhon/parameter/program.py index 46e7d36..5b68c2e 100644 --- a/pyhon/parameter/program.py +++ b/pyhon/parameter/program.py @@ -44,7 +44,9 @@ class HonParameterProgram(HonParameterEnum): values = { int(p.parameters["prCode"].value): n for i, (n, p) in enumerate(self._programs.items()) - if "iot_" not in n and p.parameters.get("prCode") + if "iot_" not in n + and p.parameters.get("prCode") + and not ((fav := p.parameters.get("favourite")) and fav.value == "1") } return dict(sorted(values.items())) diff --git a/setup.py b/setup.py index 9e3de1b..c7988df 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ with open("README.md", "r") as f: setup( name="pyhOn", - version="0.11.3", + version="0.12.0", author="Andre Basche", description="Control hOn devices with python", long_description=long_description,