|
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 RoborockProduct for model in product.value.short_models} |
189 | 114 |
|
190 | 115 |
|
191 | 116 | class RoborockStateCode(RoborockEnum): |
|
0 commit comments