From 2841cbbed272114c97afa2d0b36f30dca6b564d8 Mon Sep 17 00:00:00 2001 From: Luke Date: Wed, 9 Aug 2023 16:04:01 -0400 Subject: [PATCH] Add Off-peak power control to Roborock (#97307) * add off-peak switch and time * Make off_peak disabled by default --- .../components/roborock/strings.json | 9 +++++ homeassistant/components/roborock/switch.py | 19 ++++++++++ homeassistant/components/roborock/time.py | 38 +++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/homeassistant/components/roborock/strings.json b/homeassistant/components/roborock/strings.json index cd629e208e3..5ca2292f804 100644 --- a/homeassistant/components/roborock/strings.json +++ b/homeassistant/components/roborock/strings.json @@ -150,6 +150,9 @@ "dnd_switch": { "name": "Do not disturb" }, + "off_peak_switch": { + "name": "Off-peak charging" + }, "status_indicator": { "name": "Status indicator light" } @@ -160,6 +163,12 @@ }, "dnd_end_time": { "name": "Do not disturb end" + }, + "off_peak_start_time": { + "name": "Off-peak start" + }, + "off_peak_end_time": { + "name": "Off-peak end" } }, "vacuum": { diff --git a/homeassistant/components/roborock/switch.py b/homeassistant/components/roborock/switch.py index 312753ced01..de820ede8fa 100644 --- a/homeassistant/components/roborock/switch.py +++ b/homeassistant/components/roborock/switch.py @@ -84,6 +84,25 @@ SWITCH_DESCRIPTIONS: list[RoborockSwitchDescription] = [ icon="mdi:bell-cancel", entity_category=EntityCategory.CONFIG, ), + RoborockSwitchDescription( + cache_key=CacheableAttribute.valley_electricity_timer, + update_value=lambda cache, value: cache.update_value( + [ + cache.value.get("start_hour"), + cache.value.get("start_minute"), + cache.value.get("end_hour"), + cache.value.get("end_minute"), + ] + ) + if value + else cache.close_value(), + attribute="enabled", + key="off_peak_switch", + translation_key="off_peak_switch", + icon="mdi:power-plug", + entity_category=EntityCategory.CONFIG, + entity_registry_enabled_default=False, + ), ] diff --git a/homeassistant/components/roborock/time.py b/homeassistant/components/roborock/time.py index 514d147d469..5dc98e09352 100644 --- a/homeassistant/components/roborock/time.py +++ b/homeassistant/components/roborock/time.py @@ -79,6 +79,44 @@ TIME_DESCRIPTIONS: list[RoborockTimeDescription] = [ ), entity_category=EntityCategory.CONFIG, ), + RoborockTimeDescription( + key="off_peak_start", + translation_key="off_peak_start", + icon="mdi:power-plug", + cache_key=CacheableAttribute.valley_electricity_timer, + update_value=lambda cache, desired_time: cache.update_value( + [ + desired_time.hour, + desired_time.minute, + cache.value.get("end_hour"), + cache.value.get("end_minute"), + ] + ), + get_value=lambda cache: datetime.time( + hour=cache.value.get("start_hour"), minute=cache.value.get("start_minute") + ), + entity_category=EntityCategory.CONFIG, + entity_registry_enabled_default=False, + ), + RoborockTimeDescription( + key="off_peak_end", + translation_key="off_peak_end", + icon="mdi:power-plug-off", + cache_key=CacheableAttribute.valley_electricity_timer, + update_value=lambda cache, desired_time: cache.update_value( + [ + cache.value.get("start_hour"), + cache.value.get("start_minute"), + desired_time.hour, + desired_time.minute, + ] + ), + get_value=lambda cache: datetime.time( + hour=cache.value.get("end_hour"), minute=cache.value.get("end_minute") + ), + entity_category=EntityCategory.CONFIG, + entity_registry_enabled_default=False, + ), ]