roborock.data.code_mappings
1from __future__ import annotations 2 3import logging 4from collections import namedtuple 5from enum import Enum, IntEnum, StrEnum 6 7_LOGGER = logging.getLogger(__name__) 8completed_warnings = set() 9 10 11class RoborockEnum(IntEnum): 12 """Roborock Enum for codes with int values""" 13 14 @property 15 def name(self) -> str: 16 return super().name.lower() 17 18 @classmethod 19 def _missing_(cls: type[RoborockEnum], key) -> RoborockEnum: 20 if hasattr(cls, "unknown"): 21 warning = f"Missing {cls.__name__} code: {key} - defaulting to 'unknown'" 22 if warning not in completed_warnings: 23 completed_warnings.add(warning) 24 _LOGGER.warning(warning) 25 return cls.unknown # type: ignore 26 default_value = next(item for item in cls) 27 warning = f"Missing {cls.__name__} code: {key} - defaulting to {default_value}" 28 if warning not in completed_warnings: 29 completed_warnings.add(warning) 30 _LOGGER.warning(warning) 31 return default_value 32 33 @classmethod 34 def as_dict(cls: type[RoborockEnum]): 35 return {i.name: i.value for i in cls if i.name != "missing"} 36 37 @classmethod 38 def as_enum_dict(cls: type[RoborockEnum]): 39 return {i.value: i for i in cls if i.name != "missing"} 40 41 @classmethod 42 def values(cls: type[RoborockEnum]) -> list[int]: 43 return list(cls.as_dict().values()) 44 45 @classmethod 46 def keys(cls: type[RoborockEnum]) -> list[str]: 47 return list(cls.as_dict().keys()) 48 49 @classmethod 50 def items(cls: type[RoborockEnum]): 51 return cls.as_dict().items() 52 53 54class RoborockModeEnum(StrEnum): 55 """A custom StrEnum that also stores an integer code for each member.""" 56 57 code: int 58 59 def __new__(cls, value: str, code: int) -> RoborockModeEnum: 60 """Creates a new enum member.""" 61 member = str.__new__(cls, value) 62 member._value_ = value 63 member.code = code 64 return member 65 66 @classmethod 67 def from_code(cls, code: int): 68 for member in cls: 69 if member.code == code: 70 return member 71 raise ValueError(f"{code} is not a valid code for {cls.__name__}") 72 73 @classmethod 74 def keys(cls) -> list[str]: 75 """Returns a list of all member values.""" 76 return [member.value for member in cls] 77 78 79ProductInfo = namedtuple("ProductInfo", ["nickname", "short_models"]) 80 81 82class RoborockProductNickname(Enum): 83 # Coral Series 84 CORAL = ProductInfo(nickname="Coral", short_models=("a20", "a21")) 85 CORALPRO = ProductInfo(nickname="CoralPro", short_models=("a143", "a144")) 86 87 # Pearl Series 88 PEARL = ProductInfo(nickname="Pearl", short_models=("a74", "a75")) 89 PEARLC = ProductInfo(nickname="PearlC", short_models=("a103", "a104")) 90 PEARLE = ProductInfo(nickname="PearlE", short_models=("a167", "a168")) 91 PEARLELITE = ProductInfo(nickname="PearlELite", short_models=("a169", "a170")) 92 PEARLPLUS = ProductInfo(nickname="PearlPlus", short_models=("a86", "a87")) 93 PEARLPLUSS = ProductInfo(nickname="PearlPlusS", short_models=("a116", "a117", "a136")) 94 PEARLS = ProductInfo(nickname="PearlS", short_models=("a100", "a101")) 95 PEARLSLITE = ProductInfo(nickname="PearlSLite", short_models=("a122", "a123")) 96 97 # Ruby Series 98 RUBYPLUS = ProductInfo(nickname="RubyPlus", short_models=("t4", "s4")) 99 RUBYSC = ProductInfo(nickname="RubySC", short_models=("p5", "a08")) 100 RUBYSE = ProductInfo(nickname="RubySE", short_models=("a19",)) 101 RUBYSLITE = ProductInfo(nickname="RubySLite", short_models=("p6", "s5e", "a05")) 102 103 # Tanos Series 104 TANOS = ProductInfo(nickname="Tanos", short_models=("t6", "s6")) 105 TANOSE = ProductInfo(nickname="TanosE", short_models=("t7", "a11")) 106 TANOSS = ProductInfo(nickname="TanosS", short_models=("a14", "a15")) 107 TANOSSC = ProductInfo(nickname="TanosSC", short_models=("a39", "a40")) 108 TANOSSE = ProductInfo(nickname="TanosSE", short_models=("a33", "a34")) 109 TANOSSMAX = ProductInfo(nickname="TanosSMax", short_models=("a52",)) 110 TANOSSLITE = ProductInfo(nickname="TanosSLite", short_models=("a37", "a38")) 111 TANOSSPLUS = ProductInfo(nickname="TanosSPlus", short_models=("a23", "a24")) 112 TANOSV = ProductInfo(nickname="TanosV", short_models=("t7p", "a09", "a10")) 113 114 # Topaz Series 115 TOPAZS = ProductInfo(nickname="TopazS", short_models=("a29", "a30", "a76")) 116 TOPAZSC = ProductInfo(nickname="TopazSC", short_models=("a64", "a65")) 117 TOPAZSPLUS = ProductInfo(nickname="TopazSPlus", short_models=("a46", "a47", "a66")) 118 TOPAZSPOWER = ProductInfo(nickname="TopazSPower", short_models=("a62",)) 119 TOPAZSV = ProductInfo(nickname="TopazSV", short_models=("a26", "a27")) 120 121 # Ultron Series 122 ULTRON = ProductInfo(nickname="Ultron", short_models=("a50", "a51")) 123 ULTRONE = ProductInfo(nickname="UltronE", short_models=("a72", "a84")) 124 ULTRONLITE = ProductInfo(nickname="UltronLite", short_models=("a73", "a85")) 125 ULTRONSC = ProductInfo(nickname="UltronSC", short_models=("a94", "a95")) 126 ULTRONSE = ProductInfo(nickname="UltronSE", short_models=("a124", "a125", "a139", "a140")) 127 ULTRONSPLUS = ProductInfo(nickname="UltronSPlus", short_models=("a68", "a69", "a70")) 128 ULTRONSV = ProductInfo(nickname="UltronSV", short_models=("a96", "a97")) 129 130 # Verdelite Series 131 VERDELITE = ProductInfo(nickname="Verdelite", short_models=("a146", "a147")) 132 133 # Vivian Series 134 VIVIAN = ProductInfo(nickname="Vivian", short_models=("a134", "a135", "a155", "a156")) 135 VIVIANC = ProductInfo(nickname="VivianC", short_models=("a158", "a159")) 136 137 138SHORT_MODEL_TO_ENUM = {model: product for product in RoborockProductNickname for model in product.value.short_models} 139 140 141class RoborockCategory(Enum): 142 """Describes the category of the device.""" 143 144 WET_DRY_VAC = "roborock.wetdryvac" 145 VACUUM = "robot.vacuum.cleaner" 146 WASHING_MACHINE = "roborock.wm" 147 UNKNOWN = "UNKNOWN" 148 149 def __missing__(self, key): 150 _LOGGER.warning("Missing key %s from category", key) 151 return RoborockCategory.UNKNOWN
completed_warnings =
set()
class
RoborockEnum(enum.IntEnum):
12class RoborockEnum(IntEnum): 13 """Roborock Enum for codes with int values""" 14 15 @property 16 def name(self) -> str: 17 return super().name.lower() 18 19 @classmethod 20 def _missing_(cls: type[RoborockEnum], key) -> RoborockEnum: 21 if hasattr(cls, "unknown"): 22 warning = f"Missing {cls.__name__} code: {key} - defaulting to 'unknown'" 23 if warning not in completed_warnings: 24 completed_warnings.add(warning) 25 _LOGGER.warning(warning) 26 return cls.unknown # type: ignore 27 default_value = next(item for item in cls) 28 warning = f"Missing {cls.__name__} code: {key} - defaulting to {default_value}" 29 if warning not in completed_warnings: 30 completed_warnings.add(warning) 31 _LOGGER.warning(warning) 32 return default_value 33 34 @classmethod 35 def as_dict(cls: type[RoborockEnum]): 36 return {i.name: i.value for i in cls if i.name != "missing"} 37 38 @classmethod 39 def as_enum_dict(cls: type[RoborockEnum]): 40 return {i.value: i for i in cls if i.name != "missing"} 41 42 @classmethod 43 def values(cls: type[RoborockEnum]) -> list[int]: 44 return list(cls.as_dict().values()) 45 46 @classmethod 47 def keys(cls: type[RoborockEnum]) -> list[str]: 48 return list(cls.as_dict().keys()) 49 50 @classmethod 51 def items(cls: type[RoborockEnum]): 52 return cls.as_dict().items()
Roborock Enum for codes with int values
class
RoborockModeEnum(enum.StrEnum):
55class RoborockModeEnum(StrEnum): 56 """A custom StrEnum that also stores an integer code for each member.""" 57 58 code: int 59 60 def __new__(cls, value: str, code: int) -> RoborockModeEnum: 61 """Creates a new enum member.""" 62 member = str.__new__(cls, value) 63 member._value_ = value 64 member.code = code 65 return member 66 67 @classmethod 68 def from_code(cls, code: int): 69 for member in cls: 70 if member.code == code: 71 return member 72 raise ValueError(f"{code} is not a valid code for {cls.__name__}") 73 74 @classmethod 75 def keys(cls) -> list[str]: 76 """Returns a list of all member values.""" 77 return [member.value for member in cls]
A custom StrEnum that also stores an integer code for each member.
class
ProductInfo(builtins.tuple):
ProductInfo(nickname, short_models)
class
RoborockProductNickname(enum.Enum):
83class RoborockProductNickname(Enum): 84 # Coral Series 85 CORAL = ProductInfo(nickname="Coral", short_models=("a20", "a21")) 86 CORALPRO = ProductInfo(nickname="CoralPro", short_models=("a143", "a144")) 87 88 # Pearl Series 89 PEARL = ProductInfo(nickname="Pearl", short_models=("a74", "a75")) 90 PEARLC = ProductInfo(nickname="PearlC", short_models=("a103", "a104")) 91 PEARLE = ProductInfo(nickname="PearlE", short_models=("a167", "a168")) 92 PEARLELITE = ProductInfo(nickname="PearlELite", short_models=("a169", "a170")) 93 PEARLPLUS = ProductInfo(nickname="PearlPlus", short_models=("a86", "a87")) 94 PEARLPLUSS = ProductInfo(nickname="PearlPlusS", short_models=("a116", "a117", "a136")) 95 PEARLS = ProductInfo(nickname="PearlS", short_models=("a100", "a101")) 96 PEARLSLITE = ProductInfo(nickname="PearlSLite", short_models=("a122", "a123")) 97 98 # Ruby Series 99 RUBYPLUS = ProductInfo(nickname="RubyPlus", short_models=("t4", "s4")) 100 RUBYSC = ProductInfo(nickname="RubySC", short_models=("p5", "a08")) 101 RUBYSE = ProductInfo(nickname="RubySE", short_models=("a19",)) 102 RUBYSLITE = ProductInfo(nickname="RubySLite", short_models=("p6", "s5e", "a05")) 103 104 # Tanos Series 105 TANOS = ProductInfo(nickname="Tanos", short_models=("t6", "s6")) 106 TANOSE = ProductInfo(nickname="TanosE", short_models=("t7", "a11")) 107 TANOSS = ProductInfo(nickname="TanosS", short_models=("a14", "a15")) 108 TANOSSC = ProductInfo(nickname="TanosSC", short_models=("a39", "a40")) 109 TANOSSE = ProductInfo(nickname="TanosSE", short_models=("a33", "a34")) 110 TANOSSMAX = ProductInfo(nickname="TanosSMax", short_models=("a52",)) 111 TANOSSLITE = ProductInfo(nickname="TanosSLite", short_models=("a37", "a38")) 112 TANOSSPLUS = ProductInfo(nickname="TanosSPlus", short_models=("a23", "a24")) 113 TANOSV = ProductInfo(nickname="TanosV", short_models=("t7p", "a09", "a10")) 114 115 # Topaz Series 116 TOPAZS = ProductInfo(nickname="TopazS", short_models=("a29", "a30", "a76")) 117 TOPAZSC = ProductInfo(nickname="TopazSC", short_models=("a64", "a65")) 118 TOPAZSPLUS = ProductInfo(nickname="TopazSPlus", short_models=("a46", "a47", "a66")) 119 TOPAZSPOWER = ProductInfo(nickname="TopazSPower", short_models=("a62",)) 120 TOPAZSV = ProductInfo(nickname="TopazSV", short_models=("a26", "a27")) 121 122 # Ultron Series 123 ULTRON = ProductInfo(nickname="Ultron", short_models=("a50", "a51")) 124 ULTRONE = ProductInfo(nickname="UltronE", short_models=("a72", "a84")) 125 ULTRONLITE = ProductInfo(nickname="UltronLite", short_models=("a73", "a85")) 126 ULTRONSC = ProductInfo(nickname="UltronSC", short_models=("a94", "a95")) 127 ULTRONSE = ProductInfo(nickname="UltronSE", short_models=("a124", "a125", "a139", "a140")) 128 ULTRONSPLUS = ProductInfo(nickname="UltronSPlus", short_models=("a68", "a69", "a70")) 129 ULTRONSV = ProductInfo(nickname="UltronSV", short_models=("a96", "a97")) 130 131 # Verdelite Series 132 VERDELITE = ProductInfo(nickname="Verdelite", short_models=("a146", "a147")) 133 134 # Vivian Series 135 VIVIAN = ProductInfo(nickname="Vivian", short_models=("a134", "a135", "a155", "a156")) 136 VIVIANC = ProductInfo(nickname="VivianC", short_models=("a158", "a159"))
CORAL =
<RoborockProductNickname.CORAL: ProductInfo(nickname='Coral', short_models=('a20', 'a21'))>
CORALPRO =
<RoborockProductNickname.CORALPRO: ProductInfo(nickname='CoralPro', short_models=('a143', 'a144'))>
PEARL =
<RoborockProductNickname.PEARL: ProductInfo(nickname='Pearl', short_models=('a74', 'a75'))>
PEARLC =
<RoborockProductNickname.PEARLC: ProductInfo(nickname='PearlC', short_models=('a103', 'a104'))>
PEARLE =
<RoborockProductNickname.PEARLE: ProductInfo(nickname='PearlE', short_models=('a167', 'a168'))>
PEARLELITE =
<RoborockProductNickname.PEARLELITE: ProductInfo(nickname='PearlELite', short_models=('a169', 'a170'))>
PEARLPLUS =
<RoborockProductNickname.PEARLPLUS: ProductInfo(nickname='PearlPlus', short_models=('a86', 'a87'))>
PEARLPLUSS =
<RoborockProductNickname.PEARLPLUSS: ProductInfo(nickname='PearlPlusS', short_models=('a116', 'a117', 'a136'))>
PEARLS =
<RoborockProductNickname.PEARLS: ProductInfo(nickname='PearlS', short_models=('a100', 'a101'))>
PEARLSLITE =
<RoborockProductNickname.PEARLSLITE: ProductInfo(nickname='PearlSLite', short_models=('a122', 'a123'))>
RUBYPLUS =
<RoborockProductNickname.RUBYPLUS: ProductInfo(nickname='RubyPlus', short_models=('t4', 's4'))>
RUBYSC =
<RoborockProductNickname.RUBYSC: ProductInfo(nickname='RubySC', short_models=('p5', 'a08'))>
RUBYSE =
<RoborockProductNickname.RUBYSE: ProductInfo(nickname='RubySE', short_models=('a19',))>
RUBYSLITE =
<RoborockProductNickname.RUBYSLITE: ProductInfo(nickname='RubySLite', short_models=('p6', 's5e', 'a05'))>
TANOS =
<RoborockProductNickname.TANOS: ProductInfo(nickname='Tanos', short_models=('t6', 's6'))>
TANOSE =
<RoborockProductNickname.TANOSE: ProductInfo(nickname='TanosE', short_models=('t7', 'a11'))>
TANOSS =
<RoborockProductNickname.TANOSS: ProductInfo(nickname='TanosS', short_models=('a14', 'a15'))>
TANOSSC =
<RoborockProductNickname.TANOSSC: ProductInfo(nickname='TanosSC', short_models=('a39', 'a40'))>
TANOSSE =
<RoborockProductNickname.TANOSSE: ProductInfo(nickname='TanosSE', short_models=('a33', 'a34'))>
TANOSSMAX =
<RoborockProductNickname.TANOSSMAX: ProductInfo(nickname='TanosSMax', short_models=('a52',))>
TANOSSLITE =
<RoborockProductNickname.TANOSSLITE: ProductInfo(nickname='TanosSLite', short_models=('a37', 'a38'))>
TANOSSPLUS =
<RoborockProductNickname.TANOSSPLUS: ProductInfo(nickname='TanosSPlus', short_models=('a23', 'a24'))>
TANOSV =
<RoborockProductNickname.TANOSV: ProductInfo(nickname='TanosV', short_models=('t7p', 'a09', 'a10'))>
TOPAZS =
<RoborockProductNickname.TOPAZS: ProductInfo(nickname='TopazS', short_models=('a29', 'a30', 'a76'))>
TOPAZSC =
<RoborockProductNickname.TOPAZSC: ProductInfo(nickname='TopazSC', short_models=('a64', 'a65'))>
TOPAZSPLUS =
<RoborockProductNickname.TOPAZSPLUS: ProductInfo(nickname='TopazSPlus', short_models=('a46', 'a47', 'a66'))>
TOPAZSPOWER =
<RoborockProductNickname.TOPAZSPOWER: ProductInfo(nickname='TopazSPower', short_models=('a62',))>
TOPAZSV =
<RoborockProductNickname.TOPAZSV: ProductInfo(nickname='TopazSV', short_models=('a26', 'a27'))>
ULTRON =
<RoborockProductNickname.ULTRON: ProductInfo(nickname='Ultron', short_models=('a50', 'a51'))>
ULTRONE =
<RoborockProductNickname.ULTRONE: ProductInfo(nickname='UltronE', short_models=('a72', 'a84'))>
ULTRONLITE =
<RoborockProductNickname.ULTRONLITE: ProductInfo(nickname='UltronLite', short_models=('a73', 'a85'))>
ULTRONSC =
<RoborockProductNickname.ULTRONSC: ProductInfo(nickname='UltronSC', short_models=('a94', 'a95'))>
ULTRONSE =
<RoborockProductNickname.ULTRONSE: ProductInfo(nickname='UltronSE', short_models=('a124', 'a125', 'a139', 'a140'))>
ULTRONSPLUS =
<RoborockProductNickname.ULTRONSPLUS: ProductInfo(nickname='UltronSPlus', short_models=('a68', 'a69', 'a70'))>
ULTRONSV =
<RoborockProductNickname.ULTRONSV: ProductInfo(nickname='UltronSV', short_models=('a96', 'a97'))>
VERDELITE =
<RoborockProductNickname.VERDELITE: ProductInfo(nickname='Verdelite', short_models=('a146', 'a147'))>
VIVIAN =
<RoborockProductNickname.VIVIAN: ProductInfo(nickname='Vivian', short_models=('a134', 'a135', 'a155', 'a156'))>
VIVIANC =
<RoborockProductNickname.VIVIANC: ProductInfo(nickname='VivianC', short_models=('a158', 'a159'))>
SHORT_MODEL_TO_ENUM =
{'a20': <RoborockProductNickname.CORAL: ProductInfo(nickname='Coral', short_models=('a20', 'a21'))>, 'a21': <RoborockProductNickname.CORAL: ProductInfo(nickname='Coral', short_models=('a20', 'a21'))>, 'a143': <RoborockProductNickname.CORALPRO: ProductInfo(nickname='CoralPro', short_models=('a143', 'a144'))>, 'a144': <RoborockProductNickname.CORALPRO: ProductInfo(nickname='CoralPro', short_models=('a143', 'a144'))>, 'a74': <RoborockProductNickname.PEARL: ProductInfo(nickname='Pearl', short_models=('a74', 'a75'))>, 'a75': <RoborockProductNickname.PEARL: ProductInfo(nickname='Pearl', short_models=('a74', 'a75'))>, 'a103': <RoborockProductNickname.PEARLC: ProductInfo(nickname='PearlC', short_models=('a103', 'a104'))>, 'a104': <RoborockProductNickname.PEARLC: ProductInfo(nickname='PearlC', short_models=('a103', 'a104'))>, 'a167': <RoborockProductNickname.PEARLE: ProductInfo(nickname='PearlE', short_models=('a167', 'a168'))>, 'a168': <RoborockProductNickname.PEARLE: ProductInfo(nickname='PearlE', short_models=('a167', 'a168'))>, 'a169': <RoborockProductNickname.PEARLELITE: ProductInfo(nickname='PearlELite', short_models=('a169', 'a170'))>, 'a170': <RoborockProductNickname.PEARLELITE: ProductInfo(nickname='PearlELite', short_models=('a169', 'a170'))>, 'a86': <RoborockProductNickname.PEARLPLUS: ProductInfo(nickname='PearlPlus', short_models=('a86', 'a87'))>, 'a87': <RoborockProductNickname.PEARLPLUS: ProductInfo(nickname='PearlPlus', short_models=('a86', 'a87'))>, 'a116': <RoborockProductNickname.PEARLPLUSS: ProductInfo(nickname='PearlPlusS', short_models=('a116', 'a117', 'a136'))>, 'a117': <RoborockProductNickname.PEARLPLUSS: ProductInfo(nickname='PearlPlusS', short_models=('a116', 'a117', 'a136'))>, 'a136': <RoborockProductNickname.PEARLPLUSS: ProductInfo(nickname='PearlPlusS', short_models=('a116', 'a117', 'a136'))>, 'a100': <RoborockProductNickname.PEARLS: ProductInfo(nickname='PearlS', short_models=('a100', 'a101'))>, 'a101': <RoborockProductNickname.PEARLS: ProductInfo(nickname='PearlS', short_models=('a100', 'a101'))>, 'a122': <RoborockProductNickname.PEARLSLITE: ProductInfo(nickname='PearlSLite', short_models=('a122', 'a123'))>, 'a123': <RoborockProductNickname.PEARLSLITE: ProductInfo(nickname='PearlSLite', short_models=('a122', 'a123'))>, 't4': <RoborockProductNickname.RUBYPLUS: ProductInfo(nickname='RubyPlus', short_models=('t4', 's4'))>, 's4': <RoborockProductNickname.RUBYPLUS: ProductInfo(nickname='RubyPlus', short_models=('t4', 's4'))>, 'p5': <RoborockProductNickname.RUBYSC: ProductInfo(nickname='RubySC', short_models=('p5', 'a08'))>, 'a08': <RoborockProductNickname.RUBYSC: ProductInfo(nickname='RubySC', short_models=('p5', 'a08'))>, 'a19': <RoborockProductNickname.RUBYSE: ProductInfo(nickname='RubySE', short_models=('a19',))>, 'p6': <RoborockProductNickname.RUBYSLITE: ProductInfo(nickname='RubySLite', short_models=('p6', 's5e', 'a05'))>, 's5e': <RoborockProductNickname.RUBYSLITE: ProductInfo(nickname='RubySLite', short_models=('p6', 's5e', 'a05'))>, 'a05': <RoborockProductNickname.RUBYSLITE: ProductInfo(nickname='RubySLite', short_models=('p6', 's5e', 'a05'))>, 't6': <RoborockProductNickname.TANOS: ProductInfo(nickname='Tanos', short_models=('t6', 's6'))>, 's6': <RoborockProductNickname.TANOS: ProductInfo(nickname='Tanos', short_models=('t6', 's6'))>, 't7': <RoborockProductNickname.TANOSE: ProductInfo(nickname='TanosE', short_models=('t7', 'a11'))>, 'a11': <RoborockProductNickname.TANOSE: ProductInfo(nickname='TanosE', short_models=('t7', 'a11'))>, 'a14': <RoborockProductNickname.TANOSS: ProductInfo(nickname='TanosS', short_models=('a14', 'a15'))>, 'a15': <RoborockProductNickname.TANOSS: ProductInfo(nickname='TanosS', short_models=('a14', 'a15'))>, 'a39': <RoborockProductNickname.TANOSSC: ProductInfo(nickname='TanosSC', short_models=('a39', 'a40'))>, 'a40': <RoborockProductNickname.TANOSSC: ProductInfo(nickname='TanosSC', short_models=('a39', 'a40'))>, 'a33': <RoborockProductNickname.TANOSSE: ProductInfo(nickname='TanosSE', short_models=('a33', 'a34'))>, 'a34': <RoborockProductNickname.TANOSSE: ProductInfo(nickname='TanosSE', short_models=('a33', 'a34'))>, 'a52': <RoborockProductNickname.TANOSSMAX: ProductInfo(nickname='TanosSMax', short_models=('a52',))>, 'a37': <RoborockProductNickname.TANOSSLITE: ProductInfo(nickname='TanosSLite', short_models=('a37', 'a38'))>, 'a38': <RoborockProductNickname.TANOSSLITE: ProductInfo(nickname='TanosSLite', short_models=('a37', 'a38'))>, 'a23': <RoborockProductNickname.TANOSSPLUS: ProductInfo(nickname='TanosSPlus', short_models=('a23', 'a24'))>, 'a24': <RoborockProductNickname.TANOSSPLUS: ProductInfo(nickname='TanosSPlus', short_models=('a23', 'a24'))>, 't7p': <RoborockProductNickname.TANOSV: ProductInfo(nickname='TanosV', short_models=('t7p', 'a09', 'a10'))>, 'a09': <RoborockProductNickname.TANOSV: ProductInfo(nickname='TanosV', short_models=('t7p', 'a09', 'a10'))>, 'a10': <RoborockProductNickname.TANOSV: ProductInfo(nickname='TanosV', short_models=('t7p', 'a09', 'a10'))>, 'a29': <RoborockProductNickname.TOPAZS: ProductInfo(nickname='TopazS', short_models=('a29', 'a30', 'a76'))>, 'a30': <RoborockProductNickname.TOPAZS: ProductInfo(nickname='TopazS', short_models=('a29', 'a30', 'a76'))>, 'a76': <RoborockProductNickname.TOPAZS: ProductInfo(nickname='TopazS', short_models=('a29', 'a30', 'a76'))>, 'a64': <RoborockProductNickname.TOPAZSC: ProductInfo(nickname='TopazSC', short_models=('a64', 'a65'))>, 'a65': <RoborockProductNickname.TOPAZSC: ProductInfo(nickname='TopazSC', short_models=('a64', 'a65'))>, 'a46': <RoborockProductNickname.TOPAZSPLUS: ProductInfo(nickname='TopazSPlus', short_models=('a46', 'a47', 'a66'))>, 'a47': <RoborockProductNickname.TOPAZSPLUS: ProductInfo(nickname='TopazSPlus', short_models=('a46', 'a47', 'a66'))>, 'a66': <RoborockProductNickname.TOPAZSPLUS: ProductInfo(nickname='TopazSPlus', short_models=('a46', 'a47', 'a66'))>, 'a62': <RoborockProductNickname.TOPAZSPOWER: ProductInfo(nickname='TopazSPower', short_models=('a62',))>, 'a26': <RoborockProductNickname.TOPAZSV: ProductInfo(nickname='TopazSV', short_models=('a26', 'a27'))>, 'a27': <RoborockProductNickname.TOPAZSV: ProductInfo(nickname='TopazSV', short_models=('a26', 'a27'))>, 'a50': <RoborockProductNickname.ULTRON: ProductInfo(nickname='Ultron', short_models=('a50', 'a51'))>, 'a51': <RoborockProductNickname.ULTRON: ProductInfo(nickname='Ultron', short_models=('a50', 'a51'))>, 'a72': <RoborockProductNickname.ULTRONE: ProductInfo(nickname='UltronE', short_models=('a72', 'a84'))>, 'a84': <RoborockProductNickname.ULTRONE: ProductInfo(nickname='UltronE', short_models=('a72', 'a84'))>, 'a73': <RoborockProductNickname.ULTRONLITE: ProductInfo(nickname='UltronLite', short_models=('a73', 'a85'))>, 'a85': <RoborockProductNickname.ULTRONLITE: ProductInfo(nickname='UltronLite', short_models=('a73', 'a85'))>, 'a94': <RoborockProductNickname.ULTRONSC: ProductInfo(nickname='UltronSC', short_models=('a94', 'a95'))>, 'a95': <RoborockProductNickname.ULTRONSC: ProductInfo(nickname='UltronSC', short_models=('a94', 'a95'))>, 'a124': <RoborockProductNickname.ULTRONSE: ProductInfo(nickname='UltronSE', short_models=('a124', 'a125', 'a139', 'a140'))>, 'a125': <RoborockProductNickname.ULTRONSE: ProductInfo(nickname='UltronSE', short_models=('a124', 'a125', 'a139', 'a140'))>, 'a139': <RoborockProductNickname.ULTRONSE: ProductInfo(nickname='UltronSE', short_models=('a124', 'a125', 'a139', 'a140'))>, 'a140': <RoborockProductNickname.ULTRONSE: ProductInfo(nickname='UltronSE', short_models=('a124', 'a125', 'a139', 'a140'))>, 'a68': <RoborockProductNickname.ULTRONSPLUS: ProductInfo(nickname='UltronSPlus', short_models=('a68', 'a69', 'a70'))>, 'a69': <RoborockProductNickname.ULTRONSPLUS: ProductInfo(nickname='UltronSPlus', short_models=('a68', 'a69', 'a70'))>, 'a70': <RoborockProductNickname.ULTRONSPLUS: ProductInfo(nickname='UltronSPlus', short_models=('a68', 'a69', 'a70'))>, 'a96': <RoborockProductNickname.ULTRONSV: ProductInfo(nickname='UltronSV', short_models=('a96', 'a97'))>, 'a97': <RoborockProductNickname.ULTRONSV: ProductInfo(nickname='UltronSV', short_models=('a96', 'a97'))>, 'a146': <RoborockProductNickname.VERDELITE: ProductInfo(nickname='Verdelite', short_models=('a146', 'a147'))>, 'a147': <RoborockProductNickname.VERDELITE: ProductInfo(nickname='Verdelite', short_models=('a146', 'a147'))>, 'a134': <RoborockProductNickname.VIVIAN: ProductInfo(nickname='Vivian', short_models=('a134', 'a135', 'a155', 'a156'))>, 'a135': <RoborockProductNickname.VIVIAN: ProductInfo(nickname='Vivian', short_models=('a134', 'a135', 'a155', 'a156'))>, 'a155': <RoborockProductNickname.VIVIAN: ProductInfo(nickname='Vivian', short_models=('a134', 'a135', 'a155', 'a156'))>, 'a156': <RoborockProductNickname.VIVIAN: ProductInfo(nickname='Vivian', short_models=('a134', 'a135', 'a155', 'a156'))>, 'a158': <RoborockProductNickname.VIVIANC: ProductInfo(nickname='VivianC', short_models=('a158', 'a159'))>, 'a159': <RoborockProductNickname.VIVIANC: ProductInfo(nickname='VivianC', short_models=('a158', 'a159'))>}
class
RoborockCategory(enum.Enum):
142class RoborockCategory(Enum): 143 """Describes the category of the device.""" 144 145 WET_DRY_VAC = "roborock.wetdryvac" 146 VACUUM = "robot.vacuum.cleaner" 147 WASHING_MACHINE = "roborock.wm" 148 UNKNOWN = "UNKNOWN" 149 150 def __missing__(self, key): 151 _LOGGER.warning("Missing key %s from category", key) 152 return RoborockCategory.UNKNOWN
Describes the category of the device.
WET_DRY_VAC =
<RoborockCategory.WET_DRY_VAC: 'roborock.wetdryvac'>
VACUUM =
<RoborockCategory.VACUUM: 'robot.vacuum.cleaner'>
WASHING_MACHINE =
<RoborockCategory.WASHING_MACHINE: 'roborock.wm'>
UNKNOWN =
<RoborockCategory.UNKNOWN: 'UNKNOWN'>