From bb0d082b25913bb154c2da0314994b4b9fe4538b Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Mon, 11 Dec 2023 19:17:06 +0100 Subject: [PATCH] Correctly report unavailable battery for value 255 of percentage (#104566) * Ignore unavailable battery level for zha * Adjust unavailable test --- homeassistant/components/zha/sensor.py | 2 +- tests/components/zha/test_sensor.py | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/zha/sensor.py b/homeassistant/components/zha/sensor.py index 4fe96109c46..4ec4c11ef53 100644 --- a/homeassistant/components/zha/sensor.py +++ b/homeassistant/components/zha/sensor.py @@ -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 diff --git a/tests/components/zha/test_sensor.py b/tests/components/zha/test_sensor.py index 7c11077c55d..59b8bb1293e 100644 --- a/tests/components/zha/test_sensor.py +++ b/tests/components/zha/test_sensor.py @@ -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):