forked from Python-roborock/python-roborock
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconsumeable.py
More file actions
51 lines (38 loc) · 1.65 KB
/
consumeable.py
File metadata and controls
51 lines (38 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""Trait for managing consumable attributes.
A consumable attribute is one that is expected to be replaced or refilled
periodically, such as filters, brushes, etc.
"""
from enum import StrEnum
from typing import Self
from roborock.data import Consumable
from roborock.devices.traits.v1 import common
from roborock.roborock_typing import RoborockCommand
__all__ = [
"ConsumableTrait",
]
class ConsumableAttribute(StrEnum):
"""Enum for consumable attributes."""
SENSOR_DIRTY_TIME = "sensor_dirty_time"
FILTER_WORK_TIME = "filter_work_time"
SIDE_BRUSH_WORK_TIME = "side_brush_work_time"
MAIN_BRUSH_WORK_TIME = "main_brush_work_time"
STRAINER_WORK_TIME = "strainer_work_time"
CLEANING_BRUSH_WORK_TIME = "cleaning_brush_work_time"
@classmethod
def from_str(cls, value: str) -> Self:
"""Create a ConsumableAttribute from a string value."""
for member in cls:
if member.value == value:
return member
raise ValueError(f"Unknown ConsumableAttribute: {value}")
class ConsumableTrait(Consumable, common.V1TraitMixin):
"""Trait for managing consumable attributes on Roborock devices.
After the first refresh, you can tell what consumables are supported by
checking which attributes are not None.
"""
command = RoborockCommand.GET_CONSUMABLE
converter = common.DefaultConverter(Consumable)
async def reset_consumable(self, consumable: ConsumableAttribute) -> None:
"""Reset a specific consumable attribute on the device."""
await self.rpc_channel.send_command(RoborockCommand.RESET_CONSUMABLE, params=[consumable.value])
await self.refresh()