Skip to content

Commit 0ca89d7

Browse files
committed
Bug fix: implement HCA error code handling
1 parent bb9185e commit 0ca89d7

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed

inelsmqtt/protocols/cu3.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2036,6 +2036,7 @@ class DT_166:
20362036
CONTROL_MODE: [29],
20372037
VIRT_CONTR: [30],
20382038
}
2039+
ERR_CODES = [0x7FFFFFFF, 0x7FFFFFFE, 0x7FFFFFFD, 0x7FFFFFFC, 0x7FFFFFFB, 0x7FFFFFFA, 0x7FFFFFF9]
20392040

20402041
@staticmethod
20412042
def create_command_payload(out1: int = 0, out2: int = 0) -> str:
@@ -2049,7 +2050,7 @@ def create_ha_value_object(cls, device_value: DeviceValue) -> Any:
20492050
temp_current: float = twos_comp_4B(
20502051
int(trim_inels_status_values(device_value.inels_status_value, cls.DATA, CURRENT_TEMP, ""), 16)
20512052
)
2052-
if temp_current == 0x7FFFFFFB:
2053+
if temp_current in cls.ERR_CODES:
20532054
temp_current = 0
20542055
else:
20552056
temp_current /= 100
@@ -2063,7 +2064,7 @@ def create_ha_value_object(cls, device_value: DeviceValue) -> Any:
20632064
temp_required_heat: float = twos_comp_4B(
20642065
int(trim_inels_status_values(device_value.inels_status_value, cls.DATA, REQUIRED_HEAT_TEMP, ""), 16)
20652066
)
2066-
if temp_required_heat == 0x7FFFFFFB:
2067+
if temp_required_heat in cls.ERR_CODES:
20672068
temp_required_heat = 0
20682069
if hasattr(device_value.last_value, "ha_value"):
20692070
last_known_required = device_value.last_value.ha_value.climate_controller.last_known_required
@@ -2078,7 +2079,7 @@ def create_ha_value_object(cls, device_value: DeviceValue) -> Any:
20782079
temp_required_cool: float = twos_comp_4B(
20792080
int(trim_inels_status_values(device_value.inels_status_value, cls.DATA, REQUIRED_COOL_TEMP, ""), 16)
20802081
)
2081-
if temp_required_cool == 0x7FFFFFFB:
2082+
if temp_required_cool in cls.ERR_CODES:
20822083
temp_required_cool = 0
20832084
if hasattr(device_value.last_value, "ha_value"):
20842085
last_known_required_cool = device_value.last_value.ha_value.climate_controller.last_known_required_cool

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
setup(
66
name="elkoep-mqtt",
7-
version="0.2.33.beta.25",
7+
version="0.2.33.beta.26",
88
url="https://github.com/epdevlab/elkoep-mqtt",
99
license="MIT",
1010
author="Elko EP s.r.o.",

tests/test_device_value.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2046,12 +2046,48 @@ def device_value_all_positive(self):
20462046
inels_value="64\n00\n00\n00\nC8\n00\n00\n00\n2C\n01\n00\n00\n90\n01\n00\n00\nF4\n01\n00\n00\n58\n02\n00\n00\nBC\n02\n00\n00\n00\n00\n00\n"
20472047
)
20482048

2049+
@pytest.fixture
2050+
def device_value_7FFFFFFF(self):
2051+
return self.create_device_value(
2052+
inels_value="FF\nFF\nFF\n7F\nC8\n00\n00\n00\nFF\nFF\nFF\n7F\n90\n01\n00\n00\nF4\n01\n00\n00\nFF\nFF\nFF\n7F\nBC\n02\n00\n00\n00\n00\n00\n"
2053+
)
2054+
2055+
@pytest.fixture
2056+
def device_value_7FFFFFFE(self):
2057+
return self.create_device_value(
2058+
inels_value="FE\nFF\nFF\n7F\nC8\n00\n00\n00\nFE\nFF\nFF\n7F\n90\n01\n00\n00\nF4\n01\n00\n00\nFE\nFF\nFF\n7F\nBC\n02\n00\n00\n00\n00\n00\n"
2059+
)
2060+
2061+
@pytest.fixture
2062+
def device_value_7FFFFFFD(self):
2063+
return self.create_device_value(
2064+
inels_value="FD\nFF\nFF\n7F\nC8\n00\n00\n00\nFD\nFF\nFF\n7F\n90\n01\n00\n00\nF4\n01\n00\n00\nFD\nFF\nFF\n7F\nBC\n02\n00\n00\n00\n00\n00\n"
2065+
)
2066+
2067+
@pytest.fixture
2068+
def device_value_7FFFFFFC(self):
2069+
return self.create_device_value(
2070+
inels_value="FC\nFF\nFF\n7F\nC8\n00\n00\n00\nFC\nFF\nFF\n7F\n90\n01\n00\n00\nF4\n01\n00\n00\nFC\nFF\nFF\n7F\nBC\n02\n00\n00\n00\n00\n00\n"
2071+
)
2072+
20492073
@pytest.fixture
20502074
def device_value_7FFFFFFB(self):
20512075
return self.create_device_value(
20522076
inels_value="FB\nFF\nFF\n7F\nC8\n00\n00\n00\nFB\nFF\nFF\n7F\n90\n01\n00\n00\nF4\n01\n00\n00\nFB\nFF\nFF\n7F\nBC\n02\n00\n00\n00\n00\n00\n"
20532077
)
20542078

2079+
@pytest.fixture
2080+
def device_value_7FFFFFFA(self):
2081+
return self.create_device_value(
2082+
inels_value="FA\nFF\nFF\n7F\nC8\n00\n00\n00\nFA\nFF\nFF\n7F\n90\n01\n00\n00\nF4\n01\n00\n00\nFA\nFF\nFF\n7F\nBC\n02\n00\n00\n00\n00\n00\n"
2083+
)
2084+
2085+
@pytest.fixture
2086+
def device_value_7FFFFFF9(self):
2087+
return self.create_device_value(
2088+
inels_value="F9\nFF\nFF\n7F\nC8\n00\n00\n00\nF9\nFF\nFF\n7F\n90\n01\n00\n00\nF4\n01\n00\n00\nF9\nFF\nFF\n7F\nBC\n02\n00\n00\n00\n00\n00\n"
2089+
)
2090+
20552091
def test_create_ha_value_object(self, device_value):
20562092
assert device_value.ha_value.climate_controller.current == 27.81
20572093
assert device_value.ha_value.climate_controller.required == 32.0
@@ -2132,11 +2168,41 @@ def test_all_positive_temp(self, device_value_all_positive):
21322168
assert device_value_all_positive.ha_value.climate_controller.required_cool == 6.0
21332169
assert device_value_all_positive.ha_value.climate_controller.correction_temp == 7.0
21342170

2171+
def test_7FFFFFFF(self, device_value_7FFFFFFF):
2172+
assert device_value_7FFFFFFF.ha_value.climate_controller.current == 0
2173+
assert device_value_7FFFFFFF.ha_value.climate_controller.required == 0
2174+
assert device_value_7FFFFFFF.ha_value.climate_controller.required_cool == 0
2175+
2176+
def test_7FFFFFFE(self, device_value_7FFFFFFE):
2177+
assert device_value_7FFFFFFE.ha_value.climate_controller.current == 0
2178+
assert device_value_7FFFFFFE.ha_value.climate_controller.required == 0
2179+
assert device_value_7FFFFFFE.ha_value.climate_controller.required_cool == 0
2180+
2181+
def test_7FFFFFFD(self, device_value_7FFFFFFD):
2182+
assert device_value_7FFFFFFD.ha_value.climate_controller.current == 0
2183+
assert device_value_7FFFFFFD.ha_value.climate_controller.required == 0
2184+
assert device_value_7FFFFFFD.ha_value.climate_controller.required_cool == 0
2185+
2186+
def test_7FFFFFFC(self, device_value_7FFFFFFC):
2187+
assert device_value_7FFFFFFC.ha_value.climate_controller.current == 0
2188+
assert device_value_7FFFFFFC.ha_value.climate_controller.required == 0
2189+
assert device_value_7FFFFFFC.ha_value.climate_controller.required_cool == 0
2190+
21352191
def test_7FFFFFFB(self, device_value_7FFFFFFB):
21362192
assert device_value_7FFFFFFB.ha_value.climate_controller.current == 0
21372193
assert device_value_7FFFFFFB.ha_value.climate_controller.required == 0
21382194
assert device_value_7FFFFFFB.ha_value.climate_controller.required_cool == 0
21392195

2196+
def test_7FFFFFFA(self, device_value_7FFFFFFA):
2197+
assert device_value_7FFFFFFA.ha_value.climate_controller.current == 0
2198+
assert device_value_7FFFFFFA.ha_value.climate_controller.required == 0
2199+
assert device_value_7FFFFFFA.ha_value.climate_controller.required_cool == 0
2200+
2201+
def test_7FFFFFF9(self, device_value_7FFFFFF9):
2202+
assert device_value_7FFFFFF9.ha_value.climate_controller.current == 0
2203+
assert device_value_7FFFFFF9.ha_value.climate_controller.required == 0
2204+
assert device_value_7FFFFFF9.ha_value.climate_controller.required_cool == 0
2205+
21402206

21412207
class Test_CU_DEVICE_TYPE_167(BaseDeviceTestClass):
21422208
DEVICE_TYPE_ID = "167"

0 commit comments

Comments
 (0)