From 94b0800989961a86110840bee075855a7bd4e55a Mon Sep 17 00:00:00 2001 From: Dan <149938837+PineappleEmperor@users.noreply.github.com> Date: Fri, 25 Apr 2025 18:29:29 +0100 Subject: [PATCH] Fix surepetcare sensor error (#143286) * fix: changed boolean to map to 'online' attribute. * fix: added catch in case of future changes to prevent complete sensor failure. * fix: surepetcare - added additional catches in case rssi values aren't included in online status. * fix: remove hub_rssi when not defined. * fix: proper code spacing * fix: use .get for clarity instead of try. * fix: now written in Python. * fix: renamed variables for clarity. * Update homeassistant/components/surepetcare/binary_sensor.py * fix: update surepetcare test __init__.py mock_feeder with online status. --------- Co-authored-by: Joost Lekkerkerker --- .../components/surepetcare/binary_sensor.py | 21 +++++++++++-------- tests/components/surepetcare/__init__.py | 7 ++++++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/surepetcare/binary_sensor.py b/homeassistant/components/surepetcare/binary_sensor.py index 416d56d1bdd..60183518c93 100644 --- a/homeassistant/components/surepetcare/binary_sensor.py +++ b/homeassistant/components/surepetcare/binary_sensor.py @@ -133,12 +133,15 @@ class DeviceConnectivity(SurePetcareBinarySensor): @callback def _update_attr(self, surepy_entity: SurepyEntity) -> None: - state = surepy_entity.raw_data()["status"] - self._attr_is_on = bool(state) - if state: - self._attr_extra_state_attributes = { - "device_rssi": f"{state['signal']['device_rssi']:.2f}", - "hub_rssi": f"{state['signal']['hub_rssi']:.2f}", - } - else: - self._attr_extra_state_attributes = {} + state = surepy_entity.raw_data().get("status", {}) + online = bool(state.get("online", False)) + self._attr_is_on = online + self._attr_extra_state_attributes = {} + if online: + device_rssi = state.get("signal", {}).get("device_rssi") + self._attr_extra_state_attributes["device_rssi"] = ( + f"{device_rssi:.2f}" if device_rssi else "Unknown" + ) + hub_rssi = state.get("signal", {}).get("hub_rssi") + if hub_rssi is not None: + self._attr_extra_state_attributes["hub_rssi"] = f"{hub_rssi:.2f}" diff --git a/tests/components/surepetcare/__init__.py b/tests/components/surepetcare/__init__.py index 9bf84889368..c34e3ecc923 100644 --- a/tests/components/surepetcare/__init__.py +++ b/tests/components/surepetcare/__init__.py @@ -8,7 +8,11 @@ MOCK_HUB = { "product_id": 1, "household_id": HOUSEHOLD_ID, "name": "Hub", - "status": {"online": True, "led_mode": 0, "pairing_mode": 0}, + "status": { + "led_mode": 0, + "pairing_mode": 0, + "online": True, + }, } MOCK_FEEDER = { @@ -22,6 +26,7 @@ MOCK_FEEDER = { "locking": {"mode": 0}, "learn_mode": 0, "signal": {"device_rssi": 60, "hub_rssi": 65}, + "online": True, }, }