Skip to content

Commit 9b41365

Browse files
committed
feat: add device_features to automatically determine what is supported.
1 parent ba422aa commit 9b41365

File tree

2 files changed

+480
-134
lines changed

2 files changed

+480
-134
lines changed

roborock/code_mappings.py

Lines changed: 139 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
import logging
4-
from enum import Enum, IntEnum
4+
from enum import Enum, IntEnum, StrEnum
55

66
_LOGGER = logging.getLogger(__name__)
77
completed_warnings = set()
@@ -50,6 +50,144 @@ def items(cls: type[RoborockEnum]):
5050
return cls.as_dict().items()
5151

5252

53+
class RoborockProductNickname(StrEnum):
54+
"""Enumeration of product nicknames."""
55+
56+
CORAL = "Coral"
57+
CORALPRO = "CoralPro"
58+
PEARL = "Pearl"
59+
PEARLC = "PearlC"
60+
PEARLE = "PearlE"
61+
PEARLELITE = "PearlELite"
62+
PEARLPLUS = "PearlPlus"
63+
PEARLPLUSS = "PearlPlusS"
64+
PEARLS = "PearlS"
65+
PEARLSLITE = "PearlSLite"
66+
RUBYPLUS = "RubyPlus"
67+
RUBYSC = "RubySC"
68+
RUBYSE = "RubySE"
69+
RUBYSLITE = "RubySLite"
70+
TANOS = "Tanos"
71+
TANOSE = "TanosE"
72+
TANOSS = "TanosS"
73+
TANOSSC = "TanosSC"
74+
TANOSSE = "TanosSE"
75+
TANOSSMAX = "TanosSMax"
76+
TANOSSLITE = "TanosSLite"
77+
TANOSSPLUS = "TanosSPlus"
78+
TANOSV = "TanosV"
79+
TOPAZS = "TopazS"
80+
TOPAZSC = "TopazSC"
81+
TOPAZSPLUS = "TopazSPlus"
82+
TOPAZSPOWER = "TopazSPower"
83+
TOPAZSV = "TopazSV"
84+
ULTRON = "Ultron"
85+
ULTRONE = "UltronE"
86+
ULTRONLITE = "UltronLite"
87+
ULTRONSC = "UltronSC"
88+
ULTRONSE = "UltronSE"
89+
ULTRONSPLUS = "UltronSPlus"
90+
ULTRONSV = "UltronSV"
91+
VERDELITE = "Verdelite"
92+
VIVIAN = "Vivian"
93+
VIVIANC = "VivianC"
94+
95+
96+
short_model_to_enum = {
97+
# Pearl Series
98+
"a103": RoborockProductNickname.PEARLC,
99+
"a104": RoborockProductNickname.PEARLC,
100+
"a116": RoborockProductNickname.PEARLPLUSS,
101+
"a117": RoborockProductNickname.PEARLPLUSS,
102+
"a136": RoborockProductNickname.PEARLPLUSS,
103+
"a122": RoborockProductNickname.PEARLSLITE,
104+
"a123": RoborockProductNickname.PEARLSLITE,
105+
"a167": RoborockProductNickname.PEARLE,
106+
"a168": RoborockProductNickname.PEARLE,
107+
"a169": RoborockProductNickname.PEARLELITE,
108+
"a170": RoborockProductNickname.PEARLELITE,
109+
"a74": RoborockProductNickname.PEARL,
110+
"a75": RoborockProductNickname.PEARL,
111+
"a100": RoborockProductNickname.PEARLS,
112+
"a101": RoborockProductNickname.PEARLS,
113+
"a86": RoborockProductNickname.PEARLPLUS,
114+
"a87": RoborockProductNickname.PEARLPLUS,
115+
# Vivian Series
116+
"a158": RoborockProductNickname.VIVIANC,
117+
"a159": RoborockProductNickname.VIVIANC,
118+
"a134": RoborockProductNickname.VIVIAN,
119+
"a135": RoborockProductNickname.VIVIAN,
120+
"a155": RoborockProductNickname.VIVIAN,
121+
"a156": RoborockProductNickname.VIVIAN,
122+
# Coral Series
123+
"a143": RoborockProductNickname.CORALPRO,
124+
"a144": RoborockProductNickname.CORALPRO,
125+
"a20": RoborockProductNickname.CORAL,
126+
"a21": RoborockProductNickname.CORAL,
127+
# Ultron Series
128+
"a73": RoborockProductNickname.ULTRONLITE,
129+
"a85": RoborockProductNickname.ULTRONLITE,
130+
"a94": RoborockProductNickname.ULTRONSC,
131+
"a95": RoborockProductNickname.ULTRONSC,
132+
"a124": RoborockProductNickname.ULTRONSE,
133+
"a125": RoborockProductNickname.ULTRONSE,
134+
"a139": RoborockProductNickname.ULTRONSE,
135+
"a140": RoborockProductNickname.ULTRONSE,
136+
"a68": RoborockProductNickname.ULTRONSPLUS,
137+
"a69": RoborockProductNickname.ULTRONSPLUS,
138+
"a70": RoborockProductNickname.ULTRONSPLUS,
139+
"a50": RoborockProductNickname.ULTRON,
140+
"a51": RoborockProductNickname.ULTRON,
141+
"a72": RoborockProductNickname.ULTRONE,
142+
"a84": RoborockProductNickname.ULTRONE,
143+
"a96": RoborockProductNickname.ULTRONSV,
144+
"a97": RoborockProductNickname.ULTRONSV,
145+
# Verdelite Series
146+
"a146": RoborockProductNickname.VERDELITE,
147+
"a147": RoborockProductNickname.VERDELITE,
148+
# Topaz Series
149+
"a29": RoborockProductNickname.TOPAZS,
150+
"a30": RoborockProductNickname.TOPAZS,
151+
"a76": RoborockProductNickname.TOPAZS,
152+
"a46": RoborockProductNickname.TOPAZSPLUS,
153+
"a47": RoborockProductNickname.TOPAZSPLUS,
154+
"a66": RoborockProductNickname.TOPAZSPLUS,
155+
"a64": RoborockProductNickname.TOPAZSC,
156+
"a65": RoborockProductNickname.TOPAZSC,
157+
"a26": RoborockProductNickname.TOPAZSV,
158+
"a27": RoborockProductNickname.TOPAZSV,
159+
"a62": RoborockProductNickname.TOPAZSPOWER,
160+
# Tanos Series
161+
"a23": RoborockProductNickname.TANOSSPLUS,
162+
"a24": RoborockProductNickname.TANOSSPLUS,
163+
"a37": RoborockProductNickname.TANOSSLITE,
164+
"a38": RoborockProductNickname.TANOSSLITE,
165+
"a39": RoborockProductNickname.TANOSSC,
166+
"a40": RoborockProductNickname.TANOSSC,
167+
"a33": RoborockProductNickname.TANOSSE,
168+
"a34": RoborockProductNickname.TANOSSE,
169+
"a52": RoborockProductNickname.TANOSSMAX,
170+
"t6": RoborockProductNickname.TANOS,
171+
"s6": RoborockProductNickname.TANOS,
172+
"t7": RoborockProductNickname.TANOSE,
173+
"a11": RoborockProductNickname.TANOSE,
174+
"t7p": RoborockProductNickname.TANOSV,
175+
"a09": RoborockProductNickname.TANOSV,
176+
"a10": RoborockProductNickname.TANOSV,
177+
"a14": RoborockProductNickname.TANOSS,
178+
"a15": RoborockProductNickname.TANOSS,
179+
# Ruby Series
180+
"t4": RoborockProductNickname.RUBYPLUS,
181+
"s4": RoborockProductNickname.RUBYPLUS,
182+
"p5": RoborockProductNickname.RUBYSC,
183+
"a08": RoborockProductNickname.RUBYSC,
184+
"a19": RoborockProductNickname.RUBYSE,
185+
"p6": RoborockProductNickname.RUBYSLITE,
186+
"s5e": RoborockProductNickname.RUBYSLITE,
187+
"a05": RoborockProductNickname.RUBYSLITE,
188+
}
189+
190+
53191
class RoborockStateCode(RoborockEnum):
54192
unknown = 0
55193
starting = 1

0 commit comments

Comments
 (0)