From b32143686154ed43404c5b791322105d5b2ac107 Mon Sep 17 00:00:00 2001 From: Krisjanis Lejejs Date: Thu, 19 Jan 2023 23:32:04 +0200 Subject: [PATCH] Fix operational status for Thermia Diplomat heat pumps --- ThermiaOnlineAPI/const.py | 1 + ThermiaOnlineAPI/model/HeatPump.py | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ThermiaOnlineAPI/const.py b/ThermiaOnlineAPI/const.py index 5fc3c30..21e9123 100644 --- a/ThermiaOnlineAPI/const.py +++ b/ThermiaOnlineAPI/const.py @@ -78,6 +78,7 @@ REG_OPERATIONAL_STATUS_PRIO1 = ( "REG_OPERATIONAL_STATUS_PRIO1" # Operational status for most heat pumps ) +COMP_STATUS = "COMP_STATUS" # Operational status for Diplomat heat pumps COMP_STATUS_ITEC = "COMP_STATUS_ITEC" # Operational status for ITEC heat pumps REG_OPERATIONAL_STATUS_PRIORITY_BITMASK = ( "REG_OPERATIONAL_STATUS_PRIORITY_BITMASK" # Operational status for Atlas heat pumps diff --git a/ThermiaOnlineAPI/model/HeatPump.py b/ThermiaOnlineAPI/model/HeatPump.py index a72593c..645cf13 100644 --- a/ThermiaOnlineAPI/model/HeatPump.py +++ b/ThermiaOnlineAPI/model/HeatPump.py @@ -27,6 +27,7 @@ REG_OPER_TIME_IMM3, REG_PID, REG_RETURN_LINE, + COMP_STATUS, COMP_STATUS_ITEC, REG_SUPPLY_LINE, DATETIME_FORMAT, @@ -59,6 +60,7 @@ def __init__(self, device_data: dict, api_interface: "ThermiaAPI"): self.__device_config: Dict[str, Optional[str]] = { "operational_status_register": None, "operational_status_valueNamePrefix": None, + "operational_status_minRegisterValue": None, } # GROUPS @@ -382,9 +384,17 @@ def __get_operational_statuses_from_operational_status(self) -> Optional[Dict]: self.__device_config[ "operational_status_register" ] = REG_OPERATIONAL_STATUS_PRIORITY_BITMASK + self.__device_config["operational_status_valueNamePrefix"] = "REG_VALUE_" + return data.get("valueNames", []) + + # Try to get the data from the COMP_STATUS register + data = self.__get_register_from_operational_status(COMP_STATUS) + if data is not None: + self.__device_config["operational_status_register"] = COMP_STATUS + self.__device_config["operational_status_valueNamePrefix"] = "COMP_VALUE_" self.__device_config[ - "operational_status_valueNamePrefix" - ] = "REG_VALUE_" + "operational_status_minRegisterValue" + ] = "4" # 4 is OFF return data.get("valueNames", []) return None @@ -594,6 +604,11 @@ def operational_status(self) -> Optional[Union[str, List[str]]]: data_items_list.sort(key=lambda x: x[0], reverse=True) list_of_current_operation_modes = [] + if self.__device_config["operational_status_minRegisterValue"] is not None: + current_register_value -= int( + self.__device_config["operational_status_minRegisterValue"] + ) + for value, name in data_items_list: if value <= current_register_value: current_register_value -= value