From 8324360045d57ae81b2d682638280a7e17f2f9b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20D=C4=85browski?= Date: Tue, 10 Sep 2024 17:04:25 +0200 Subject: [PATCH] Add Roomba last mission sensor (#123048) * Roomba: add last mission sensor * Set sensor as unavailable if last mission timestamp is 0 Previously, if the `mssnStrtTm` was 0, the function would return a 1970-01-01 (Unix epoch start date). With this change, the function will return None if the timestamp is 0 and the sensor will become unavailable. * Update last_mission property to use dt_util.utc_from_timestamp --- homeassistant/components/roomba/icons.json | 3 +++ homeassistant/components/roomba/irobot_base.py | 9 +++++++++ homeassistant/components/roomba/sensor.py | 8 ++++++++ homeassistant/components/roomba/strings.json | 3 +++ 4 files changed, 23 insertions(+) diff --git a/homeassistant/components/roomba/icons.json b/homeassistant/components/roomba/icons.json index cdb36ef97e5..8466ecb51e3 100644 --- a/homeassistant/components/roomba/icons.json +++ b/homeassistant/components/roomba/icons.json @@ -32,6 +32,9 @@ }, "total_cleaned_area": { "default": "mdi:texture-box" + }, + "last_mission": { + "default": "mdi:calendar-clock" } } } diff --git a/homeassistant/components/roomba/irobot_base.py b/homeassistant/components/roomba/irobot_base.py index 4850dc0b7e9..07d05a28b89 100644 --- a/homeassistant/components/roomba/irobot_base.py +++ b/homeassistant/components/roomba/irobot_base.py @@ -118,6 +118,15 @@ class IRobotEntity(Entity): """Return the battery stats.""" return self.vacuum_state.get("bbchg3", {}) + @property + def last_mission(self): + """Return last mission start time.""" + if ( + ts := self.vacuum_state.get("cleanMissionStatus", {}).get("mssnStrtTm") + ) is None or ts == 0: + return None + return dt_util.utc_from_timestamp(ts) + @property def _robot_state(self): """Return the state of the vacuum cleaner.""" diff --git a/homeassistant/components/roomba/sensor.py b/homeassistant/components/roomba/sensor.py index 6e043d237f3..e0aaf5d8c6e 100644 --- a/homeassistant/components/roomba/sensor.py +++ b/homeassistant/components/roomba/sensor.py @@ -116,6 +116,14 @@ SENSORS: list[RoombaSensorEntityDescription] = [ suggested_display_precision=0, entity_registry_enabled_default=False, ), + RoombaSensorEntityDescription( + key="last_mission", + translation_key="last_mission", + device_class=SensorDeviceClass.TIMESTAMP, + entity_category=EntityCategory.DIAGNOSTIC, + value_fn=lambda self: self.last_mission, + entity_registry_enabled_default=False, + ), ] diff --git a/homeassistant/components/roomba/strings.json b/homeassistant/components/roomba/strings.json index 088918824d2..0db70a6a141 100644 --- a/homeassistant/components/roomba/strings.json +++ b/homeassistant/components/roomba/strings.json @@ -87,6 +87,9 @@ }, "total_cleaned_area": { "name": "Total cleaned area" + }, + "last_mission": { + "name": "Last mission start time" } } }