From fe065b2de86b34378de8d66b76b43421cbcbdd18 Mon Sep 17 00:00:00 2001 From: Ben <512997+benleb@users.noreply.github.com> Date: Sat, 9 Oct 2021 08:33:41 +0200 Subject: [PATCH] Add Sure Petcare Felaqua device (#56823) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add a SurePetcareSensor * add the felaqua sensor * add felaqua battery test * fix felaqua product_id * actually add a felaqua sensor 😅 * remove superclass --- .../components/surepetcare/sensor.py | 38 ++++++++++++++++++- tests/components/surepetcare/__init__.py | 15 +++++++- tests/components/surepetcare/test_sensor.py | 3 +- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/surepetcare/sensor.py b/homeassistant/components/surepetcare/sensor.py index 01d4e9f83aa..508ad030922 100644 --- a/homeassistant/components/surepetcare/sensor.py +++ b/homeassistant/components/surepetcare/sensor.py @@ -2,13 +2,20 @@ from __future__ import annotations import logging +from typing import cast from surepy.entities import SurepyEntity +from surepy.entities.devices import Felaqua as SurepyFelaqua from surepy.enums import EntityType from homeassistant.components.sensor import SensorEntity from homeassistant.config_entries import ConfigEntry -from homeassistant.const import ATTR_VOLTAGE, DEVICE_CLASS_BATTERY, PERCENTAGE +from homeassistant.const import ( + ATTR_VOLTAGE, + DEVICE_CLASS_BATTERY, + PERCENTAGE, + VOLUME_MILLILITERS, +) from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddEntitiesCallback @@ -24,7 +31,7 @@ async def async_setup_entry( ) -> None: """Set up Sure PetCare Flaps sensors.""" - entities: list[SureBattery] = [] + entities: list[SurePetcareEntity] = [] coordinator: SurePetcareDataCoordinator = hass.data[DOMAIN][entry.entry_id] @@ -38,6 +45,9 @@ async def async_setup_entry( ]: entities.append(SureBattery(surepy_entity.id, coordinator)) + if surepy_entity.type == EntityType.FELAQUA: + entities.append(Felaqua(surepy_entity.id, coordinator)) + async_add_entities(entities) @@ -78,3 +88,27 @@ class SureBattery(SurePetcareEntity, SensorEntity): } else: self._attr_extra_state_attributes = {} + + +class Felaqua(SurePetcareEntity, SensorEntity): + """Sure Petcare Felaqua.""" + + _attr_native_unit_of_measurement = VOLUME_MILLILITERS + + def __init__( + self, surepetcare_id: int, coordinator: SurePetcareDataCoordinator + ) -> None: + """Initialize a Sure Petcare Felaqua sensor.""" + super().__init__(surepetcare_id, coordinator) + + surepy_entity: SurepyFelaqua = coordinator.data[surepetcare_id] + + self._attr_name = self._device_name + self._attr_unique_id = self._device_id + self._attr_entity_picture = surepy_entity.icon + + @callback + def _update_attr(self, surepy_entity: SurepyEntity) -> None: + """Update the state.""" + surepy_entity = cast(SurepyFelaqua, surepy_entity) + self._attr_native_value = surepy_entity.water_remaining diff --git a/tests/components/surepetcare/__init__.py b/tests/components/surepetcare/__init__.py index 854ac923ead..23a5830062e 100644 --- a/tests/components/surepetcare/__init__.py +++ b/tests/components/surepetcare/__init__.py @@ -27,6 +27,19 @@ MOCK_FEEDER = { }, } +MOCK_FELAQUA = { + "id": 31337, + "product_id": 8, + "household_id": HOUSEHOLD_ID, + "name": "Felaqua", + "parent": {"product_id": 1, "id": HUB_ID}, + "status": { + "battery": 6.4, + "signal": {"device_rssi": 70, "hub_rssi": 65}, + "online": True, + }, +} + MOCK_CAT_FLAP = { "id": 13579, "product_id": 6, @@ -66,7 +79,7 @@ MOCK_PET = { } MOCK_API_DATA = { - "devices": [MOCK_HUB, MOCK_CAT_FLAP, MOCK_PET_FLAP, MOCK_FEEDER], + "devices": [MOCK_HUB, MOCK_CAT_FLAP, MOCK_PET_FLAP, MOCK_FEEDER, MOCK_FELAQUA], "pets": [MOCK_PET], } diff --git a/tests/components/surepetcare/test_sensor.py b/tests/components/surepetcare/test_sensor.py index 9edc28dc6dc..dd8ade9b1aa 100644 --- a/tests/components/surepetcare/test_sensor.py +++ b/tests/components/surepetcare/test_sensor.py @@ -3,12 +3,13 @@ from homeassistant.components.surepetcare.const import DOMAIN from homeassistant.helpers import entity_registry as er from homeassistant.setup import async_setup_component -from . import HOUSEHOLD_ID, MOCK_CONFIG +from . import HOUSEHOLD_ID, MOCK_CONFIG, MOCK_FELAQUA EXPECTED_ENTITY_IDS = { "sensor.pet_flap_battery_level": f"{HOUSEHOLD_ID}-13576-battery", "sensor.cat_flap_battery_level": f"{HOUSEHOLD_ID}-13579-battery", "sensor.feeder_battery_level": f"{HOUSEHOLD_ID}-12345-battery", + "sensor.felaqua_battery_level": f"{HOUSEHOLD_ID}-{MOCK_FELAQUA['id']}-battery", }