Skip to content

Commit

Permalink
Fix Sinope clusters blocking some attribute updates (zigpy#2930)
Browse files Browse the repository at this point in the history
  • Loading branch information
TheJulianJES authored Jan 24, 2024
1 parent 547971c commit 04ac526
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
19 changes: 19 additions & 0 deletions tests/test_sinope.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,20 @@ async def test_sinope_device_temp(zigpy_device_from_quirk, quirk):
dev_temp_cluster = device.endpoints[1].device_temperature
dev_temp_listener = ClusterListener(dev_temp_cluster)
dev_temp_attr_id = DeviceTemperature.AttributeDefs.current_temperature.id
dev_temp_other_attr_id = DeviceTemperature.AttributeDefs.min_temp_experienced.id

# verify current temperature is multiplied by 100
dev_temp_cluster.update_attribute(dev_temp_attr_id, 25)
assert len(dev_temp_listener.attribute_updates) == 1
assert dev_temp_listener.attribute_updates[0][0] == dev_temp_attr_id
assert dev_temp_listener.attribute_updates[0][1] == 2500 # multiplied by 100

# verify other attributes are not modified
dev_temp_cluster.update_attribute(dev_temp_other_attr_id, 25)
assert len(dev_temp_listener.attribute_updates) == 2
assert dev_temp_listener.attribute_updates[1][0] == dev_temp_other_attr_id
assert dev_temp_listener.attribute_updates[1][1] == 25 # not modified


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

# verify measured value is divided by 10
flow_measurement_cluster.update_attribute(flow_measurement_attr_id, 2500)
assert len(flow_measurement_listener.attribute_updates) == 1
assert flow_measurement_listener.attribute_updates[0][0] == flow_measurement_attr_id
assert flow_measurement_listener.attribute_updates[0][1] == 250.0 # divided by 10

# verify other attributes are not modified
flow_measurement_cluster.update_attribute(flow_measurement_other_attr_id, 25)
assert len(flow_measurement_listener.attribute_updates) == 2
assert (
flow_measurement_listener.attribute_updates[1][0]
== flow_measurement_other_attr_id
)
assert flow_measurement_listener.attribute_updates[1][1] == 25 # not modified
3 changes: 2 additions & 1 deletion zhaquirks/sinope/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,5 @@ class CustomDeviceTemperatureCluster(CustomCluster, DeviceTemperature):

def _update_attribute(self, attrid, value):
if attrid == self.AttributeDefs.current_temperature.id:
super()._update_attribute(attrid, value * 100)
value = value * 100
super()._update_attribute(attrid, value)
3 changes: 2 additions & 1 deletion zhaquirks/sinope/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,8 @@ class CustomFlowMeasurementCluster(CustomCluster, FlowMeasurement):

def _update_attribute(self, attrid, value):
if attrid == self.AttributeDefs.measured_value.id:
super()._update_attribute(attrid, value / 10)
value = value / 10
super()._update_attribute(attrid, value)


class SinopeTechnologiesSwitch(CustomDevice):
Expand Down

0 comments on commit 04ac526

Please sign in to comment.