Skip to content

Commit 04ac526

Browse files
authored
Fix Sinope clusters blocking some attribute updates (#2930)
1 parent 547971c commit 04ac526

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

tests/test_sinope.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,20 @@ async def test_sinope_device_temp(zigpy_device_from_quirk, quirk):
1919
dev_temp_cluster = device.endpoints[1].device_temperature
2020
dev_temp_listener = ClusterListener(dev_temp_cluster)
2121
dev_temp_attr_id = DeviceTemperature.AttributeDefs.current_temperature.id
22+
dev_temp_other_attr_id = DeviceTemperature.AttributeDefs.min_temp_experienced.id
2223

24+
# verify current temperature is multiplied by 100
2325
dev_temp_cluster.update_attribute(dev_temp_attr_id, 25)
2426
assert len(dev_temp_listener.attribute_updates) == 1
2527
assert dev_temp_listener.attribute_updates[0][0] == dev_temp_attr_id
2628
assert dev_temp_listener.attribute_updates[0][1] == 2500 # multiplied by 100
2729

30+
# verify other attributes are not modified
31+
dev_temp_cluster.update_attribute(dev_temp_other_attr_id, 25)
32+
assert len(dev_temp_listener.attribute_updates) == 2
33+
assert dev_temp_listener.attribute_updates[1][0] == dev_temp_other_attr_id
34+
assert dev_temp_listener.attribute_updates[1][1] == 25 # not modified
35+
2836

2937
@pytest.mark.parametrize("quirk", (zhaquirks.sinope.switch.SinopeTechnologiesValveG2,))
3038
async def test_sinope_flow_measurement(zigpy_device_from_quirk, quirk):
@@ -34,8 +42,19 @@ async def test_sinope_flow_measurement(zigpy_device_from_quirk, quirk):
3442
flow_measurement_cluster = device.endpoints[1].flow
3543
flow_measurement_listener = ClusterListener(flow_measurement_cluster)
3644
flow_measurement_attr_id = FlowMeasurement.AttributeDefs.measured_value.id
45+
flow_measurement_other_attr_id = FlowMeasurement.AttributeDefs.min_measured_value.id
3746

47+
# verify measured value is divided by 10
3848
flow_measurement_cluster.update_attribute(flow_measurement_attr_id, 2500)
3949
assert len(flow_measurement_listener.attribute_updates) == 1
4050
assert flow_measurement_listener.attribute_updates[0][0] == flow_measurement_attr_id
4151
assert flow_measurement_listener.attribute_updates[0][1] == 250.0 # divided by 10
52+
53+
# verify other attributes are not modified
54+
flow_measurement_cluster.update_attribute(flow_measurement_other_attr_id, 25)
55+
assert len(flow_measurement_listener.attribute_updates) == 2
56+
assert (
57+
flow_measurement_listener.attribute_updates[1][0]
58+
== flow_measurement_other_attr_id
59+
)
60+
assert flow_measurement_listener.attribute_updates[1][1] == 25 # not modified

zhaquirks/sinope/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,5 @@ class CustomDeviceTemperatureCluster(CustomCluster, DeviceTemperature):
6969

7070
def _update_attribute(self, attrid, value):
7171
if attrid == self.AttributeDefs.current_temperature.id:
72-
super()._update_attribute(attrid, value * 100)
72+
value = value * 100
73+
super()._update_attribute(attrid, value)

zhaquirks/sinope/switch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,8 @@ class CustomFlowMeasurementCluster(CustomCluster, FlowMeasurement):
216216

217217
def _update_attribute(self, attrid, value):
218218
if attrid == self.AttributeDefs.measured_value.id:
219-
super()._update_attribute(attrid, value / 10)
219+
value = value / 10
220+
super()._update_attribute(attrid, value)
220221

221222

222223
class SinopeTechnologiesSwitch(CustomDevice):

0 commit comments

Comments
 (0)