Correctly report unavailable battery for value 255 of percentage (#104566)

* Ignore unavailable battery level for zha

* Adjust unavailable test
This commit is contained in:
Joakim Plate 2023-12-11 19:17:06 +01:00 committed by GitHub
parent 837ce99e30
commit bb0d082b25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 6 deletions

View File

@ -231,7 +231,7 @@ class Battery(Sensor):
def formatter(value: int) -> int | None:
"""Return the state of the entity."""
# per zcl specs battery percent is reported at 200% ¯\_(ツ)_/¯
if not isinstance(value, numbers.Number) or value == -1:
if not isinstance(value, numbers.Number) or value == -1 or value == 255:
return None
value = round(value / 2)
return value

View File

@ -260,11 +260,12 @@ async def async_test_powerconfiguration2(hass, cluster, entity_id):
"""Test powerconfiguration/battery sensor."""
await send_attributes_report(hass, cluster, {33: -1})
assert_state(hass, entity_id, STATE_UNKNOWN, "%")
assert hass.states.get(entity_id).attributes["battery_voltage"] == 2.9
assert hass.states.get(entity_id).attributes["battery_quantity"] == 3
assert hass.states.get(entity_id).attributes["battery_size"] == "AAA"
await send_attributes_report(hass, cluster, {32: 20})
assert hass.states.get(entity_id).attributes["battery_voltage"] == 2.0
await send_attributes_report(hass, cluster, {33: 255})
assert_state(hass, entity_id, STATE_UNKNOWN, "%")
await send_attributes_report(hass, cluster, {33: 98})
assert_state(hass, entity_id, "49", "%")
async def async_test_device_temperature(hass, cluster, entity_id):