From 71cf7a1b8a4c3322955e13ab55fa63b02c7f622e Mon Sep 17 00:00:00 2001 From: Vadym Melnychuk Date: Tue, 11 Jul 2023 17:13:22 +0300 Subject: [PATCH] Added water heater appliance. Added ability to send only mandatory parameters --- pyhon/appliances/wh.py | 8 ++++++++ pyhon/commands.py | 13 +++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 pyhon/appliances/wh.py diff --git a/pyhon/appliances/wh.py b/pyhon/appliances/wh.py new file mode 100644 index 0000000..cc54f29 --- /dev/null +++ b/pyhon/appliances/wh.py @@ -0,0 +1,8 @@ +from typing import Any, Dict + +from pyhon.appliances.base import ApplianceBase + +class Appliance(ApplianceBase): + def attributes(self, data: Dict[str, Any]) -> Dict[str, Any]: + data = super().attributes(data) + data["active"] = data.get("onOffStatus") == 1 \ No newline at end of file diff --git a/pyhon/commands.py b/pyhon/commands.py index a00b123..897d4b4 100644 --- a/pyhon/commands.py +++ b/pyhon/commands.py @@ -75,6 +75,14 @@ class HonCommand: for name, parameter in self._parameters.items(): result.setdefault(parameter.group, {})[name] = parameter.intern_value return result + + @property + def mandatory_parameter_groups(self) -> Dict[str, Dict[str, Union[str, float]]]: + result: Dict[str, Dict[str, Union[str, float]]] = {} + for name, parameter in self._parameters.items(): + if parameter.mandatory: + result.setdefault(parameter.group, {})[name] = parameter.intern_value + return result @property def parameter_value(self) -> Dict[str, Union[str, float]]: @@ -111,8 +119,9 @@ class HonCommand: name = "program" if "PROGRAM" in self._category_name else "category" self._parameters[name] = HonParameterProgram(name, self, "custom") - async def send(self) -> bool: - params = self.parameter_groups.get("parameters", {}) + async def send(self, onlyMandatory: bool = False) -> bool: + grouped_params = self.mandatory_parameter_groups if onlyMandatory else self.parameter_groups + params = grouped_params.get("parameters", {}) ancillary_params = self.parameter_groups.get("ancillaryParameters", {}) ancillary_params.pop("programRules", None) self.appliance.sync_command_to_params(self.name)