|
1 | 1 | from __future__ import annotations
|
2 | 2 |
|
3 | 3 | import logging
|
4 |
| -from enum import Enum, IntEnum, StrEnum |
| 4 | +from collections import namedtuple |
| 5 | +from enum import Enum, IntEnum |
5 | 6 |
|
6 | 7 | _LOGGER = logging.getLogger(__name__)
|
7 | 8 | completed_warnings = set()
|
@@ -50,142 +51,66 @@ def items(cls: type[RoborockEnum]):
|
50 | 51 | return cls.as_dict().items()
|
51 | 52 |
|
52 | 53 |
|
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, |
| 54 | +ProductInfo = namedtuple("ProductInfo", ["nickname", "short_models"]) |
| 55 | + |
| 56 | + |
| 57 | +class RoborockProductNickname(Enum): |
122 | 58 | # Coral Series
|
123 |
| - "a143": RoborockProductNickname.CORALPRO, |
124 |
| - "a144": RoborockProductNickname.CORALPRO, |
125 |
| - "a20": RoborockProductNickname.CORAL, |
126 |
| - "a21": RoborockProductNickname.CORAL, |
| 59 | + CORAL = ProductInfo(nickname="Coral", short_models=("a20", "a21")) |
| 60 | + CORALPRO = ProductInfo(nickname="CoralPro", short_models=("a143", "a144")) |
| 61 | + |
| 62 | + # Pearl Series |
| 63 | + PEARL = ProductInfo(nickname="Pearl", short_models=("a74", "a75")) |
| 64 | + PEARLC = ProductInfo(nickname="PearlC", short_models=("a103", "a104")) |
| 65 | + PEARLE = ProductInfo(nickname="PearlE", short_models=("a167", "a168")) |
| 66 | + PEARLELITE = ProductInfo(nickname="PearlELite", short_models=("a169", "a170")) |
| 67 | + PEARLPLUS = ProductInfo(nickname="PearlPlus", short_models=("a86", "a87")) |
| 68 | + PEARLPLUSS = ProductInfo(nickname="PearlPlusS", short_models=("a116", "a117", "a136")) |
| 69 | + PEARLS = ProductInfo(nickname="PearlS", short_models=("a100", "a101")) |
| 70 | + PEARLSLITE = ProductInfo(nickname="PearlSLite", short_models=("a122", "a123")) |
| 71 | + |
| 72 | + # Ruby Series |
| 73 | + RUBYPLUS = ProductInfo(nickname="RubyPlus", short_models=("t4", "s4")) |
| 74 | + RUBYSC = ProductInfo(nickname="RubySC", short_models=("p5", "a08")) |
| 75 | + RUBYSE = ProductInfo(nickname="RubySE", short_models=("a19",)) |
| 76 | + RUBYSLITE = ProductInfo(nickname="RubySLite", short_models=("p6", "s5e", "a05")) |
| 77 | + |
| 78 | + # Tanos Series |
| 79 | + TANOS = ProductInfo(nickname="Tanos", short_models=("t6", "s6")) |
| 80 | + TANOSE = ProductInfo(nickname="TanosE", short_models=("t7", "a11")) |
| 81 | + TANOSS = ProductInfo(nickname="TanosS", short_models=("a14", "a15")) |
| 82 | + TANOSSC = ProductInfo(nickname="TanosSC", short_models=("a39", "a40")) |
| 83 | + TANOSSE = ProductInfo(nickname="TanosSE", short_models=("a33", "a34")) |
| 84 | + TANOSSMAX = ProductInfo(nickname="TanosSMax", short_models=("a52",)) |
| 85 | + TANOSSLITE = ProductInfo(nickname="TanosSLite", short_models=("a37", "a38")) |
| 86 | + TANOSSPLUS = ProductInfo(nickname="TanosSPlus", short_models=("a23", "a24")) |
| 87 | + TANOSV = ProductInfo(nickname="TanosV", short_models=("t7p", "a09", "a10")) |
| 88 | + |
| 89 | + # Topaz Series |
| 90 | + TOPAZS = ProductInfo(nickname="TopazS", short_models=("a29", "a30", "a76")) |
| 91 | + TOPAZSC = ProductInfo(nickname="TopazSC", short_models=("a64", "a65")) |
| 92 | + TOPAZSPLUS = ProductInfo(nickname="TopazSPlus", short_models=("a46", "a47", "a66")) |
| 93 | + TOPAZSPOWER = ProductInfo(nickname="TopazSPower", short_models=("a62",)) |
| 94 | + TOPAZSV = ProductInfo(nickname="TopazSV", short_models=("a26", "a27")) |
| 95 | + |
127 | 96 | # 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, |
| 97 | + ULTRON = ProductInfo(nickname="Ultron", short_models=("a50", "a51")) |
| 98 | + ULTRONE = ProductInfo(nickname="UltronE", short_models=("a72", "a84")) |
| 99 | + ULTRONLITE = ProductInfo(nickname="UltronLite", short_models=("a73", "a85")) |
| 100 | + ULTRONSC = ProductInfo(nickname="UltronSC", short_models=("a94", "a95")) |
| 101 | + ULTRONSE = ProductInfo(nickname="UltronSE", short_models=("a124", "a125", "a139", "a140")) |
| 102 | + ULTRONSPLUS = ProductInfo(nickname="UltronSPlus", short_models=("a68", "a69", "a70")) |
| 103 | + ULTRONSV = ProductInfo(nickname="UltronSV", short_models=("a96", "a97")) |
| 104 | + |
145 | 105 | # 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 |
| -} |
| 106 | + VERDELITE = ProductInfo(nickname="Verdelite", short_models=("a146", "a147")) |
| 107 | + |
| 108 | + # Vivian Series |
| 109 | + VIVIAN = ProductInfo(nickname="Vivian", short_models=("a134", "a135", "a155", "a156")) |
| 110 | + VIVIANC = ProductInfo(nickname="VivianC", short_models=("a158", "a159")) |
| 111 | + |
| 112 | + |
| 113 | +short_model_to_enum = {model: product for product in RoborockProductNickname for model in product.value.short_models} |
189 | 114 |
|
190 | 115 |
|
191 | 116 | class RoborockStateCode(RoborockEnum):
|
|
0 commit comments