mirror of
https://github.com/home-assistant/core.git
synced 2026-09-24 07:25:52 -05:00
Fix ZHA electrical measurement sensor initialization (#37915)
* Refactor cached ZHA channel reads. If doing a cached ZCL attribute read, do "only_from_cache" read for battery operated devices only. Mains operated devices will do a network read in case of a cache miss. * Use cached attributes for ZHA electrical measurement * Bump up ZHA zigpy dependency.
This commit is contained in:
committed by
Paulus Schoutsen
parent
06bc98a3a2
commit
c0302e6eca
@@ -265,3 +265,58 @@ async def test_temp_uom(
|
||||
assert state is not None
|
||||
assert round(float(state.state)) == expected
|
||||
assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == uom
|
||||
|
||||
|
||||
async def test_electrical_measurement_init(
|
||||
hass, zigpy_device_mock, zha_device_joined,
|
||||
):
|
||||
"""Test proper initialization of the electrical measurement cluster."""
|
||||
|
||||
cluster_id = homeautomation.ElectricalMeasurement.cluster_id
|
||||
zigpy_device = zigpy_device_mock(
|
||||
{
|
||||
1: {
|
||||
"in_clusters": [cluster_id, general.Basic.cluster_id],
|
||||
"out_cluster": [],
|
||||
"device_type": 0x0000,
|
||||
}
|
||||
}
|
||||
)
|
||||
cluster = zigpy_device.endpoints[1].in_clusters[cluster_id]
|
||||
zha_device = await zha_device_joined(zigpy_device)
|
||||
entity_id = await find_entity_id(DOMAIN, zha_device, hass)
|
||||
|
||||
# allow traffic to flow through the gateway and devices
|
||||
await async_enable_traffic(hass, [zha_device])
|
||||
|
||||
# test that the sensor now have a state of unknown
|
||||
assert hass.states.get(entity_id).state == STATE_UNKNOWN
|
||||
|
||||
await send_attributes_report(hass, cluster, {0: 1, 1291: 100, 10: 1000})
|
||||
assert int(hass.states.get(entity_id).state) == 100
|
||||
|
||||
channel = zha_device.channels.pools[0].all_channels["1:0x0b04"]
|
||||
assert channel.divisor == 1
|
||||
assert channel.multiplier == 1
|
||||
|
||||
# update power divisor
|
||||
await send_attributes_report(hass, cluster, {0: 1, 1291: 20, 0x0403: 5, 10: 1000})
|
||||
assert channel.divisor == 5
|
||||
assert channel.multiplier == 1
|
||||
assert hass.states.get(entity_id).state == "4.0"
|
||||
|
||||
await send_attributes_report(hass, cluster, {0: 1, 1291: 30, 0x0605: 10, 10: 1000})
|
||||
assert channel.divisor == 10
|
||||
assert channel.multiplier == 1
|
||||
assert hass.states.get(entity_id).state == "3.0"
|
||||
|
||||
# update power multiplier
|
||||
await send_attributes_report(hass, cluster, {0: 1, 1291: 20, 0x0402: 6, 10: 1000})
|
||||
assert channel.divisor == 10
|
||||
assert channel.multiplier == 6
|
||||
assert hass.states.get(entity_id).state == "12.0"
|
||||
|
||||
await send_attributes_report(hass, cluster, {0: 1, 1291: 30, 0x0604: 20, 10: 1000})
|
||||
assert channel.divisor == 10
|
||||
assert channel.multiplier == 20
|
||||
assert hass.states.get(entity_id).state == "60.0"
|
||||
|
||||
Reference in New Issue
Block a user