@@ -103,8 +103,10 @@ class StatusField(FieldNameBase):
103103 to understand if a feature is supported by the device using `is_field_supported`.
104104
105105 The enum values are names of fields in the `Status` class. Each field is
106- annotated with `requires_schema_code` metadata to map the field to a schema
107- code in the product schema, which may have a different name than the field/attribute name.
106+ annotated with one of the following:
107+ - `requires_schema_code` metadata to map the field to a schema code in the
108+ product schema, which may have a different name than the field/attribute name.
109+ - `requires_supported_feature` metadata to map the field to a field in `DeviceFeatures`.
108110 """
109111
110112 STATE = "state"
@@ -113,18 +115,23 @@ class StatusField(FieldNameBase):
113115 WATER_BOX_MODE = "water_box_mode"
114116 CHARGE_STATUS = "charge_status"
115117 DRY_STATUS = "dry_status"
118+ CLEAN_PERCENT = "clean_percent"
116119
117120
118- def _requires_schema_code (requires_schema_code : str , default = None ) -> Any :
121+ def _requires_schema_code (requires_schema_code : str , default : Any = None ) -> Any :
119122 return field (metadata = {"requires_schema_code" : requires_schema_code }, default = default )
120123
121124
125+ def _requires_supported_feature (requires_supported_feature : str , default : Any = None ) -> Any :
126+ return field (metadata = {"requires_supported_feature" : requires_supported_feature }, default = default )
127+
128+
122129@dataclass
123130class Status (RoborockBase ):
124131 msg_ver : int | None = None
125132 msg_seq : int | None = None
126- state : RoborockStateCode | None = _requires_schema_code ("state" , default = None )
127- battery : int | None = _requires_schema_code ("battery" , default = None )
133+ state : RoborockStateCode | None = _requires_schema_code ("state" )
134+ battery : int | None = _requires_schema_code ("battery" )
128135 clean_time : int | None = None
129136 clean_area : int | None = None
130137 error_code : RoborockErrorCode | None = None
@@ -137,12 +144,12 @@ class Status(RoborockBase):
137144 back_type : int | None = None
138145 wash_phase : int | None = None
139146 wash_ready : int | None = None
140- fan_power : RoborockFanPowerCode | None = _requires_schema_code ("fan_power" , default = None )
147+ fan_power : RoborockFanPowerCode | None = _requires_schema_code ("fan_power" )
141148 dnd_enabled : int | None = None
142149 map_status : int | None = None
143150 is_locating : int | None = None
144151 lock_status : int | None = None
145- water_box_mode : RoborockMopIntensityCode | None = _requires_schema_code ("water_box_mode" , default = None )
152+ water_box_mode : RoborockMopIntensityCode | None = _requires_schema_code ("water_box_mode" )
146153 water_box_carriage_status : int | None = None
147154 mop_forbidden_enable : int | None = None
148155 camera_status : int | None = None
@@ -160,15 +167,15 @@ class Status(RoborockBase):
160167 collision_avoid_status : int | None = None
161168 switch_map_mode : int | None = None
162169 dock_error_status : RoborockDockErrorCode | None = None
163- charge_status : int | None = _requires_schema_code ("charge_status" , default = None )
170+ charge_status : int | None = _requires_schema_code ("charge_status" )
164171 unsave_map_reason : int | None = None
165172 unsave_map_flag : int | None = None
166173 wash_status : int | None = None
167174 distance_off : int | None = None
168175 in_warmup : int | None = None
169- dry_status : int | None = _requires_schema_code ("drying_status" , default = None )
176+ dry_status : int | None = _requires_schema_code ("drying_status" )
170177 rdt : int | None = None
171- clean_percent : int | None = None
178+ clean_percent : int | None = _requires_supported_feature ( "is_support_clean_estimate" )
172179 rss : int | None = None
173180 dss : int | None = None
174181 common_status : int | None = None
0 commit comments