Add pet weight sensor for Litter-Robot 4 (#77566)
This commit is contained in:
parent
5297dc1d5f
commit
3ba1fbe69d
1 changed files with 59 additions and 56 deletions
|
@ -1,13 +1,12 @@
|
||||||
"""Support for Litter-Robot sensors."""
|
"""Support for Litter-Robot sensors."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Callable, Iterable
|
from collections.abc import Callable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import itertools
|
|
||||||
from typing import Any, Generic, Union, cast
|
from typing import Any, Generic, Union, cast
|
||||||
|
|
||||||
from pylitterbot import FeederRobot, LitterRobot
|
from pylitterbot import FeederRobot, LitterRobot, LitterRobot4, Robot
|
||||||
|
|
||||||
from homeassistant.components.sensor import (
|
from homeassistant.components.sensor import (
|
||||||
SensorDeviceClass,
|
SensorDeviceClass,
|
||||||
|
@ -15,7 +14,7 @@ from homeassistant.components.sensor import (
|
||||||
SensorEntityDescription,
|
SensorEntityDescription,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import PERCENTAGE
|
from homeassistant.const import MASS_POUNDS, PERCENTAGE
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity import EntityCategory
|
from homeassistant.helpers.entity import EntityCategory
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
@ -77,45 +76,56 @@ class LitterRobotSensorEntity(LitterRobotEntity[_RobotT], SensorEntity):
|
||||||
return super().icon
|
return super().icon
|
||||||
|
|
||||||
|
|
||||||
LITTER_ROBOT_SENSORS = [
|
ROBOT_SENSOR_MAP: dict[type[Robot], list[RobotSensorEntityDescription]] = {
|
||||||
RobotSensorEntityDescription[LitterRobot](
|
LitterRobot: [
|
||||||
name="Waste Drawer",
|
RobotSensorEntityDescription[LitterRobot](
|
||||||
key="waste_drawer_level",
|
name="Waste Drawer",
|
||||||
native_unit_of_measurement=PERCENTAGE,
|
key="waste_drawer_level",
|
||||||
icon_fn=lambda state: icon_for_gauge_level(state, 10),
|
native_unit_of_measurement=PERCENTAGE,
|
||||||
),
|
icon_fn=lambda state: icon_for_gauge_level(state, 10),
|
||||||
RobotSensorEntityDescription[LitterRobot](
|
),
|
||||||
name="Sleep Mode Start Time",
|
RobotSensorEntityDescription[LitterRobot](
|
||||||
key="sleep_mode_start_time",
|
name="Sleep Mode Start Time",
|
||||||
device_class=SensorDeviceClass.TIMESTAMP,
|
key="sleep_mode_start_time",
|
||||||
should_report=lambda robot: robot.sleep_mode_enabled,
|
device_class=SensorDeviceClass.TIMESTAMP,
|
||||||
),
|
should_report=lambda robot: robot.sleep_mode_enabled,
|
||||||
RobotSensorEntityDescription[LitterRobot](
|
),
|
||||||
name="Sleep Mode End Time",
|
RobotSensorEntityDescription[LitterRobot](
|
||||||
key="sleep_mode_end_time",
|
name="Sleep Mode End Time",
|
||||||
device_class=SensorDeviceClass.TIMESTAMP,
|
key="sleep_mode_end_time",
|
||||||
should_report=lambda robot: robot.sleep_mode_enabled,
|
device_class=SensorDeviceClass.TIMESTAMP,
|
||||||
),
|
should_report=lambda robot: robot.sleep_mode_enabled,
|
||||||
RobotSensorEntityDescription[LitterRobot](
|
),
|
||||||
name="Last Seen",
|
RobotSensorEntityDescription[LitterRobot](
|
||||||
key="last_seen",
|
name="Last Seen",
|
||||||
device_class=SensorDeviceClass.TIMESTAMP,
|
key="last_seen",
|
||||||
entity_category=EntityCategory.DIAGNOSTIC,
|
device_class=SensorDeviceClass.TIMESTAMP,
|
||||||
),
|
entity_category=EntityCategory.DIAGNOSTIC,
|
||||||
RobotSensorEntityDescription[LitterRobot](
|
),
|
||||||
name="Status Code",
|
RobotSensorEntityDescription[LitterRobot](
|
||||||
key="status_code",
|
name="Status Code",
|
||||||
device_class="litterrobot__status_code",
|
key="status_code",
|
||||||
entity_category=EntityCategory.DIAGNOSTIC,
|
device_class="litterrobot__status_code",
|
||||||
),
|
entity_category=EntityCategory.DIAGNOSTIC,
|
||||||
]
|
),
|
||||||
|
],
|
||||||
FEEDER_ROBOT_SENSOR = RobotSensorEntityDescription[FeederRobot](
|
LitterRobot4: [
|
||||||
name="Food Level",
|
RobotSensorEntityDescription[LitterRobot4](
|
||||||
key="food_level",
|
key="pet_weight",
|
||||||
native_unit_of_measurement=PERCENTAGE,
|
name="Pet weight",
|
||||||
icon_fn=lambda state: icon_for_gauge_level(state, 10),
|
icon="mdi:scale",
|
||||||
)
|
native_unit_of_measurement=MASS_POUNDS,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
FeederRobot: [
|
||||||
|
RobotSensorEntityDescription[FeederRobot](
|
||||||
|
name="Food level",
|
||||||
|
key="food_level",
|
||||||
|
native_unit_of_measurement=PERCENTAGE,
|
||||||
|
icon_fn=lambda state: icon_for_gauge_level(state, 10),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
|
@ -125,17 +135,10 @@ async def async_setup_entry(
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Litter-Robot sensors using config entry."""
|
"""Set up Litter-Robot sensors using config entry."""
|
||||||
hub: LitterRobotHub = hass.data[DOMAIN][entry.entry_id]
|
hub: LitterRobotHub = hass.data[DOMAIN][entry.entry_id]
|
||||||
entities: Iterable[LitterRobotSensorEntity] = itertools.chain(
|
async_add_entities(
|
||||||
(
|
LitterRobotSensorEntity(robot=robot, hub=hub, description=description)
|
||||||
LitterRobotSensorEntity(robot=robot, hub=hub, description=description)
|
for robot in hub.account.robots
|
||||||
for description in LITTER_ROBOT_SENSORS
|
for robot_type, entity_descriptions in ROBOT_SENSOR_MAP.items()
|
||||||
for robot in hub.litter_robots()
|
if isinstance(robot, robot_type)
|
||||||
),
|
for description in entity_descriptions
|
||||||
(
|
|
||||||
LitterRobotSensorEntity(
|
|
||||||
robot=robot, hub=hub, description=FEEDER_ROBOT_SENSOR
|
|
||||||
)
|
|
||||||
for robot in hub.feeder_robots()
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
async_add_entities(entities)
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue