From eab024992eb91c70a4449faf53647bf36ab52fbb Mon Sep 17 00:00:00 2001 From: Luke Date: Sat, 10 Jun 2023 20:31:34 -0400 Subject: [PATCH] Add Cleaning area sensors to Roborock (#94200) add clean area sensor --- homeassistant/components/roborock/sensor.py | 17 ++++++++++++++++- homeassistant/components/roborock/strings.json | 6 ++++++ tests/components/roborock/test_sensor.py | 6 +++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/roborock/sensor.py b/homeassistant/components/roborock/sensor.py index ec973addae3..8398995462f 100644 --- a/homeassistant/components/roborock/sensor.py +++ b/homeassistant/components/roborock/sensor.py @@ -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 ) diff --git a/homeassistant/components/roborock/strings.json b/homeassistant/components/roborock/strings.json index 00ebd3833a8..e36b8c89e34 100644 --- a/homeassistant/components/roborock/strings.json +++ b/homeassistant/components/roborock/strings.json @@ -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": { diff --git a/tests/components/roborock/test_sensor.py b/tests/components/roborock/test_sensor.py index 106508e6062..daa904d482a 100644 --- a/tests/components/roborock/test_sensor.py +++ b/tests/components/roborock/test_sensor.py @@ -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"