Add Cleaning area sensors to Roborock (#94200)

add clean area sensor
pull/94416/head
Luke 2023-06-10 20:31:34 -04:00 committed by GitHub
parent 3b08d5f0c3
commit eab024992e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 2 deletions

View File

@ -13,7 +13,7 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory, UnitOfTime
from homeassistant.const import AREA_SQUARE_METERS, EntityCategory, UnitOfTime
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
@ -99,6 +99,20 @@ SENSOR_DESCRIPTIONS = [
entity_category=EntityCategory.DIAGNOSTIC,
options=RoborockStateCode.keys(),
),
RoborockSensorDescription(
key="cleaning_area",
icon="mdi:texture-box",
translation_key="cleaning_area",
value_fn=lambda data: data.status.square_meter_clean_area,
native_unit_of_measurement=AREA_SQUARE_METERS,
),
RoborockSensorDescription(
key="total_cleaning_area",
icon="mdi:texture-box",
translation_key="total_cleaning_area",
value_fn=lambda data: data.clean_summary.square_meter_clean_area,
native_unit_of_measurement=AREA_SQUARE_METERS,
),
]
@ -119,6 +133,7 @@ async def async_setup_entry(
)
for device_id, coordinator in coordinators.items()
for description in SENSOR_DESCRIPTIONS
if description.value_fn(coordinator.roborock_device_info.props) is not None
)

View File

@ -28,6 +28,9 @@
},
"entity": {
"sensor": {
"cleaning_area": {
"name": "Cleaning area"
},
"cleaning_time": {
"name": "Cleaning time"
},
@ -73,6 +76,9 @@
},
"total_cleaning_time": {
"name": "Total cleaning time"
},
"total_cleaning_area": {
"name": "Total cleaning area"
}
},
"select": {

View File

@ -14,7 +14,7 @@ from tests.common import MockConfigEntry
async def test_sensors(hass: HomeAssistant, setup_entry: MockConfigEntry) -> None:
"""Test sensors and check test values are correctly set."""
assert len(hass.states.async_all("sensor")) == 7
assert len(hass.states.async_all("sensor")) == 9
assert hass.states.get("sensor.roborock_s7_maxv_main_brush_time_left").state == str(
MAIN_BRUSH_REPLACE_TIME - 74382
)
@ -32,3 +32,7 @@ async def test_sensors(hass: HomeAssistant, setup_entry: MockConfigEntry) -> Non
hass.states.get("sensor.roborock_s7_maxv_total_cleaning_time").state == "74382"
)
assert hass.states.get("sensor.roborock_s7_maxv_status").state == "charging"
assert (
hass.states.get("sensor.roborock_s7_maxv_total_cleaning_area").state == "1159.2"
)
assert hass.states.get("sensor.roborock_s7_maxv_cleaning_area").state == "21.0"