+
    :ih                   r   ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H	t	 ^ RI
Ht ^ RIHt ^ RIHtHt ^RIHtHtHtHtHtHtHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/ ^RI0H1t1H2t2H3t3H4t4H5t5H6t6H7t7H8t8H9t9H:t:H;t;H<t<H=t=H>t>H?t?H@t@HAtAHBtBHCtCHDtDHEtEHFtFHGtGHHtHHItIHJtJHKtKHLtLHMtMHNtNHOtOHPtPHQtQHRtRHStSHTtTHUtUHVtVHWtWHXtXHYtYHZtZH[t[H\t\H]t]H^t^H_t_H`t`HataHbtbHctcHdtdHete ^R	IfHgtg ^R
IhHitiHjtjHktk ^RIlHmtm ^RInHoto ]P                  ! ]q4      tr ! R R4      ts ! R R4      tt ! R R4      tuR# )    )annotationsN)datetime)	randrange)Timer)AnyOptional)PIIDDIIDDreameVacuumPropertyDreameVacuumPropertyMappingDreameVacuumActionDreameVacuumActionMappingDreameVacuumChargingStatusDreameVacuumTaskStatusDreameVacuumStateDreameVacuumWaterTankDreameVacuumCarpetSensitivityDreameVacuumStatusDreameVacuumErrorCodeDreameVacuumRelocationStatusDreameVacuumDustCollectionDreameVacuumAutoEmptyStatusDreameVacuumSelfWashBaseStatusDreameVacuumSuctionLevelDreameVacuumWaterVolumeDreameVacuumMopPadHumidityDreameVacuumCleaningModeDreameVacuumSelfCleanAreaDreameVacuumMopWashLevelDreameVacuumMoppingTypeCleaningHistoryMapDataSegmentATTR_ACTIVE_AREASATTR_ACTIVE_POINTSATTR_ACTIVE_SEGMENTS)5STATE_UNKNOWNSTATE_UNAVAILABLESUCTION_LEVEL_CODE_TO_NAMEWATER_VOLUME_CODE_TO_NAMEMOP_PAD_HUMIDITY_CODE_TO_NAMECLEANING_MODE_CODE_TO_NAMECARPET_SENSITIVITY_CODE_TO_NAMECHARGING_STATUS_CODE_TO_NAMERELOCATION_STATUS_CODE_TO_NAMESELF_WASH_BASE_STATUS_TO_NAMEAUTO_EMPTY_STATUS_TO_NAMETASK_STATUS_CODE_TO_NAMESTATE_CODE_TO_STATEERROR_CODE_TO_ERROR_NAMEERROR_CODE_TO_ERROR_DESCRIPTIONSTATUS_CODE_TO_NAMEWATER_TANK_CODE_TO_NAMEDUST_COLLECTION_TO_NAMESELF_AREA_CLEAN_TO_NAMEMOP_WASH_LEVEL_TO_NAMEMOPPING_TYPE_TO_NAMEERROR_CODE_TO_IMAGE_INDEXPROPERTY_TO_NAMEDEVICE_MAP_KEYAI_SETTING_SWITCHAI_SETTING_UPLOADAI_SETTING_PETAI_SETTING_HUMANAI_SETTING_FURNITUREAI_SETTING_FLUIDATTR_CHARGINGATTR_CLEANING_SEQUENCEATTR_STARTEDATTR_PAUSEDATTR_RUNNINGATTR_RETURNING_PAUSEDATTR_RETURNINGATTR_MAPPING
ATTR_ROOMSATTR_CURRENT_SEGMENTATTR_SELECTED_MAPATTR_ID	ATTR_NAME	ATTR_ICONATTR_STATUSATTR_CLEANING_MODEATTR_SUCTION_LEVELATTR_WATER_TANKATTR_COMPLETEDATTR_CLEANING_TIMEATTR_CLEANED_AREAATTR_MOP_PAD_HUMIDITYATTR_MOP_PAD)ERROR_IMAGE)DeviceUpdateFailedExceptionInvalidActionExceptionInvalidValueException)DreameVacuumProtocol)DreameMapVacuumMapManagerc                     ] tR t^qt$ Rt]tR]R&   ]t	R]R&   RR R llt
RR	 R
 lltR R ltR R ltRR R lltRR R lltRR R lltRR R lltRR R lltRR R lltRR R lltRR R lltRR R  lltRR! R" lltR# R$ ltR% R& ltR' R( ltR) R* lt]RR+ R, ll4       t]R- R. l4       tR/ R0 ltR1 R2 lt R3 R4 lt!RR5 R6 llt"R7 R8 lt#RR9 R: llt$R; R< lt%R= R> lt&R? R@ lt'RA RB lt(RC RD lt)RE RF lt*RRG RH llt+RI RJ lt,RK RL lt-RM RN lt.RO RP lt/RQ RR lt0RS RT lt1RU RV lt2RW RX lt3RY RZ lt4R[ R\ lt5R] R^ lt6RR_ R` llt7Ra Rb lt8Rc Rd lt9Re Rf lt:Rg Rh lt;Ri Rj lt<Rk Rl lt=Rm Rn lt>Ro Rp lt?Rq Rr lt@RRs Rt lltARu Rv ltBRw Rx ltCRy Rz ltDR{ R| ltER} R~ ltFRR R lltGR R ltHR R ltIR R ltJR R ltKR R ltLR R ltMR R ltNR R ltOR R ltPR R ltQR R ltRR R ltSR R ltTR R ltUR R ltVR R ltWR R ltXR R ltYR R ltZRR R llt[R R lt\. . . 3R R llt]R R lt^RR R llt_R R lt`R R ltaRR R lltbR R ltcR R ltdR R lteR R ltfR R ltgR R lthRR R lltiR R ltjR R ltkR R ltlR R ltmR R ltn]oR R l4       tp]oR R l4       tq]oR R l4       tr]oR R l4       ts]oR R l4       ttRtuR# )DreameVacuumDevicezSupport for Dreame Vacuumz*dict[DreameVacuumProperty, dict[str, int]]property_mappingz(dict[DreameVacuumAction, dict[str, int]]action_mappingNc               D    V ^8  d   QhRRRRRRRRRRRRRRR	R
RRRRRR/# )   namestrhosttokenmacusernamepasswordcountryprefer_cloudbool	device_idauth_keyreturnNone )formats   "8/config/custom_components/dreame_vacuum/dreame/device.py__annotate__DreameVacuumDevice.__annotate__w   s     N@ N@N@ N@ 	N@
 N@ N@ N@ N@ N@ N@ N@ 
N@    c           
     	\   R V n         RV n        RV n        RV n        / V n        R V n        R V n        R V n        RV n        R V n	        ^ V n
        ^ V n        ^ V n        ^ V n        ^ V n        ^ V n        ^ V n        RV n        RV n        RV n        / V n        RV n        R V n        R V n        / V n        Wn        W@n        W0n        W n        R V n        \7        V 4      V n        V P;                  V P<                  \>        P@                  4       V P;                  V PB                  \>        PD                  4       V P;                  V PF                  \>        PH                  4       V P;                  V PJ                  \>        PL                  4       V P;                  V PJ                  \>        PN                  4       V P;                  V PP                  \>        PR                  4       V P;                  V PT                  \>        PV                  4       V P;                  V PX                  \>        PZ                  4       \]        V P                  V P                  WVWxW4      V n/        V P^                  P`                  '       Ed9   \c        V P^                  4      V n        V P;                  V Pd                  \>        Pf                  4       V P;                  V Ph                  \>        Pj                  4       V P;                  V Pl                  \>        Pn                  4       V P;                  V Pl                  \>        Pp                  4       V P;                  V Pl                  \>        Pr                  4       V P"                  P;                  V Pt                  4       V P"                  Pw                  V Px                  4       R# R# FN)=cleanup_completedrl   rk   rj   data	availabledisconnected_update_running_previous_cleaning_mode_ready_last_settings_request_last_map_list_request_last_map_request_last_change_last_update_failed_cleaning_history_update_update_fail_count_map_manager_update_callback_error_callback_property_update_callback_update_timer_consumable_reset_remote_control_dirty_data_nameauth_failedDreameVacuumDeviceStatusstatuslisten_task_status_changedr   TASK_STATUS_status_changedSTATUS_charging_status_changedCHARGING_STATUS_water_tank_changed
WATER_TANKAUTO_MOUNT_MOP_ai_obstacle_detection_changedAI_DETECTION_auto_switch_settings_changedAUTO_SWITCH_SETTINGS _intelligent_recognition_changedINTELLIGENT_RECOGNITIONr`   	_protocolcloudra   _map_list_changedMAP_LIST_recovery_map_list_changedRECOVERY_MAP_LIST_map_property_changedERRORSELF_WASH_BASE_STATUSCUSTOMIZED_CLEANING_property_changedlisten_error_update_failed)selfrh   rj   rk   rl   rm   rn   ro   rp   rr   rs   s   &&&&&&&&&&&rx   __init__DreameVacuumDevice.__init__w   s    (-
	57	$"'%*AE$!-.#-.#()#$*+ /0%'(7; $#)+&$(',%*<>

	 .t4D--/C/O/OPD((*>*E*EFD113G3W3WXD,,.B.M.MND,,.B.Q.QRD779M9Z9Z[D668L8a8abD99;O;g;gh-IItzz8wi
 >> 9$.. IDKK..0D0M0MNKK779M9_9_`KK224H4N4NOKK224H4^4^_KK224H4\4\]$$T%;%;<**4+>+>?  r{   c                    V ^8  d   QhRRRR/# )rg   
propertieszlist[DreameVacuumProperty]rt   rq   rv   )rw   s   "rx   ry   rz      s      i i.H iTX ir{   c                x   V'       EgR   \          Uu. uF  q"NK  	  ppVP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P
                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                  4       VP                  \         P                   4       VP                  \         P"                  4       VP                  \         P$                  4       VP                  \         P&                  4       VP                  \         P(                  4       VP                  \         P*                  4       VP                  \         P,                  4       VP                  \         P.                  4       VP                  \         P0                  4       VP                  \         P2                  4       VP                  \         P4                  4       VP                  \         P6                  4       VP                  \         P8                  4       VP                  \         P:                  4       VP                  \         P<                  4       VP                  \         P>                  4       VP                  \         P@                  4       VP                  \         PB                  4       VP                  \         PD                  4       VP                  \         PF                  4       VP                  \         PH                  4       . pV F  pW PJ                  9   g   K  V PJ                  V,          pRV9  g   K1  V PL                  '       d   VPN                  V PP                  9   g   K`  VPS                  R\U        VPN                  4      /VC4       K  	  VPW                  4       p. pV'       dH   V PX                  P[                  VR,          4      pVf   K0  VP]                  V4       VR,          VR&   KO  Rp. p	V EF  pVR,          ^ 8X  g   K  R	V9   g   K  \_        VR,          4      p
VR	,          pWP`                  9   dd   V P`                  V
,          V8w  d=   \b        Pe                  R
\        V
4      Pf                  V P`                  V
,          V4       V P`                  V
 K  V PP                  Pi                  V
R4      V8w  g   K  V
\         Pj                  PN                  8w  d"   V
\         Pl                  PN                  8w  d   RpV PP                  Pi                  V
4      pVe,   \b        Pe                  R\        V
4      Pf                  W4       M*\b        Pe                  R\        V
4      Pf                  V4       WPP                  V
&   WPn                  9   g   EK  V Pn                  V
,           F  pV	PS                  W.4       K  	  EK  	  V PL                  '       g   V Pp                  Ps                  4        V	 F  pV^ ,          ! V^,          4       K  	  V'       d=   \t        Pt                  ! 4       V n;        V PL                  '       d   V Py                  4        V# u upi )z#Request properties from the device.aiiddid:N   NN:r   NN:NNNFcodevaluez%Property %s Value Discarded: %s <- %sTzProperty %s Changed: %s -> %szProperty %s Added: %s)=r   removeSCHEDULE_IDREMOTE_CONTROLVOICE_CHANGEVOICE_CHANGE_STATUSMAP_RECOVERYMAP_RECOVERY_STATUSCLEANING_START_TIMECLEAN_LOG_FILE_NAMECLEANING_PROPERTIESCLEAN_LOG_STATUSMAP_DATA
FRAME_INFOOBJECT_NAMEMAP_EXTEND_DATA
ROBOT_TIMERESULT_CODEOLD_MAP_DATAWIFI_MAP
TAKE_PHOTOCAMERA_LIGHTCAMERA_BRIGHTNESSSTREAM_KEEP_ALIVESTREAM_UPLOADSTREAM_STATUSSTREAM_AUDIOSTREAM_RECORDSTREAM_CODESTREAM_SET_CODESTREAM_VERIFY_CODESTREAM_RESET_CODESTREAM_CRUISE_POINTSTREAM_PROPERTYSTREAM_FAULTSTREAM_TASKSTREAM_SPACErd   r   r   r   appendri   copyr   get_propertiesextendintr   _LOGGERinforh   getr   r   r   r   update_static_propertiestimer   r   )r   r   propproperty_listmappingpropsresultsresultchanged	callbacksr   r   current_valuecallbacks   &&            rx   _request_properties&DreameVacuumDevice._request_properties   s   z+?@+?4$+?J@ 2>>?2AAB2??@2FFG2??@2FFG2FFG2FFG2FFG2CCD2;;<2==>2>>?2BBC2==>2>>?2??@2;;<2==>2??@2DDE2DDE2@@A2@@A2??@2@@A2>>?2BBC2EEF2DDE2FFG2BBC2??@2>>?2??@D,,,//5($+++tyyAX!((%TZZ)LG)LM  ""$^^225:>F!v& :a	DF|q W_$u+&W***'',5C05:: ,,S1!	 ((-99==d+u4 3<<BBB#7#I#I#O#OO"&$(IIMM#$6M$0;=QRU=V=[=[]j  %<>RSV>W>\>\^cd%*IIcN<<<(,(F(Fs(K(KH%,,h-FG )LA F {{{KK002!HQK$ "  $		D{{{&&(M As   
^7c               $    V ^8  d   QhRRRRRR/# )rg   task_statusr   r   r   rt   ru   rv   )rw   s   "rx   ry   rz   2  s)     S S*@ SJ\ Sae Sr{   c                   V\         P                  Jd   \        P                  pV P                  P
                  \        P                  J d   \        P                  pM8V P                  P
                  \        P                  J d   \        P                  pV P                  \        P                  VP                  4       V\        P                  J d9   V P                  \        P                  \        P                  P                  4       V P                  \        P                   VP                  4       V P                  \        P"                  VP                  4       R# )zlUpdate status properties on memory for map renderer to update the image before action is sent to the device.N)r   	COMPLETEDr   SWEEPINGr   cleaning_moder   MOPPINGSWEEPING_AND_MOPPING_update_propertyr   STATEr   r   STANDBYIDLEr   r   )r   r   r   	new_states   &&& rx   _update_status!DreameVacuumDevice._update_status2  s    4>>>)22I{{((,D,L,LL-55	**.F.[.[[-BB	!!"6"<"<iooN'///!!"6"<"<>O>T>T>Z>Z[2996<<H2>>@Q@QRr{   c               $    V ^8  d   QhRRRRRR/# )rg   r   r   r   r   rt   rv   )rw   s   "rx   ry   rz   B  s"      %9 # # r{   c                L   WP                   9   d   V P                  V4      pW28w  d}   W P                  VP                  &   VP                  pW P                  V&   W@P
                  9   d#   V P
                  V,           F  pV! V4       K  	  V P                  4        Ve   V# T# R# )z6Update device property on memory and notify listeners.N)rd   get_propertyr   r   r   r   r   )r   r   r   r   r   r   s   &&&   rx   r  #DreameVacuumDevice._update_propertyB  s    ((( --d3M%/4  ,jj!&		#888$($B$B3$G$G / %H &&((5(A}LuLr{   c                    V ^8  d   QhRRRR/# )rg   previous_propertyr   rt   ru   rv   )rw   s   "rx   ry   rz   T  s     3 3s 3d 3r{   c                v    V P                   '       d'   V P                   P                  P                  4        R# R# )zYUpdate last update time of the map when a property associated with rendering map changed.N)r   editorrefresh_map)r   r  s   &&rx   r   (DreameVacuumDevice._map_property_changedT  s+    $$002 r{   c                    V ^8  d   QhRRRR/# )rg   previous_map_listr   rt   ru   rv   )rw   s   "rx   ry   rz   Y  s      3 $ r{   c                X   V P                   '       d   V P                  \        P                  4      pV'       dg   VR8w  d^    \        P
                  ! V4      pVP                  R4      pV'       d%   VR8w  d   V P                   P                  V4       R# ^ V n        R# R# R# R#     R# ; i)zIUpdate map list object name on map manager map list property when changed object_nameN)	r   r  r   r   jsonloadsr   set_map_list_object_namer   )r   r  map_listr  s   &&  rx   r   $DreameVacuumDevice._map_list_changedY  s    (()=)F)FGHHN#zz(3H"*,,}"=K"{b'8))BB8L673 +x    .B$ 1"B$ B$ $B)c                    V ^8  d   QhRRRR/# )rg   previous_recovery_map_listr   rt   ru   rv   )rw   s   "rx   ry   rz   h  s      S TX r{   c                X   V P                   '       d   V P                  \        P                  4      pV'       dg   VR8w  d^    \        P
                  ! V4      pVP                  R4      pV'       d%   VR8w  d   V P                   P                  V4       R# ^ V n        R# R# R# R#     R# ; i)zSUpdate recovery list object name on map manager recovery list property when changedr  r  N)	r   r  r   r   r  r  r   !set_recovery_map_list_object_namer   )r   r  r  r  s   &&  rx   r   -DreameVacuumDevice._recovery_map_list_changedh  s    (()=)O)OPHHN#zz(3H"*,,}"=K"{b'8))KKHU673 +x r  c                    V ^8  d   QhRRRR/# )rg   previous_water_tankr   rt   ru   rv   )rw   s   "rx   ry   rz   w  s     Q Qs Qd Qr{   c                   V P                  \        P                  4      EeW   \        P                  ! 4       pV P
                  P                  '       Eg   V P
                  P                  '       g   VP                  \        P                  4       VP                  \        P                  4       V P
                  P                  \        P                  8w  da   V P
                  P                  '       gE   V P
                  P                  V n        V P!                  \        P                  P"                  4       EM
V P
                  P$                  '       g   VP                  \        P                  4       V P
                  P                  '       g   V P
                  P&                  '       d   V P                  eF   V P                  \        P                  8w  d'   V P!                  V P                  P"                  4       M)V P!                  \        P                  P"                  4       V P
                  P                  V n        VP)                  4        UUu/ uF  w  r4WCbK	  	  uppV P
                  n        R# R# u uppi )zAUpdate cleaning mode on device when water tank status is changed.N)r  r   CLEANING_MODEr,   r   r   
auto_mountwater_tank_or_mop_installedpopr   r   r  r   r   startedr   set_cleaning_moder   mop_pad_lifting_availablesweepingitemscleaning_mode_list)r   r$  new_listkvs   &&   rx   r   &DreameVacuumDevice._water_tank_changedw  s    1??@L1668H;;))){{>>>LL!9!A!ABLL!9!N!NO{{004L4U4UU#{{222;?;;;T;TD8 223K3T3T3Z3Z[;;@@@ %=%F%FG#{{222t{{7K7K7K $ < < H$($@$@D\DeDe$e $ 6 6t7S7S7Y7Y Z $ 6 67O7d7d7j7j k;?;;;T;TD8?G~~?O-P?Otqad?O-PDKK*5 M4 .Qs   I;c                    V ^8  d   QhRRRR/# )rg   previous_task_statusr   rt   ru   rv   )rw   s   "rx   ry   rz     s     S S S Sr{   c                	   VEec   V\         P                  9   d   \        V4      pV P                  P                  pV\         P                  J dA   V P                  \        P                  ^ 4       V P                  \        P                  ^ 4       V P                  Ee   V\         P                  J d   V\         P                  J g=   V\         P                  J g)   V\         P                  J g   V\         P                  J d&   V P                  P                  P                  4        MV\         P                   J d&   V P                  P                  P#                  4        MIV P                  P                  P%                  4        M$V P                  P                  P%                  4        V\         P                  J d   V\         P                   J dQ   V P                  \        P                  ^ 4       RV n        V P                  e   V P                  P)                  4        MUV P&                  e"   RV n        \*        P*                  ! 4       V n        M%V P                  P.                  '       d   RMRV n        V\         P                  J g   V\         P                  J Ed   \        P0                  \        P2                  \        P4                  \        P6                  \        P8                  \        P:                  \        P<                  \        P>                  \        P@                  \        PB                  \        PD                  \        PF                  \        PH                  \        PJ                  \        PL                  \        PN                  \        PP                  \        PR                  \        PT                  \        PV                  \        PX                  \        PZ                  \        P\                  .pV P                  eJ   VP_                  \        P`                  \        Pb                  .4       \*        P*                  ! 4       V n2         V Pg                  V4       R# R# R#   \h         d   p Rp?R# Rp?ii ; i)zwTask status is a very important property and must be listened to trigger necessary actions when a task started or endedNFT)5r   _value2member_map_r   r   r   r  r   CLEANING_TIMECLEANED_AREAr   AUTO_CLEANINGZONE_CLEANINGSEGMENT_CLEANINGSPOT_CLEANINGr  
clear_pathFAST_MAPPING	reset_mapr  r~   request_next_map_listr   r   fast_mappingMAIN_BRUSH_TIME_LEFTMAIN_BRUSH_LEFTSIDE_BRUSH_TIME_LEFTSIDE_BRUSH_LEFTFILTER_LEFTFILTER_TIME_LEFTSENSOR_DIRTY_LEFTSENSOR_DIRTY_TIME_LEFTSECONDARY_FILTER_LEFTSECONDARY_FILTER_TIME_LEFTMOP_PAD_LEFTMOP_PAD_TIME_LEFTSILVER_ION_TIME_LEFTSILVER_ION_LEFTDETERGENT_TIME_LEFTDETERGENT_LEFTTOTAL_CLEANING_TIMECLEANING_COUNTTOTAL_CLEANED_AREAFIRST_CLEANING_DATESCHEDULESCHEDULE_CANCEL_REASONCRUISE_SCHEDULEr   r   r   r   r   	Exception)r   r5  r   r   exs   &&   rx   r   'DreameVacuumDevice._task_status_changed  s:   +#'='P'PP'=>R'S$++11K#'='G'GG%%&:&H&H!L%%&:&G&GK  ,'+A+K+KK#'='K'KK&*@*N*NN&*@*Q*QQ&*@*N*NN ))00;;=$(>(K(KK))00::<))00<<>%%,,88:4>>>'+A+N+NN))*>*L*LaP-2D*((4))??A++7-1D*48IIKD1151I1I1Iu& 5???'+A+K+KK )==(88(==(88(44(99(::(??(>>(CC(55(::(==(88(<<(77(<<(77(;;(<<(11(??(88/
4 $$0%%';'D'DFZFlFl&mn26))+D/,,Z8E L[ ,` ! s   Q* *R ;R c                    V ^8  d   QhRRRR/# )rg   previous_statusr   rt   ru   rv   )rw   s   "rx   ry   rz     s     % %s %d %r{   c                	   Ve   V\         P                  9   d   \        V4      pV P                  P                  pV P                  '       d0   V\         P                  Jd   V\         P                  Jd   RV n        V\         P
                  J d/   V\         P                  J d   \        P                  ! 4       V n        V P                  4        R # )NF)
r   r7  r   r   r   CHARGING	BACK_HOMEr   r   r   )r   r^  r   s   && rx   r   "DreameVacuumDevice._status_changed  s    &"4"G"GG"4_"E[[''F$$$"4"C"CC#+=+L+LL',$+444L^LhLh9h04		-""$r{   c                    V ^8  d   QhRRRR/# )rg   previous_charging_statusr   rt   ru   rv   )rw   s   "rx   ry   rz     s     % % %PT %r{   c                	4    R V n         V P                  4        R# r}   )r   r   )r   rd  s   &&rx   r   +DreameVacuumDevice._charging_status_changed  s    $""$r{   c                    V ^8  d   QhRRRR/# )rg   previous_ai_obstacle_detectionr   rt   ru   rv   )rw   s   "rx   ry   rz     s     
 
S 
\` 
r{   c                   V P                  \        P                  4      p\        V\        4      '       Ed   \
        P                  ! V4      p\        V9   d   V\        ,          V P                  n	        \        V9   d   V\        ,          V P                  n        \        V9   d   V\        ,          V P                  n        \        V9   d   V\        ,          V P                  n        \         V9   d   V\         ,          V P                  n        \$        V9   d   V\$        ,          V P                  n        M\        V\(        4      '       d   V^,          ^8H  V P                  n        V^,          ^8H  V P                  n	        V^,          ^8H  V P                  n        V^,          ^8H  V P                  n        V^,          ^8H  V P                  n        V^ ,          ^ 8H  V P                  n        V^@,          ^@8H  V P                  n        \/        V P                  P0                  ;'       g5    V P                  P                  ;'       g    V P                  P*                  4      V P                  n        R# )zwAI Detection property returns multiple values as json or int this function parses and sets the sub properties to memoryN)r  r   r   
isinstanceri   r  r  r?   r   ai_obstacle_detectionr@   obstacle_image_uploadrA   pet_detectionrB   human_detectionrC   furniture_detectionrD   fluid_detectionr   obstacle_picture
ai_picturerq   ai_policy_accepted)r   rh  r   settingss   &&  rx   r   1DreameVacuumDevice._ai_obstacle_detection_changed  s   !!"6"C"CDeS!!zz%(H H,4<=N4O1 H,4<=N4O1),4^,D)8+.67G.H+#x/2:;O2P/8+.67G.H+s##/4qyQ.>DKK+16q0@DKK-,1AI!+;DKK(+019*:DKK').(:DKK%160BDKK-&+bjR%7DKK")-KK**oodkk.O.OooSWS^S^SoSo*
&r{   c                    V ^8  d   QhRRRR/# )rg   previous_auto_switch_settingsr   rt   ru   rv   )rw   s   "rx   ry   rz      s      3 Z^ r{   c                	   V P                  \        P                  4      p\        V\        4      '       Ed-   \        V4      ^8  Ed    \        P                  ! V4      p^ V P                  n	        ^ V P                  n
        ^ V P                  n        ^ V P                  n        ^ V P                  n        \        V4      '       d   V F  pVR,          pVR,          pVR8X  d   W P                  n	        K.  VR8X  d   W P                  n
        KG  VR8X  d   W P                  n        K`  VR8X  d   W P                  n        Ky  VR8X  g   K  W P                  n        K  	  R# R# R# R#     R# ; i)	rg   r1  r2  LessCollFillinLightAutoDryStainIdentify	CleanTypeN)r  r   r   rj  ri   lenr  r  r   collision_avoidance
fill_lightauto_dryingstain_avoidancemopping_type)r   rw  r   rt  settingkeys   &&    rx   r   0DreameVacuumDevice._auto_switch_settings_changed   s   !!"6"K"KLeS!!c%j1n::e,23/)*&*+'./++,(x==#+%cl '*,>CKK; M15:KK2 I-6;KK3 O3:?KK7 K/7<KK4 $, ! '5!0s   	C;E% 	E% %E*c                    V ^8  d   QhRRRR/# )rg    previous_intelligent_recognitionr   rt   ru   rv   )rw   s   "rx   ry   rz   =  s      f fQT f`d fr{   c                	    V P                   P                  '       g1   V P                  \        P                  4      V P                   n        R # R # N)r   auto_switch_settings_availabler  r   r   r  )r   r  s   &&rx   r   3DreameVacuumDevice._intelligent_recognition_changed=  s5    {{999&*&7&78L8d8d&eDKK# :r{   c                   V ^8  d   QhRR/# rg   rt   ru   rv   )rw   s   "rx   ry   rz   A  s     \@ \@4 \@r{   c                
   V P                   '       EdM   V P                  ^ 8w  Ed9   V P                  R8X  gn   V P                  P                  eV   \        P                  ! 4       V P                  ,
          ^8  Ed   V P                  P
                  \        P                  J Ed   ^ V n        \        P                  R4        RpV P                  \        P                  4      pV^ 8  d    V P                  \        P                  4      pVf   \        \        P                  ! 4       4      pVf   ^p^(pV^8  d
   V^,           pV P                  P                   P#                  \%        \        P&                  V P(                  4      W14      pV'       Ed   . p^ pV EF  p\*        P,                  ! VR,          4      p\/        4       p	V EFf  p
V
R,          pV
R,          pV\1        \        P&                  V P(                  4      8X  d?   V\2        P4                  9   d   \3        V4      V	n        Kf  \2        P6                  V	n        K}  V\1        \        P8                  V P(                  4      8X  d	   Wn        K  V\1        \        P<                  V P(                  4      8X  d	   Wn        K  V\1        \        P@                  V P(                  4      8X  dA   V\B        P4                  9   d   \C        V4      V	n"        EK0  \B        P6                  V	n"        EKH  V\1        \        PF                  V P(                  4      8X  d   \H        PJ                  ! V4      V	n&        EK  V\1        \        PN                  V P(                  4      8X  d
   Wn(        EK  V\1        \        PR                  V P(                  4      8X  d   \U        V4      V	n+        EK  V\1        \        PX                  V P(                  4      8X  g   EK)  V\Z        P4                  9   d   \[        V4      V	n.        EKQ  \Z        P6                  V	n.        EKi  	  V^ 8  d&   VR,          PL                  V	PL                  8X  d   EK  VP_                  V	4       V^,           pV^8  g
   Wb8  g   EK   M	  V P                  P                  V8w  d   \        P                  R4       WPP                  n        V'       d^   V^ ,          PL                  Pa                  \H        Pb                  ! 4       Pe                  4       Pf                  R7      V P                  n4        V Pj                  '       d   V Pm                  4        R# R# R# R# R# R# R# R#    \        Po                  R4        R# ; i)	zMGet and parse the cleaning history from cloud event data and set it to memoryNzGet Cleaning Historyr   piidzCleaning History Changed)tzinfozGet Cleaning History failed!)8cloud_connectedr   r   _cleaning_historyr   r   r   r   r   debugr  r   rT  rV  r   r   r   get_device_eventr
   r   rd   r  r  r!   r	   r   r7  UNKNOWNr8  cleaning_timer9  cleaned_areaSUCTION_LEVELr   suction_levelr   r   fromtimestampdater   	file_namer   rq   	completedr   r   
water_tankr   replacenow
astimezoner  _last_cleaning_timer   r   warning)r   starttotallimitr   cleaning_historyhistory_sizer   history_datahistoryhistory_data_itemr  r   s   &            rx   _request_cleaning_history,DreameVacuumDevice._request_cleaning_historyA  s(       --2--3;;008IIK$"?"??1D//3I3S3SS -.D)MM01K@))*>*M*MN19 --.B.V.VWE=		,E=E2:!BJE -->>-44d6K6KLe 6')$#$L &'+zz$w-'@"1"31=-#4V#<D$5g$>E#t,@,G,GI^I^'__#(,>,Q,Q#Q5G5NGN5G5O5OGN!%.B.P.PRVRgRg)h!h8= 5!%.B.O.OQUQfQf)g!g7< 4!%.B.P.PRVRgRg)h!h#(,D,W,W#W<TUZ<[G$9<T<\<\G$9!%.B.V.VX\XmXm)n!n/7/E/Ee/L!%.B.V.VX\XmXm)n!n49 1!%.B.S.SUYUjUj)k!k48K 1!%.B.M.MtOdOd)e!e#(,A,T,T#T9Nu9UG$69N9V9VG$67 2>: (!+0@0D0I0IW\\0Y$(//8'3a'7'2-1F!Q !'T {{448HH&@A8H5+>Nq>Q>V>V>^>^'/||~'@'@'B'I'I ?_ ?DKK;  ;;; 224 ' I[ 5 T E 3 !p@ >?s!   L(U" /BU" B:U" U" "U<c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     $ $4 $r{   c                x    V P                   '       d(   \        P                  R4       V P                  4        R# R# )z.Call external listener when a property changedzUpdate CallbackN)r   r   r  r   s   &rx   r   $DreameVacuumDevice._property_changed  s,       MM+,!!# !r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     % %D %r{   c                P    V P                   '       d   V P                  V4       R# R# )z)Call external listener when update failedNr   r   r[  s   &&rx   r   !DreameVacuumDevice._update_failed  s!      $  r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     8 8d 8r{   c                $   RV n          V P                  4        ^ V n        V P                  '       g   V P                  V P                  4       R# R#   \         d   pT P                  ^,           T n        T P                  '       d   \
        P
                  ! 4       T n        T P                  ^8:  d'   \        P                  RT P                  T4        Rp?L\        P                  RT4       RT n        T P                  T4        Rp?LRp?ii ; i)z/Timer task for updating properties periodicallyNzUpdate failed, retrying %s: %szUpdate Failed: %sF)r   updater   rZ  r   r   r   r   r  r  r   r   schedule_update_update_intervalr  s   & rx   _update_taskDreameVacuumDevice._update_task  s    !	,KKM&'D#      !6!67 !  		,&*&=&=&AD#~~~+/99;(**a/OO$DdF]F]_abbMM"5r:%*DN''+		,s   A DA6D
.D

Dc               $    V ^8  d   QhRRRRRR/# )rg   r   r   r,  rq   rt   	list[int]rv   )rw   s   "rx   ry   rz     s"        R[ r{   c                	    V ei   . pTP                  V'       d
   V ^,          MV ^,          4       V ^,	          pVR,          pVP                  V4       VP                  V ^,	          4       V# R # )Ni)r   )r   r,  
value_listbyte1s   &&  rx   split_group_value$DreameVacuumDevice.split_group_value  sf    J-FuqyUUVYXQJEDLEe$erk* r{   c                    V ^8  d   QhRRRR/# )rg   valuesr  rt   r   rv   )rw   s   "rx   ry   rz     s      I # r{   c                	    V '       dR   \        V 4      ^8X  d@   ^ pW^,          ,          ^,          pW ^,          ,          ^,          pW0^ ,          ,          pV# R# R# )   N)r~  )r  numhighmidlows   &    rx   combine_group_value&DreameVacuumDevice.combine_group_value  sM    c&kQ&C)O)D)#)Cq	/CJ '6r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     9 9 9r{   c                	   \         P                  R4       \        V P                  P	                  4       4      V n        V P
                  f   V P                  P                  V n        \         P                  RV P                  P                  V P                  P                  4       \        P                  ! 4       V n
        V P                  V n        / V n        V P                  4        RV n        V P                  '       EdC   V P                  P                   Ee*   V P"                  '       d   V P$                  '       Eg   V P&                  '       Ed   V P                  P                  P)                  R4      p\+        V4      ^8X  d   \,        P.                  ! \0        P2                  ! \4        P6                  ! \8        4      \0        P:                  ^ ,          4      4      P=                  V^,          4      pV'       d   V P&                  P?                  V4       V P@                  PB                  '       g   V P&                  PE                  4        V P&                  PG                  V PH                  4       V P&                  PK                  V P@                  PL                  V P@                  PN                  ;'       d    V P@                  PP                  '       * 4       V P@                  PR                  fb   V P&                  PU                  ^4       V P&                  PW                  4        V P                  V n,        V P&                  PU                  4        MV P[                  4        V P\                  '       d   RV n/        V Pa                  4        V P@                  Pb                  '       d   V P@                  Pd                  '       g   RpV P                  P                   Pg                  V.4      pV'       dP   W49   dJ   WC,          '       d<    \,        P.                  ! WC,          4      P=                  R4      V P@                  n2        V P$                  '       g*   RV n        V P"                  '       d   V Pi                  4        RV n        R#     LH; i)	zConnect to the device api.zConnecting to deviceNzConnected to device: %s %s.prop.s_ai_configprivacyAuthedTr  )5r   r   DreameVacuumDeviceInfor   connectrl   mac_addressmodelfirmware_versionr   r   r   r   r   r   device_connectedr   r   r   r   splitr~  r  r  zlib
decompressbase64	b64decoder>   	MAX_WBITSr   
set_aes_ivr   lidar_navigationset_vslam_mapset_update_interval_map_update_intervalset_device_runningrunningdockedr*  current_mapr  r  r   
update_mapr  r   r  ai_detection_availablers  get_batch_device_datasr   )r   r  r  r   responses   &    rx   connect_device!DreameVacuumDevice.connect_device  s   +,*4>>+A+A+CD	88yy,,DH1499??DIID^D^_&*iik#&*&A&A#  "#'    T^^%9%9%Et{{{bfbpbpbp   		--c2u:?**T__V5E5En5UW[WeWehjWj%klppaC ))44S9{{333%%335!!55d6O6OP!!44KK''););)W)WDKKDWDW@W ;;**2%%55b9%%,,.-1-H-HD*%%557OO%###02-..0;;555dkk>\>\>\-D#~~33JJD6RHD$4!=AZZ=W=[=[\k=lDKK: ~~~!DN{{{&&(! s   
:R Rc                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     P Pt Pr{   c                   V P                   P                  '       Ed   V P                   P                  P                  '       Eg   V P                   P                  P                  4        RV n        V P                   P                  P                  RJ d[   V P                   P                  P                  '       d   RV n        V P                  4        V P                  P                  R4       R# V P                   P                  P                  '       d   V P                   P                  '       d   V P                  P                  ^4       V P                   P                  P                  V P                  4      w  V n        V n        V P                   P                  V P                  V P                  V P                  4       R# R# R# R# )zConnect to the cloud api.FTNr  )r   r   	logged_inloginr   r   r   r  	connectedget_inforl   rk   rj   set_credentialsr  s   &rx   connect_cloud DreameVacuumDevice.connect_cloud  s,   >>(<(<(F(F(FNN  &&($D~~##--6>>''333'+D$**,!!11"5%%///>>+++%%55a8(,(<(<(E(Edhh(O%
DI..tyy$**dhhO	 0 )Gr{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     ! !D !r{   c                   \         P                  R4       RV n        V P                  R4       V P                  P                  4        V P                  '       d   V P                  P                  R4       V P                  4        R# )z(Disconnect from device and cancel timers
DisconnectTNr  )r   r   r   r  r   
disconnectr   r   r  s   &rx   r  DreameVacuumDevice.disconnect  s`    \" R !!#--b1 r{   c                    V ^8  d   QhRRRR/# )rg   propertyr   rt   ru   rv   )rw   s   "rx   ry   rz   (  s     L L)= L Lr{   c                   Vf   RV n         / V n        R# Vf	   Wn         R# VP                  V P                  9  d   . V P                  VP                  &   V P                  VP                  ,          P                  V4       R# )z-Set callback functions for external listenersN)r   r   r   r   )r   r   r   s   &&&rx   r   DreameVacuumDevice.listen(  sj    $(D!-/D*$,!~~T%C%CCAC..x~~>**8>>:AA(Kr{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   6  s     ( ( (r{   c                    Wn         R# )z2Set error callback function for external listenersNr  )r   r   s   &&rx   r   DreameVacuumDevice.listen_error6  s    'r{   c                    V ^8  d   QhRRRR/# )rg   waitfloatrt   ru   rv   )rw   s   "rx   ry   rz   :  s     ' 'E 'T 'r{   c                
   V'       g   V P                   pV P                  e$   V P                  P                  4        V =RV n        V^ 8  d7   \        WP                  4      V n        V P                  P                  4        R# R# )z#Schedule a device update for futureN)r  r   cancelr   r  r  )r   r  s   &&rx   r  "DreameVacuumDevice.schedule_update:  sm    ((D)%%'"!%D19!&t->->!?D$$& r{   c                    V ^8  d   QhRRRR/# rg   r   r   rt   r   rv   )rw   s   "rx   ry   rz   H  s      !5 # r{   c                ~    Ve9   VP                   V P                  9   d   V P                  VP                   ,          # R# )z!Get a device property from memoryN)r   r   r   r   s   &&rx   r  DreameVacuumDevice.get_propertyH  s-    

dii 799TZZ((r{   c               $    V ^8  d   QhRRRRRR/# )rg   r   r   r   r   rt   rq   rv   )rw   s   "rx   ry   rz   N  s"     ! !!5 !c !d !r{   c                F   V P                  ^
4       V P                  W4      pVe   \        P                  ! 4       V n        ^ V n         V P
                  V,          pV P                  P                  VR,          VR,          V4      pV'       dp   V^ ,          R,          ^ 8w  d[   \        P                  RWV4       V P                  W4       VP                  V P                  9   d   V P                  VP                   V P                  ^4       R# V P                  ^4       R#   \         dr   pT P                  Y4       TP                  T P                  9   d   T P                  TP                   T P                  ^4       \        RTP                  T4      RhRp?ii ; i)	zSets property value using the existing property mapping and notify listeners
Property must be set on memory first and notify its listeners because device does not return new value immediately.
Nsiidr  r   z"Property not updated: %s: %s -> %sTzSet property failed %s: %sF)r  r  r   r   r   rd   r   set_propertyr   errorr   r   rZ  r]   rh   )r   r   r   r   r   r   r[  s   &&&    rx   r  DreameVacuumDevice.set_propertyN  sa   
 	R --d:$ $		D*+D'i//544WV_gfoW\]fQi/14MM"F]bc))$>zzT%5%55 ,,TZZ8 $$Q' 	Q  i%%d:::!1!11((4$$Q'12NPTPYPY[]^dhhis!   	AD$ B D$ $F /A,FF c                    V ^8  d   QhRRRR/# rg   	map_indexr   rt   MapData | Nonerv   )rw   s   "rx   ry   rz   q  s     R RC RN Rr{   c                   V P                  V4      pV'       EdV   VP                  '       dT   V P                  P                  P	                  Y"P
                  ^8X  d   V P                  P                  MR4      pRVn        \        P                  ! V4      pVP                  eB   VP                  Vn
        VP                  Vn        VP                  e   VP                  Vn        V P                  P                   '       d   V P                  P"                  '       d   VP$                  '       d   RVn        V P                  P                   '       d   V P                  P(                  '       d   VP$                  '       d   RVn        V P                  P,                  '       d   VP$                  '       d   RVn        VP$                  '       g   V P                  P                   '       d$   V P                  P0                  '       d   RVn        V P                  P"                  '       d   VP&                  '       g/   V P                  P(                  '       d   VP*                  '       d   RVn        MRVn        V P                  P8                  '       d   VP$                  '       d   RVn        \=        VP>                  ;'       g    V P                  P>                  4      Vn        VP$                  '       gG   V P                  P@                  '       g+   VP
                  ^8X  d   VP>                  '       d   ^Vn        VP                  R8X  d   VP>                  '       d   VPB                  '       dm   \        P                  ! VPB                  4      Vn        V P                  PD                  ^8w  d-   VPB                  PF                  ^,           VP                  n#        VP$                  '       d&   RVn!        RVn$        RVn%        RVn        RVn&        V# VP                  '       dJ   VP>                  '       d8   VPB                  '       g&   \        P                  ! VP                  4      Vn!        V# )aO  Makes changes on map data for device related properties for renderer.
Map manager does not need any device property for parsing and storing map data but map renderer does.
For example if device is running but not mopping renderer does not show no mopping areas and this function handles that so renderer does not need device data too.
NF)'get_mapneed_optimizationr   	optimizeroptimizesaved_map_statusselected_mapr   deepcopyoptimized_pixel_type
pixel_typeoptimized_dimensions
dimensionsoptimized_charger_positioncharger_positionr   r*  zone_cleaning	saved_mapactive_areasspot_cleaningactive_pointssegment_cleaningactive_segmentsr-  no_mopping_areassegmentspathcustomized_cleaningcleansetrq   r  r  robot_positionrobot_shapeawallsno_go_areas	obstacles)r   r  map_datas   && rx   get_map_for_render%DreameVacuumDevice.get_map_for_renderq  s$    <<	*8))),,66??@Y@Y]^@^d//<<dh .3*}}X.H,,8&.&C&C#&.&C&C#66B080S0SH-###DKK,E,E,E(J\J\J\(,%###DKK,E,E,E(J\J\J\)-&;;///83E3E3E+/(%%%;;&&&4;;+?+?+?04H-KK---(2G2G2GKK---(2H2H2H )-H% $;;222h6H6H6H$(! #8??#H#Hdkk6H6HIHO &&&444--2OOO -.)((D0X___I`I`I`,0MM(:Q:Q,R);;**a/2:2I2I2K2Kc2QH--/!!!*.' "&'+$,0)%)" 	 ***x....2mmH<U<U.VH+r{   c                    V ^8  d   QhRRRR/# r  rv   )rw   s   "rx   ry   rz     s     / / / /r{   c                   V P                   '       dt   V P                  P                  '       d   V P                   P                  V4      # V^8X  d   V P                   P                  # V^ 8X  d   V P                  P
                  # R# R# )z.Get stored map data by index from map manager.N)r   r   	multi_mapr  r!  r  )r   r  s   &&rx   r  DreameVacuumDevice.get_map  so    {{$$$((00;;A~((555A~{{...  r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     	8 	8D 	8r{   c                   V P                   '       dw   \        P                  ! 4       pWP                  ,
          ^x8  dI   Wn        V P                   P                  V P                  4       V P                   P                  R4       R# R# R# )zrTrigger a map update.
This function is used for requesting map data when a image request has been made to rendererg{Gz?N)r   r   r   r  r  r  r   r  s   & rx   r  DreameVacuumDevice.update_map  sj     ))+C+++c1),&!!55d6O6OP!!11$7 2 r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     A% A% A%r{   c                   \         P                  RV P                  4       V P                  '       d   R# V P                  '       g   V P                  4        V P                  '       g   V P                  4        V P                  '       g   \        R4      hRV n        \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                   \        P"                  \        P$                  \        P&                  \        P(                  \        P*                  \        P,                  \        P.                  \        P0                  \        P2                  \        P4                  \        P6                  .p\8        P8                  ! 4       pV P:                  P<                  '       d0   VP?                  \        P@                  \        PB                  .4       V PD                  '       d   VP?                  \        PF                  \        PH                  \        PJ                  \        PL                  \        PN                  \        PP                  \        PR                  \        PT                  \        PV                  \        PX                  .
4       W PZ                  ,
          R8  Eds   W n-        VP?                  . \        P\                  N\        P^                  N\        P`                  N\        Pb                  N\        Pd                  N\        Pf                  N\        Ph                  N\        Pj                  N\        Pl                  N\        Pn                  N\        Pp                  N\        Pr                  N\        Pt                  N\        Pv                  N\        Px                  N\        Pz                  N\        P|                  N\        P~                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N\        P                  N4       V P:                  P                  '       g    VP                  \        P                  4       V P                  '       d}   V P:                  P                  '       ga   W P                  ,
          ^<8  dJ   VP?                  \        P                  \        P                  .4       \8        P8                  ! 4       V nU         V P                  V4       T PD                  '       d   RT n"        T P                  '       d   T P                  P                  T P                  4       T P                  P                  T P:                  P                  T P:                  P                  ;'       d    T P:                  P                  '       * 4       T P                  '       d   T P                  4        RT n        R#   \         d   pRT n        \        T4      RhRp?ii ; i)zGet properties from the device.zDevice update: %sNzDevice cannot be reachedTg      #@F)`r   r  r  r   r  r  r  r  r]   r   r  r   BATTERY_LEVELr   r   r   r   WARN_STATUSRELOCATION_STATUSr   DUST_COLLECTIONAUTO_EMPTY_STATUSCLEANING_PAUSEDCLEANING_CANCELSCHEDULED_CLEANMOP_IN_STATIONMOP_PAD_INSTALLEDNO_WATER_WARNINGr   r   activer   r9  r8  r   rC  rD  rE  rF  rG  rH  rI  rJ  rM  rN  r   r  RESUME_CLEANINGCARPET_BOOSTMOP_CLEANING_REMAINDEROBSTACLE_AVOIDANCEr   DRYING_TIMEAUTO_ADD_DETERGENTCARPET_AVOIDANCEr&  WATER_ELECTROLYSISr   AUTO_WATER_REFILLINGr   MOP_WASH_LEVELr   
CHILD_LOCKCARPET_SENSITIVITYTIGHT_MOPPINGCARPET_RECOGNITION
SELF_CLEANDND	DND_STARTDND_ENDDND_TASKMULTI_FLOOR_MAPVOLUMEAUTO_DUST_COLLECTINGAUTO_EMPTY_FREQUENCYVOICE_PACKET_IDTIMEZONE
MAP_SAVINGr   QUICK_COMMANDself_wash_base_availabler   WATER_VOLUMEr   r  r   r   r   r   rZ  r  r  r  r  r*  r  )r   r   r  r[  s   &   rx   r  DreameVacuumDevice.update  s   )4+@+@A### $$$!$$$-.HII# !&& && .. 00 '' ++ ,, ,, 22 66 00 22 00 00 00 // 22 11%

, iik;;3@@BVBdBdef!!!(==(88(==(88(44(99(::(??(55(:: ,,,s2*-' #(66#(88# )55# )??	#
 );;# )55# )44# );;# )99# )66# );;# )@@# )==# )77# )77#  )<<!#" )33##$ );;%#& )66'#( );;)#* )33+#, ),,-#. )22/#0 )001#2 )113#4 )885#6 )//7#8 )==9#: )==;#< )88=#> )11?#@ )33A#B )==C#D )66E#%N ;;777!!"6"C"CDT[[%8%8%8SC^C^=^ac=c3<<>R>d>def*.))+D'	<$$Z0
 !!!%*D"11$2K2KL001D1DdkkFXFXFtFtaealalatat]tu**,$  	<#(D -b1t;	<s   [ [5[00[5c               $    V ^8  d   QhRRRRRR/# )rg   actionr   
parametersdict[str, Any]rt   dict[str, Any] | Nonerv   )rw   s   "rx   ry   rz   ]  s(     B B"4 B. B\q Br{   c                   WP                   9  d   \        RV R24      hV P                   V,          pRV9  g   RV9  d   \        V R24      hV\        P                  Jd&   V\        P                  Jd   V P                  ^
4       V\        P                  J d*   RV n        V P                  \        P                  ^d4       EMV\        P                  J d*   RV n        V P                  \        P                  ^d4       EMhV\        P                  J d*   RV n        V P                  \        P                  ^d4       EM+V\        P                  J d)   RV n        V P                  \        P                   ^d4       MV\        P"                  J d)   RV n        V P                  \        P$                  ^d4       MV\        P&                  J d)   RV n        V P                  \        P(                  ^d4       MwV\        P*                  J d)   RV n        V P                  \        P,                  ^d4       M;V\        P.                  J d(   RV n        V P                  \        P0                  ^d4       V\        P2                  J gc   V\        P4                  J gO   V\        P6                  J g;   V\        P8                  J g'   V\        P                  J g   V P                  '       d   V P;                  4         V P<                  P?                  VR,          VR,          V4      pV'       d   VPA                  R4      ^ 8w  d   RpT'       dj   \D        PK                  R
TPH                  4       \L        PL                  ! 4       T n'        T\        P                  Jd   T\        P                  Jd   ^ T n(        T P                  ^4       T#   \B         d>   p\D        PG                  R	TPH                  T4       T P                  ^4        Rp?R# Rp?ii ; i)zCall an action.zUnable to find z in the action mappingr  r   z( is not an action (missing siid or aiid)Tr   NzSend action failed %s: %szSend action %s))re   r^   r   REQUEST_MAPUPDATE_MAP_DATAr  RESET_MAIN_BRUSHr   r  r   rD  RESET_SIDE_BRUSHrF  RESET_FILTERrG  RESET_SENSORrI  RESET_SECONDARY_FILTERrK  RESET_MOP_PADrM  RESET_SILVER_IONrP  RESET_DETERGENTrR  STARTSTART_CUSTOMSTOPCHARGEr   r   rs  r   rZ  r   r  rh   r   r   r   r   )r   rs  rt  r   r   r[  s   &&&   rx   call_actionDreameVacuumDevice.call_action]  s,   ,,,(?6(BX)YZZ%%f- F'$9(F83[)\]]+777FJ\JlJl<l  $ '888%)D"!!"6"F"FL):::%)D"!!"6"F"FL)666%)D"!!"6"B"BCH)666%)D"!!"6"H"H#N)@@@%)D"!!"6"L"LcR)777%)D"!!"6"C"CSI):::%)D"!!"6"F"FL)999%)D"!!"6"E"EsK (...+888+000+222+;;;%%%""$	^^**76?GFOZXF&**V,1 LL)6;;7 $		D/;;;N`NpNp@p./+ 	Q  	MM5v{{BG  #	s   12O  $O   P2PPc               $    V ^8  d   QhRRRRRR/# )rg   commandri   rt  ru  rt   rv  rv   )rw   s   "rx   ry   rz     s"     	  	 C 	 ^ 	 H] 	 r{   c                    VR8X  g   Vf   \        RV4      hV P                  ^
4       V P                  P                  W^4       V P                  ^4       R# )zSend a raw command to the device. This is mostly useful when trying out
commands which are not implemented by a given device instance. (Not likely)r  NzInvalid Command: (%s).)r^   r  r   send)r   r  rt  s   &&&rx   send_commandDreameVacuumDevice.send_command  sN     b=J.()A7KKR G3Qr{   c                    V ^8  d   QhRRRR/# )rg   r  r   rt   rq   rv   )rw   s   "rx   ry   rz     s     Y Ys Yt Yr{   c                J   V P                   P                  '       d`   V P                   P                  '       dD   V P                   P                  '       g(   V P                   P                  '       g   \        R4      hV P                  \        P                  \        V4      4      # )zSet suction level.z<Cannot set suction level when customized cleaning is enabled)
r   r*  r3  r)  r,  r^   r  r   r  r   )r   r  s   &&rx   set_suction_level$DreameVacuumDevice.set_suction_level  sn    ;;KK+++T[[5N5N5NRVR]R]RkRkRk()ghh  !5!C!CSEWXXr{   c                    V ^8  d   QhRRRR/# )rg   r   r   rt   rq   rv   )rw   s   "rx   ry   rz     s     (Y (Ys (Yt (Yr{   c                   V P                   P                  '       d   \        R4      hV P                   P                  '       g   V\        P
                  P                  J dl   V P                   P                  '       dO   V P                   P                  '       g3   V P                   P                  '       d   \        R4      h\        R4      hMNV P                   P                  '       g3   V P                   P                  '       d   \        R4      h\        R4      hV P                   P                  '       d   \        P                  V P                  \        P                  4      V P                   P                  4      pV'       dm   \        V4      ^8X  d]   V P                   P                  '       d    V^8X  d   ^ V^ &   MV^ 8X  d   ^V^ &   MW^ &   MV^8X  d   ^ V^ &   \        P!                  V4      pM/V P                   P                  '       d   V^8X  d   ^ pM	V^ 8X  d   ^pV P#                  \        P                  \%        V4      4      # )zSet cleaning mode.z0Cannot set cleaning mode while vacuum is runningz0Cannot set sweeping while mop pads are installedz1Cannot set sweeping while water tank is installedz3Cannot set mopping while mop pads are not installedz4Cannot set mopping while water tank is not installed)r   r*  r^   r'  r   r   r   r(  r,  ro  rc   r  r  r   r&  r~  r  r  r   )r   r   r  s   && rx   r+  $DreameVacuumDevice.set_cleaning_mode  s   ;;()[\\{{%%% 8 A A G GG;;:::4;;ChChCh{{;;;45ghh45hii[[<<<;;77701fgg01ghh;;///'99!!"6"D"DEt{{GlGlF #f+*;;888$)$%q	&!+$%q	$1q	"a' !F1I 2 F Fv N[[222! !!# !  !5!C!CSEWXXr{   c                    V ^8  d   QhRRRR/# )rg   mop_pad_humidityr   rt   rq   rv   )rw   s   "rx   ry   rz     s      S T r{   c                j   V P                   P                  '       Ed   V P                   P                  '       d`   V P                   P                  '       dD   V P                   P                  '       g(   V P                   P
                  '       g   \        R4      h\        P                  V P                  \        P                  4      V P                   P                  4      pV'       dJ   \        V4      ^8X  d8   W^&   V P                  \        P                  \        P                  V4      4      # R# R# R# )zSet mop pad humidity.z?Cannot set mop pad humidity when customized cleaning is enabledN)r   ro  r*  r3  r)  r,  r^   rc   r  r  r   r&  r,  r~  r  r  )r   r  r  s   && rx   set_mop_pad_humidity'DreameVacuumDevice.set_mop_pad_humidity  s    ;;///{{"""///9R9R9RVZVaVaVoVoVo,-noo'99!!"6"D"DEt{{GlGlF #f+*,q	(((668J8^8^_e8f  +v 0r{   c                    V ^8  d   QhRRRR/# )rg   water_volumer   rt   rq   rv   )rw   s   "rx   ry   rz     s     [ [S [T [r{   c                   V P                   P                  '       g   V P                   P                  '       d`   V P                   P                  '       dD   V P                   P                  '       g(   V P                   P
                  '       g   \        R4      hV P                  \        P                  \        V4      4      # R# )zSet water volume.z;Cannot set water volume when customized cleaning is enabledN)r   ro  r*  r3  r)  r,  r^   r  r   rp  r   )r   r  s   &&rx   set_water_volume#DreameVacuumDevice.set_water_volume  s    {{333{{"""///9R9R9RVZVaVaVoVoVo,-jkk$$%9%F%FLHYZZ 4r{   c                    V ^8  d   QhRRRR/# )rg   dnd_enabledrq   rt   rv   )rw   s   "rx   ry   rz     s     N N4 ND Nr{   c                T    V P                  \        P                  \        V4      4      # )Set do not disturb function)r  r   rc  rq   )r   r  s   &&rx   set_dnd_enabled"DreameVacuumDevice.set_dnd_enabled  s!      !5!9!94;LMMr{   c                    V ^8  d   QhRRRR/# )rg   	dnd_startri   rt   rq   rv   )rw   s   "rx   ry   rz     s     L Ls Lt Lr{   c                    \         P                  ! R4      p\         P                  ! W!4      '       g   \        RV4      hV P	                  \
        P                  V4      # )r  ([0-1][0-9]|2[0-3]):[0-5][0-9]$z"DND start time is not valid: (%s).)recompilematchr_   r  r   rd  )r   r  time_patterns   && rx   set_dnd_start DreameVacuumDevice.set_dnd_start  sH    zz"CDxx00'(LiXX  !5!?!?KKr{   c                    V ^8  d   QhRRRR/# )rg   dnd_endri   rt   rq   rv   )rw   s   "rx   ry   rz     s     H H3 H4 Hr{   c                    \         P                  ! R4      p\         P                  ! W!4      '       g   \        RV4      hV P	                  \
        P                  V4      # )r  r  z DND end time is not valid: (%s).)r  r  r  r_   r  r   re  )r   r  r  s   && rx   set_dnd_endDreameVacuumDevice.set_dnd_end  sH    zz"CDxx..'(JGTT  !5!=!=wGGr{   c                    V ^8  d   QhRRRR/# )rg   self_clean_arear   rt   rq   rv   )rw   s   "rx   ry   rz     s     
 
3 
4 
r{   c                r   V P                   P                  '       d   \        P                  V P	                  \
        P                  4      V P                   P                  4      pV'       dJ   \        V4      ^8X  d8   W^&   V P                  \
        P                  \        P                  V4      4      # R# R# R# )zSet self clean area.N)r   ro  rc   r  r  r   r&  r,  r~  r  r  )r   r  r  s   && rx   set_self_clean_area&DreameVacuumDevice.set_self_clean_area  s    ;;///'99!!"6"D"DEt{{GlGlF #f+*+q	(((668J8^8^_e8f  +v	 0r{   c                   V ^8  d   QhRR/# rg   rt   rv  rv   )rw   s   "rx   ry   rz     s     ; ;- ;r{   c                @    V P                  \        P                  4      # )zLocate the vacuum cleaner.)r  r   LOCATEr  s   &rx   locateDreameVacuumDevice.locate  s     2 9 9::r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     : :, :r{   c                   V P                  ^
4       V P                  P                  '       d*   V P                  \        P
                  P                  4      # V P                  P                  '       g/   V P                  \        P                  \        P                  4       V P                  '       d%   V P                  P                  P                  4        V P                  \         P"                  4      # z"Start or resume the cleaning task.)r  r   fast_mapping_pausedstart_customr   r?  r   r*  r  r   r:  CLEANINGr   r  r  r  r   r  r  s   &rx   r  DreameVacuumDevice.start  s    R ;;***$$%7%D%D%J%JKK{{""" 6 D DFXFaFab$$002 2 8 899r{   c                    V ^8  d   QhRRRR/# rg   rt  ru  rt   rv  rv   )rw   s   "rx   ry   rz   )  s     J J~ JI^ Jr{   c                   V\         P                  P                  8w  d(   V P                  P                  '       d   \        R4      hR\        \        P                  V P                  4      RV/.pVe8   VP                  R\        \        P                  V P                  4      RV/4       V P                  \        P                  V4      # )zStart custom cleaning task.z(Cannot start cleaning while fast mappingr  r   )r   r?  r   r   rB  r^   r	   r   r   rd   r   r   r  r   r  )r   r   rt  payloads   &&& rx   r  DreameVacuumDevice.start_custom)  s    '44:::t{{?W?W?W()STTD!5!<!<d>S>STV]_efg!NND!5!I!I4K`K`aZ  2 ? ?IIr{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   :  s     9 9+ 9r{   c                   V P                  ^
4       V P                  P                  '       d   V P                  4       # V P                  P                  '       df   V P
                  '       d&   V P
                  P                  P                  . 4       V P                  \        P                  \        P                  4       V P                  \        P                  4      # )zStop the vacuum cleaner.)r  r   rB  return_to_baser*  r   r  set_active_segmentsr  r   r   r   r  r  r   r  r  s   &rx   stopDreameVacuumDevice.stop:  s    R ;;###&&((;;   !!((<<R@ 6 @ @BTB\B\] 2 7 788r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   I  s     : :, :r{   c                    V P                   P                  '       gU   V P                   P                  '       d9   V P                  \        P
                  \        P                  P                  4       V P                  \        P                  4      # )zPause the cleaning task.)r   pausedr*  r  r   r  r   PAUSEDr   r  r   PAUSEr  s   &rx   pauseDreameVacuumDevice.pauseI  s]    {{!!!dkk&9&9&9!!"6"<"<>O>V>V>\>\] 2 8 899r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   P  s     
; 
; 5 
;r{   c                T   V P                   P                  '       d9   V P                  \        P                  \
        P                  P                  4       V P                  '       d%   V P                  P                  P                  4        V P                  \        P                  4      # )z-Set the vacuum cleaner to return to the dock.)r   r*  r  r   r  r   	RETURNINGr   r   r  r  r  r   r  r  s   &rx   r  !DreameVacuumDevice.return_to_baseP  st    ;;!!"6"<"<>O>Y>Y>_>_`
 $$002 2 9 9::r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   \  s      2 r{   c                   V P                   P                  '       dQ   V P                   P                  \        P                  J g)   V P                   P                   \
        P                  J d   V P                  4       # V P                  4       # r  )	r   r*  stater   r  r   ra  r  r  r  s   &rx   start_pauseDreameVacuumDevice.start_pause\  s^     ###{{  $5$<$<<{{!!%7%A%AA::<zz|r{   c               $    V ^8  d   QhRRRRRR/# )rg   zoneslist[int] | list[list[int]]cleaning_timesr   rt   rv  rv   )rw   s   "rx   ry   rz   f  s#     $
 $
 ; $
S $
Uj $
r{   c                l   V P                  ^
4       V'       d!   \        V^ ,          \        4      '       g   V.pV P                  P                  P
                  pV P                  P                  '       d"   V P                  P                  P
                  pM V P                  P                  P
                  p. pV F  pVP                  \        \        V^ ,          4      4      \        \        V^,          4      4      \        \        V^,          4      4      \        \        V^,          4      4      VVV.4       K  	  V P                  P                  '       d   V P                  P                  '       df   V P                  '       d&   V P                  P                  P!                  V4       V P#                  \$        P&                  \(        P&                  4       V P+                  \(        P&                  P
                  \-        \.        P0                  ! RV/RR7      4      P3                  RR4      4      # )zClean selected area.areas
separators r  ,:)r  rj  listr   r  r   ro  r  r  r   r   roundr*  r  r   r  set_active_areasr  r   r;  r   r  ri   r  dumpsr  )r   r  r  r  r  	cleanlistzones   &&&    rx   
clean_zoneDreameVacuumDevice.clean_zonef  s   R E!Hd33GE1177;;///;;77==L;;3399L	Dd1g'd1g'd1g'd1g'"! 
  {{"""dkk&8&8&8   !!((99%@ 6 D DFXFfFfg  ,,22

GY/JGHPPQTVXY
 	
r{   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )rg   selected_segmentsint | list[int]r  r  r  rt   rv  rv   )rw   s   "rx   ry   rz     sC     F
 F
*F
 (F
 '	F

 &F
 
F
r{   c           
        V P                  ^
4       \        V\        4      '       g   V.pV'       d   VR8X  d!   V P                  P                  P
                  pV'       d   VR8X  d^   V P                  P                  '       d"   V P                  P                  P
                  pM V P                  P                  P
                  p. p^ pV P                  P                  pV P                  \        P                  4      RJ;'       d    V P                  P                  pV EFm  p	V'       gA   V'       d6   W9   d0   V P                  P                  '       d   Wy,          P                  p
M$^p
M!\        V\        4      '       d
   W&,          p
MTp
V'       gA   V'       d6   W9   d0   V P                  P                  '       d   Wy,          P                  pM$^pM!\        V\        4      '       d
   W6,          pMTpV'       gA   V'       d6   W9   d0   V P                  P                  '       d   Wy,          P                  pM$^pM!\        V\        4      '       d
   WF,          pMTpTP!                  YYV'       d   ^MV^,           .4       V^,           pEKp  	  V P                  P"                  '       d   V P                  P$                  '       df   V P&                  '       d&   V P&                  P(                  P+                  V4       V P-                  \.        P0                  \2        P0                  4       V P5                  \2        P0                  P
                  \7        \8        P:                  ! RV/RR7      4      P=                  RR4      4      # )z Clean selected segment using id.r  Nselectsr  r  r  )r  rj  r  r   r  r   ro  r  r  r1  r  r   r&  custom_orderr3  r  r   r*  r  r   r  r  r  r   r<  r   r  ri   r  r  r  )r   r  r  r  r  r  indexr1  r  
segment_idrepeatfanwaters   &&&&&        rx   clean_segment DreameVacuumDevice.clean_segment  s    	R +T22!2 3 3 KK55;;M|r1{{333#{{;;AA#{{77==	;;''(()=)K)KLTXXuu]a]h]h]u]u+J!
 64;;;Z;Z;Z%1@@FFND11'.' 
 64;;;Z;Z;Z".<<CCM400#*#
 64;;;Z;Z;Z$0==EEL$//$+$j#<aV[^_V_abAIEA ,D {{"""dkk&8&8&8   !!((<<=NO 6 G GI[IlIlm  //55

Iy1jIJRRSVXZ[
 	
r{   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	rg   pointsr  r  r  r  r  rt   rv  rv   )rw   s   "rx   ry   rz     s<     '
 '
+'
 ('
 '	'

 &'
 
'
r{   c           
     	   V P                  ^
4       V'       d!   \        V^ ,          \        4      '       g   V.pV P                  P                  P
                  pV P                  P                  '       d"   V P                  P                  P
                  pM V P                  P                  P
                  p. pV FK  pVP                  \        \        V^ ,          4      4      \        \        V^,          4      4      VVV.4       KM  	  V P                  P                  '       d   V P                  P                  '       df   V P                  '       d&   V P                  P                  P!                  V4       V P#                  \$        P&                  \(        P&                  4       V P+                  \(        P&                  P
                  \-        \.        P0                  ! RV/RR7      4      P3                  RR4      4      # )
   r  r  r  r  r  )r  rj  r  r   r  r   ro  r  r  r   r   r  r*  r  r   r  set_active_pointsr  r   r=  r   r  ri   r  r  r  )r   r  r  r  r  r  points   &&&&&  rx   
clean_spotDreameVacuumDevice.clean_spot  st    	R *VAY55XF1177;;///;;77==L;;3399L	EeAh(eAh("!   {{"""dkk&8&8&8   !!((::6B 6 D DFXFfFfg  ,,22

Hi0ZHIQQRUWYZ
 	
r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     H H$9 Hr{   c                   V P                  ^
4       V P                  P                  '       d   R# V P                  P                  ^8  d   \	        R4      hV P                  P
                  '       gD   V P                  P                  '       d(   V P                  P                  '       g   \	        R4      hV P                  \        P                  \        P                  4       V P                  '       d%   V P                  P                  P                  4        V P                  \        P                  P                   4      # )z	Fast map.NzVLow battery capacity. Please start the robot for working after it being fully charged.zBPlease make sure the mop pad is not installed before fast mapping.)r  r   rB  battery_levelr^   ro  r(  r,  r  r   r?  r   r   r  r  r  r   r  s   &rx   start_fast_mapping%DreameVacuumDevice.start_fast_mapping  s    R ;;###;;$$r)(h 
 444777KK999()mnn2??ASA`A`a$$002  !3!@!@!F!FGGr{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     I I4 Ir{   c                @   V P                  ^
4       V P                  '       dS   V P                  P                  P                  4        V P	                  \
        P                  \        P                  4       V P                  \        P                  P                  R4      # )z)Create a new map by cleaning whole floor.3)r  r   r  r@  r  r   r:  r   r  r  r   r  s   &rx   start_mapping DreameVacuumDevice.start_mapping  sr    R $$..0 6 D DFXFaFab  !3!<!<!B!BCHHr{   c                    V ^8  d   QhRRRR/# r  rv   )rw   s   "rx   ry   rz     s     K K~ KI^ Kr{   c                :   V P                   P                  '       g   R# V P                  '       d   V P                  P                  R8:  d   RpRpVe*   R\	        \
        P                  V P                  4      RV/.pV P                  \        P                  V4      # )z4Start self-wash base for cleaning or drying the mop.N  r  r   )r   ro  r   versionr	   r   r   rd   r  r   START_WASHING)r   rt  r  s   && rx   start_self_wash_base'DreameVacuumDevice.start_self_wash_base  s    {{333999**d2J! D!5!I!I4K`K`aZG  2 @ @'JJr{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   1  s     4 44 4r{   c                l   V P                   P                  '       dO   V P                  '       d,   V P                  P                  R8:  d   V P	                  4       # V P                  R4      # V P                   P                  '       g   V P                   P                  '       d   V P                  R4      # R# )z3Start washing the mop if self-wash base is present.r  z1,1z2,1N)r   washing_pausedr   r  r  r  washing_availablereturning_to_wash_pausedr  s   &rx   start_washing DreameVacuumDevice.start_washing1  s    ;;%%%yyyTYY..$6zz|#,,U33;;(((DKK,P,P,P,,U33 -Qr{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   :  s     4 44 4r{   c                    V P                   P                  '       dO   V P                  '       d,   V P                  P                  R8:  d   V P	                  4       # V P                  R4      # R# )z3Pause washing the mop if self-wash base is present.r  z1,0N)r   washingr   r  r  r  r  s   &rx   pause_washing DreameVacuumDevice.pause_washing:  sN    ;;yyyTYY..$6zz|#,,U33 r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   A  s     4 43 4r{   c                    V P                   P                  '       d0   V P                   P                  '       g   V P                  R4      # R# R# )z2Start drying the mop if self-wash base is present.z3,1Nr   drying_availabledryingr  r  s   &rx   start_dryingDreameVacuumDevice.start_dryingA  s;    ;;'''0B0B0B,,U33 1C'r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   F  s     4 42 4r{   c                    V P                   P                  '       d0   V P                   P                  '       d   V P                  R4      # R# R# )z1Stop drying the mop if self-wash base is present.z3,0Nr)  r  s   &rx   stop_dryingDreameVacuumDevice.stop_dryingF  s:    ;;'''DKK,>,>,>,,U33 -?'r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   K  s      4 r{   c           	        V P                   P                  '       dj   V P                  \        P                  R\        \        P                  V P                  4      RRV P                   P                  P                   R2/.4      # R# )z1Clear warning error code from the vacuum cleaner.r  r   []N)r   has_warningr  r   CLEAR_WARNINGr	   r   r   rd   r  r   r  s   &rx   clear_warning DreameVacuumDevice.clear_warningK  sw    ;;"""##"00 %9%M%MtOdOd e1T[[%6%6%<%<$=Q!?  #r{   c               $    V ^8  d   QhRRRRRR/# )rg   rotationr   velocityrt   rv  rv   )rw   s   "rx   ry   rz   X  s'     Y Y YC YPe Yr{   c                   V P                   P                  '       d   \        R4      hV P                   P                  '       d   \        R4      hRRTRTRV P                  '       g)   V P                   P                   \
        P                  J d   RMRR	\        R
4      /,          pRV n        V P                  \        P                  ,          pV P                  P                  VR,          VR,          V^ 4      # )z&Send remote control command to device.z/Cannot remote control vacuum while fast mappingz<Cannot remote control vacuum while self-wash base is runningzQ{"spdv":%(velocity)d,"spdw":%(rotation)d,"audio":"%(audio)s","random":%(random)d}r<  r;  audiofalsetruerandomi  Tr  r  )r   rB  r^   r$  r   r   SLEEPINGr   rd   r   r   r   r  )r   r;  r<  r  r   s   &&&  rx   remote_control_move_step+DreameVacuumDevice.remote_control_move_stepX  s    ;;###()Z[[;;()ghhe 4 4 48J8JN`NiNi8iWoui&	i
 
  $''(<(K(KL~~**76?GFOWVWXXr{   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	rg   lang_idr   urlri   md5sizert   rv  rv   )rw   s   "rx   ry   rz   j  s7     	Y 	Y# 	YC 	Yc 	Y 	YQf 	Yr{   c           	         RRVRVRVRV/,          pV P                   \        P                  ,          pV P                  P	                  VR,          VR,          V^4      # )zinstall a custom language packzD{"id":"%(lang_id)s","url":"%(url)s","md5":"%(md5)s","size":%(size)d}rF  rG  rH  rI  r  r  )rd   r   r   r   r  )r   rF  rG  rH  rI  r  r   s   &&&&&  rx   install_voice_pack%DreameVacuumDevice.install_voice_packj  sc    Xw33D	\
 
 ''(<(I(IJ~~**76?GFOWVWXXr{   c                    V ^8  d   QhRRRR/# )rg   rt  zdict[str, bool] | intrt   rv  rv   )rw   s   "rx   ry   rz   u  s     " ")> "CX "r{   c                   V P                   P                  '       EdR   V P                  4        V P                   P                  '       g   V P                   P                  '       EdK   V P
                  P                  '       Ed.   V P                   P                  '       Eg   RpV P
                  P                  P                  V.4      pV'       dP   W#9   dJ   W2,          '       d<    \        P                  ! W2,          4      P                  R4      V P                   n        V P                   P                  '       gv   V P                   P                  '       d   RV P                   n        V P                   P                  '       d   RV P                   n        V P                  4        \        R4      hV P                  \        P                  ,          p\!        V\"        4      '       d-   V P
                  P%                  VR,          VR,          V^4      # V P
                  P%                  VR,          VR,          \'        \        P(                  ! VRR7      4      P+                  RR	4      ^4      # R
#     ELV; i)z+Send ai detection parameters to the device.r  r  Fz\You need to accept privacy policy from the App before enabling AI obstacle detection featurer  r  r  r  r  Nr  )r   r  r   rk  rl  r   r   rs  r  r  r  r   r^   rd   r   r   rj  r   r  ri   r  r  )r   rt  r   r  r   s   &&   rx   set_ai_detection#DreameVacuumDevice.set_ai_detectionu  s   ;;---""$111T[[5V5V5V$$$T[[-K-K-K)>>//FFvN 0X^^9=HN9S9W9WXg9h6 {{555{{888<A9{{888<A9**,0v  ++,@,M,MNG(C((~~2276?GFOU]_`aa>>..#djjV`6a2b2j2jknpr2suv = .s   &:I1 1I6c                    V ^8  d   QhRRRR/# rg   enabledrq   rt   rv  rv   )rw   s   "rx   ry   rz            :O r{   c                ^   V P                   P                  '       Ed   V P                   P                  p\        V4      V P                   n        V P	                  \
        P                  4      p\        V\        4      '       dA   V P                   P                  '       d
   V^,          MVR,          pV P                  V4      pM+V P                  \        V P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P                  4        V# R# )z'Enable or disable AI detection feature.r   N)r   r  rk  rq   r  r   r   rj  r   rO  r?   r   r   rS  r   r   r   s   &&   rx   set_ai_obstacle_detection,DreameVacuumDevice.set_ai_obstacle_detection  s    ;;--- KK==M04WDKK-%%&:&G&GHE%%%'+{{'H'H'HuWYz..u5..0A4;;CdCd/ef&)F+q04A1&&(M .r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz     rT  r{   c                ^   V P                   P                  '       Ed   V P                   P                  p\        V4      V P                   n        V P	                  \
        P                  4      p\        V\        4      '       dA   V P                   P                  '       d
   V^ ,          MVR,          pV P                  V4      pM+V P                  \        V P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P                  4        V# R# )z:Enable or disable obstacle picture uploading to the cloud.r   Ni)r   r  rl  rq   r  r   r   rj  r   rO  r@   r   rW  s   &&   rx   set_obstacle_image_upload,DreameVacuumDevice.set_obstacle_image_upload  s    ;;--- KK==M04WDKK-%%&:&G&GHE%%%(,(I(I(IPUX[P[..u5..0A4;;CdCd/ef&)F+q04A1&&(M .r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz     s       2G r{   c                ^   V P                   P                  '       Ed   V P                   P                  p\        V4      V P                   n        V P	                  \
        P                  4      p\        V\        4      '       dA   V P                   P                  '       d
   V^,          MVR,          pV P                  V4      pM+V P                  \        V P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P                  4        V# R# )z+Enable or disable AI pet detection feature.r   Ni)r   r  rm  rq   r  r   r   rj  r   rO  rA   r   rW  s   &&   rx   set_pet_detection$DreameVacuumDevice.set_pet_detection  s    ;;--- KK55M(,WDKK%%%&:&G&GHE%%%(,(A(A(APS..u5..@Y@Y/Z[&)F+q0,9)&&(M .r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz     s      4 4I r{   c                   V P                   P                  '       d   V P                   P                  p\        V4      V P                   n        V P	                  \
        P                  4      p\        V\        4      '       d   R# V P                  \        V P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P                  4        V# R# )z-Enable or disable AI human detection feature.Nr   )r   r  rn  rq   r  r   r   rj  r   rO  rB   r   rW  s   &&   rx   set_human_detection&DreameVacuumDevice.set_human_detection  s    ;;--- KK77M*.w-DKK'%%&:&G&GHE%%%..0@$++B]B]/^_&)F+q0.;+&&(M .r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz     s      t 8M r{   c                ^   V P                   P                  '       Ed   V P                   P                  p\        V4      V P                   n        V P	                  \
        P                  4      p\        V\        4      '       dA   V P                   P                  '       d
   V^,          MVR,          pV P                  V4      pM+V P                  \        V P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P                  4        V# R# )z0Enable or disable AI furnitue detection feature.r   N)r   r  ro  rq   r  r   r   rj  r   rO  rC   r   rW  s   &&   rx   set_furniture_detection*DreameVacuumDevice.set_furniture_detection  s    ;;--- KK;;M.27mDKK+%%&:&G&GHE%%%'+{{'F'F'FUUWZ..u5..0DdkkFeFe/fg&)F+q02?/&&(M .r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz     s      4 4I r{   c                ^   V P                   P                  '       Ed   V P                   P                  p\        V4      V P                   n        V P	                  \
        P                  4      p\        V\        4      '       dA   V P                   P                  '       d
   V^,          MVR,          pV P                  V4      pM+V P                  \        V P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P                  4        V# R# )z-Enable or disable AI fluid detection feature.r   Ni)r   r  rp  rq   r  r   r   rj  r   rO  rD   r   rW  s   &&   rx   set_fluid_detection&DreameVacuumDevice.set_fluid_detection  s    ;;--- KK77M*.w-DKK'%%&:&G&GHE%%%'+{{'B'B'BQS..u5..0@$++B]B]/^_&)F+q0.;+&&(M .r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz     s      D 5J r{   c                ^   V P                   P                  '       Ed   V P                   P                  p\        V4      V P                   n        V P	                  \
        P                  4      p\        V\        4      '       dA   V P                   P                  '       d
   V^,          MVR,          pV P                  V4      pM+V P                  \        V P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P                  4        V# R# )z6Enable or disable AI obstacle picture display feature.r   N)r   r  rq  rq   r  r   r   rj  r   rO  rD   r   rW  s   &&   rx   set_obstacle_picture'DreameVacuumDevice.set_obstacle_picture  s    ;;--- KK88M+/=DKK(%%&:&G&GHE%%%'+{{'C'C'C%RT*..u5..0@$++B^B^/_`&)F+q0/<,&&(M .r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s      4I r{   c                	V   V P                   P                  '       d   V P                  4        V P                  \        P
                  ,          pV P                  P                  VR ,          VR,          \        \        P                  ! VRR7      4      P                  RR4      ^4      # R# )r  r  r  r  r  Nr  )r   r  r   rd   r   r   r   r  ri   r  r  r  )r   rt  r   s   && rx   set_auto_switch_settings+DreameVacuumDevice.set_auto_switch_settings  s    ;;---""$++,@,U,UVG>>..#djjV`6a2b2j2jknpr2suv 	 .r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz     s      d /D r{   c                	p   V P                   P                  '       d   V P                   P                  pV'       d   ^M^ V P                   n        V P                  RRRV P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P	                  4        V# R# )   r1  rz  r2  r   N)r   r  r  rv  r   r   rS  r   r   s   &&  rx   set_fill_light!DreameVacuumDevice.set_fill_light  s    ;;555 KK22M*1QqDKK"22CT[[McMc3deF&)F+q0)6&&&(M 6r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz     s      t 8M r{   c                	p   V P                   P                  '       d   V P                   P                  pV'       d   ^M^ V P                   n        V P                  RRRV P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P	                  4        V# R# )rz  r1  ry  r2  r   N)r   r  r  rv  r   r{  s   &&  rx   set_collision_avoidance*DreameVacuumDevice.set_collision_avoidance  s    ;;555 KK;;M3:aDKK+22CS$++JiJi3jkF&)F+q02?/&&(M 6r{   c                    V ^8  d   QhRRRR/# rR  rv   )rw   s   "rx   ry   rz   %  s      t 0E r{   c                	   V P                   P                  '       d   V P                   P                  pV'       d   ^M^ V P                   n        V P                  RRRV P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P	                  4        V# V P                   P                  pV'       d   ^M^ V P                   n        V P                  \        P                  V P                   P                  4      '       g#   W P                   n        V P	                  4        R# R# )rz  r1  r{  r2  r   FT)r   r  r  rv  r   r  r   r   r{  s   &&  rx   set_auto_drying"DreameVacuumDevice.set_auto_drying%  s    ;;555 KK33M+2aDKK#22CCI`I`3abF&)F+q0*7'&&(M KK33M+2aDKK#$$%9%Q%QSWS^S^SjSjkk*7'&&(r{   c                    V ^8  d   QhRRRR/# )rg   r  r   rt   rv  rv   )rw   s   "rx   ry   rz   7  s      3 ;P r{   c                	Z   V P                   P                  '       d   V P                   P                  pWP                   n        V P                  R RRV P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P	                  4        V# R# )r1  r|  r2  r   N)r   r  r  rv  r   )r   r  r   r   s   &&  rx   set_stain_avoidance&DreameVacuumDevice.set_stain_avoidance7  s    ;;555 KK77M*9KK'22C#t{{OjOj3klF&)F+q0.;+&&(M 6r{   c                    V ^8  d   QhRRRR/# )rg   r  r   rt   rv  rv   )rw   s   "rx   ry   rz   A  s      S 5J r{   c                	Z   V P                   P                  '       d   V P                   P                  pWP                   n        V P                  R RRV P                   P                  /4      pV'       d6   V^ ,          R,          ^ 8w  d!   W P                   n        V P	                  4        V# R# )r1  r}  r2  r   N)r   r  r  rv  r   )r   r  r   r   s   &&  rx   set_mopping_type#DreameVacuumDevice.set_mopping_typeA  s    ;;555 KK44M'3KK$22Cc4;;KcKc3deF&)F+q0+8(&&(M 6r{   c                    V ^8  d   QhRRRR/# )rg   r   r   rt   rv  rv   )rw   s   "rx   ry   rz   K  s     T TC T4I Tr{   c                	   V P                   P                  '       d   V P                  \        P                  4      pVe   \        V4      '       d   ^pM(V P                  \        P                  4      ^8X  d   ^M^ pV P                  \        P                  V4      '       dS   V^8X  d*   V^8X  d#   V P                  \        P                  ^4       R # V P                  \        P                  ^ 4       R # R # R # R # r  )	
capabilitycarpet_recognitionr  r   ra  rq   rU  r  r  )r   r   r   s   && rx   set_carpet_recognition)DreameVacuumDevice.set_carpet_recognitionK  s    ??--- --.B.U.UVM(;;E!%!2!23G3T3T!UYZ!ZA`aE$$%9%L%LeTTzmq&8))*>*K*KQO--.B.O.OQRS	 U ) .r{   c                    V ^8  d   QhRRRR/# )rg   rS  rq   rt   rv   )rw   s   "rx   ry   rz   Y  s     	 	T 	d 	r{   c                	8   V P                  \        P                  \        V4      4      '       dk   V P                  P
                  '       dM   V'       gE   V P                  \        P                  4      ^8X  d!   V P                  \        P                  ^ 4       R# R# )rz  TF)r  r   rg  r   r   r  r  r   )r   rS  s   &&rx   set_multi_map DreameVacuumDevice.set_multi_mapY  sl    1AA3w<PP:::%%&:&R&RSWXX!!"6"N"NPQRr{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz   d  s     

 

2 

r{   c                    V P                   '       d   V P                   P                  4       # V P                  \        P                  R\        \        P                  V P                  4      RR/.4      # )zSend map request action to the device.
Device will upload a new map on cloud after this command if it has a saved map on memory.
Otherwise this action will timeout when device is spot cleaning or a restored map exists on memory.r  r   z{"frame_type":"I"})	r   request_new_mapr  r   rx  r	   r   r   rd   r  s   &rx   request_mapDreameVacuumDevice.request_mapd  sf    
 $$4466**d/::D<Q<QRT[]qrs
 	
r{   c                    V ^8  d   QhRRRR/# r  rv   )rw   s   "rx   ry   rz   p  s      . =R r{   c                (   V P                   '       dF   V P                   P                  ^
4       V P                  4        \        P                  ! 4       V n        V P                  \        P                  R\        \        P                  V P                  4      R\        \        P                  ! VRR7      4      P                  RR4      /.4      pV P                  ^4       V P                   '       d"   V P                   P!                  4        ^ V n        V# )z%Send update map action to the device.r  r   r  r  r  r  )r   r  r   r   r   r  r   ry  r	   r   r   rd   ri   r  r  r  request_next_mapr   )r   rt  r  s   && rx   update_map_data"DreameVacuumDevice.update_map_datap  s    --b1""$%)YY[D"##.. D!5!E!EtG\G\]SJ:!NOWWX[]_`
 	Q..0*+D'r{   c               $    V ^8  d   QhRRRRRR/# )rg   map_idr   map_nameri   rt   rv  rv   )rw   s   "rx   ry   rz     s'     	Q 	Q 	Q 	Q=R 	Qr{   c                "   V P                   P                  '       d   \        R4      hVR8w  da   VP                  RR4      pV P                  '       d&   V P                  P
                  P                  W4       V P                  RVRV///4      # R# )zSet custom name for a mapz1Cannot rename a map when temporary map is presentr  r  -nrismrh   N)r   has_temporary_mapr^   r  r   r  set_map_namer  )r   r  r  s   &&&rx   
rename_mapDreameVacuumDevice.rename_map  s    ;;(((()\]]r>''S1H   !!((55fG''6FH;M2N(OPP	 r{   c               $    V ^8  d   QhRRRRRR/# )rg   r  r   r;  rt   rv  rv   )rw   s   "rx   ry   rz     s'     N Ns Nc N>S Nr{   c                .   V P                   P                  '       d   \        R4      hVej   \        V4      pVR8  g   V^ 8  d   ^ pV P                  '       d&   V P                  P
                  P                  W4       V P                  RVRV///4      # R# )zSet rotation of a mapz1Cannot rotate a map when temporary map is presentNi  smrara)r   r  r^   r   r   r  set_rotationr  )r   r  r;  s   &&&rx   set_map_rotation#DreameVacuumDevice.set_map_rotation  s    ;;(((()\]]8}H#~A   !!((55fG''&4:J1K(LMM  r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     \ \EZ \r{   c           	         V P                   '       d'   V P                   P                  P                  WV4       V P                  RRVRVRV//4      # )z$Set restricted zones on current map.vwlinerectmop)r   r  	set_zonesr  )r   r8  r  no_mopss   &&&&rx   set_restricted_zone&DreameVacuumDevice.set_restricted_zone  sN    $$..uWE##TFE65%QX+Y$Z[[r{   c                    V ^8  d   QhRRRR/# rg   r  r   rt   rv  rv   )rw   s   "rx   ry   rz     s     E E E)> Er{   c                    V P                   P                  '       dM   V P                  '       d&   V P                  P                  P	                  V4       V P                  R/ RV/4      # R# )z>Change currently selected map when multi floor map is enabled.smmapidN)r   r@  r   r  
select_mapr  )r   r  s   &&rx   r  DreameVacuumDevice.select_map  sW    ;;      !!((33F;''r7F(CDD !r{   c                    V ^8  d   QhRRRR/# r  rv   )rw   s   "rx   ry   rz     s     0 0 00E 0r{   c                   V P                   P                  '       d   \        R4      hV P                   P                  '       d   \        R4      hV P                  '       d   V^ 8X  d   RpV P                   P
                  '       dF   V'       g=   V P                  P                  '       d!   V P                  P                  P                  pMV P                  P                  '       dJ   WP                  P                  P                  8X  d&   V P                  P                  P                  4        M%V P                  P                  P                  V4       R/ /pV'       d   WR&   V P                  V4      # )zDelete a map.z1Cannot delete a map when temporary map is presentz+Cannot delete a map while vacuum is runningNcmr  )r   r  r^   r*  r   r@  r!  r  r  
delete_mapr  r   r  rt  s   && rx   r  DreameVacuumDevice.delete_map  s   ;;(((()\]];;()VWW{ {{$$$$"3"3"@"@"@!..;;BBF$$111f@Q@Q@^@^@e@e6e%%,,779%%,,77?BZ
"(w##J//r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     3 3$9 3r{   c                    V P                   P                  '       dJ   V P                  '       d%   V P                  P                  P	                  4        V P                  R^/4      # R# )zAReplace new map with an old one when multi floor map is disabled.cwN)r   r  r   r  save_temporary_mapr  r  s   &rx   r  %DreameVacuumDevice.save_temporary_map  sP    ;;(((   !!((;;=''q	22 )r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s     3 3'< 3r{   c                    V P                   P                  '       dJ   V P                  '       d%   V P                  P                  P	                  4        V P                  R^ /4      # R# )zMDiscard new map when device have reached maximum number of maps it can store.r  N)r   r  r   r  discard_temporary_mapr  r  s   &rx   r  (DreameVacuumDevice.discard_temporary_map  sP    ;;(((   !!((>>@''q	22 )r{   c                    V ^8  d   QhRRRR/# r  rv   )rw   s   "rx   ry   rz     s     4 4C 4;P 4r{   c                <   V P                   P                  '       d   V P                   P                  '       d   \        R4      hV P                  '       d&   V P                  P
                  P                  V4       R^/pV'       d   WR&   V P                  V4      # R# )z]Replace new map with an old one when device have reached maximum number of maps it can store.z5Cannot replace a map when multi floor map is disabledr  r  N)r   r  r@  r^   r   r  replace_temporary_mapr  r  s   && rx   r  (DreameVacuumDevice.replace_temporary_map  s~    ;;((({{$$$,-dee   !!((>>vFJ&,7#''
33 )r{   c               $    V ^8  d   QhRRRRRR/# )rg   r  r   map_urlri   rt   rv  rv   )rw   s   "rx   ry   rz     s"      #  8M r{   c                t   V P                   P                  '       Eg   V P                  '       d[   V P                  P                  P	                  W4       \
        P
                  ! 4       V n        V P                  P                  ^
4       V P                  \        P                  ,          pV P                  P                  VR,          VR,          \        \        P                  ! RVRV/R	R7      4      P!                  RR4      ^4      pV P                  '       d   V P                  P#                  4        V# R# )
z6Replace a map with previously saved version by device.r  r  r  r  r  r  r  Nr  )r   r  r   r  restore_mapr   r   r  rd   r   r   r   r  ri   r  r  r  r  )r   r  r  r   r  s   &&&  rx   r  DreameVacuumDevice.restore_map  s     {{,,,   !!((44VE)-&!!11"5++,@,M,MNG~~22DJJ&)WER\]^ffgjlno	H    !!224O! -r{   c               $    V ^8  d   QhRRRRRR/# )rg   r  r   r1  r  rt   rv  rv   )rw   s   "rx   ry   rz     s"     . .S .I .BW .r{   c                l   V P                   P                  '       d   \        R4      hV'       Ed   VR8X  d   RpV P                  '       d   V'       g\   V P                   P                  '       d>   V P                  P
                  '       d"   V P                  P
                  P                  pM^ pV P                  P                  P                  W4       V'       g(   V P                   P                  '       d   \        R4      hRV^ ,          V^,          ./pV'       d   WR&   V P                  V4      # R# )zMerge segments on a map2Cannot edit segments when temporary map is presentr  NMap ID is requiredmsrr  )
r   r  r^   r   r  r!  r  r  merge_segmentsr  )r   r  r1  r   s   &&& rx   r  !DreameVacuumDevice.merge_segments  s    ;;(((()]^^8|   {{3338I8I8V8V8V!%!2!2!?!?!F!F!"!!((77Idkk:::,-ABBHQK!56D &W''--% r{   c               (    V ^8  d   QhRRRRRRRR/# )rg   r  r   segmentr  r  rt   rv  rv   )rw   s   "rx   ry   rz     s)     . .S .3 .i .La .r{   c                ~   V P                   P                  '       d   \        R4      hV'       Ed   VEe   VR8X  d   RpV P                  '       d   V'       g\   V P                   P                  '       d>   V P                  P
                  '       d"   V P                  P
                  P                  pM^ pV P                  P                  P                  WV4       V'       g(   V P                   P                  '       d   \        R4      hVP                  V4       RV/pV'       d   WR&   V P                  V4      # R# R# )zSplit segments on a mapr  Nr  r  dsridr  )r   r  r^   r   r  r!  r  r  split_segmentsr   r  )r   r  r  r  r   s   &&&& rx   r  !DreameVacuumDevice.split_segments  s    ;;(((()]^^7t'|   {{3338I8I8V8V8V!%!2!2!?!?!F!F!"!!((77Ndkk:::,-ABBKK T?D &W''--' (7r{   c                    V ^8  d   QhRRRR/# )rg   cleaning_sequencer  rt   rv  rv   )rw   s   "rx   ry   rz   -  s     G Gy GEZ Gr{   c                (   V P                   P                  '       d   \        R4      hV P                   P                  '       d   \        R4      hVR8X  g	   V'       g   . pV P                  '       d   V'       dc   V P                   P
                  '       dG   \        V4      \        V P                   P
                  P                  4       4      8w  d   \        R4      hV P                  P                  P                  V4      pV P                  RV/4      # )zlSet cleaning sequence on current map.
Device will use this order even you specify order in segment cleaning.r  z4Cannot set cleaning sequence while vacuum is runningr  z"Invalid size for cleaning sequence
cleanOrder)r   r  r^   r*  r   r1  r~  r.  r_   r  set_cleaning_sequencer  )r   r  s   &&rx   r  (DreameVacuumDevice.set_cleaning_sequence-  s     ;;(((()]^^;;()_``"*; "!KK((()*c$++2F2F2L2L2N.OO+,PQQ $ 1 1 8 8 N NO` a##\3D$EFFr{   c                    V ^8  d   QhRRRR/# )rg   r4  zdict[str, list[int]]rt   rv  rv   )rw   s   "rx   ry   rz   F  s      D D%9 D>S Dr{   c                    V P                   P                  '       d   \        R4      hVe   V P                  RV/4      # R# )Set customized cleaning settings on current map.
Device will use these settings even you pass another setting for custom segment cleaning.r  NcustomeClean)r   r  r^   r  )r   r4  s   &&rx   set_cleansetDreameVacuumDevice.set_cleansetF  sA     ;;(((()]^^''(BCC  r{   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )rg   r  r  r  r  r  rt   rv  rv   )rw   s   "rx   ry   rz   P  s4     $6 $6#$64=$6MV$6hq$6	$6r{   c                2   VR8w  Ed   V'       Ed   VR8w  d   V'       d   VR8w  d   V'       d   VR8w  d   Ve   V P                   P                  pV'       d\   \        VP                  4       4      p\        V4      V8w  g1   \        V4      V8w  g!   \        V4      V8w  g   \        V4      V8w  d   R# . p^ pV F:  p	VP	                  WV,          W8,          ^,           WH,          .4       V^,           pK<  	  V P                  V4      # R# R# R# R# R# R# R# R# )r  r  N)r   r1  r~  r.  r   r  )
r   r  r  r  r  r1  countcustom_cleaningr  r  s
   &&&&&     rx   set_custom_cleaning&DreameVacuumDevice.set_custom_cleaningP  s    "
#""$*{{++HHNN,-
Ou,=)U2<(E1>*n< OE%&&E2L4G!4K^Mbc 	 & $$_55- + %  #  $  r{   c               (    V ^8  d   QhRRRRRRRR/# )rg   r  r   segment_typecustom_nameri   rt   rv  rv   )rw   s   "rx   ry   rz   v  s0     C C3 Cc CPS C_t Cr{   c                    V P                   P                  '       d   \        R4      hV P                  '       dD   V P                  P                  P                  WV4      pV'       d   V P                  RV/4      # R# R# )z'Update name of a segment on current mapz1Cannot edit segment when temporary map is presentnsrN)r   r  r^   r   r  set_segment_namer  )r   r  r  r  segment_infos   &&&& rx   r   #DreameVacuumDevice.set_segment_namev  sl    ;;(((()\]],,33DDZ_jkL++UL,ABB  r{   c               $    V ^8  d   QhRRRRRR/# )rg   r  r   orderrt   rv  rv   )rw   s   "rx   ry   rz     s'     w wC w w@U wr{   c                    V P                   '       dU   V P                  P                  '       g7   V P                  RV P                   P                  P                  W4      /4      # R# R# )z1Update cleaning order of a segment on current mapr  N)r   r   r  r  r  set_segment_order)r   r  r  s   &&&rx   r  $DreameVacuumDevice.set_segment_order  sT    T[[%B%B%B''t7H7H7O7O7a7abl7t(uvv &Cr{   c               $    V ^8  d   QhRRRRRR/# )rg   r  r   r  rt   rv  rv   )rw   s   "rx   ry   rz     s'     t tC t tPe tr{   c                    V P                   '       dS   V P                  P                  '       g5   V P                  V P                   P                  P                  W4      4      # R# R# )z0Update suction level of a segment on current mapN)r   r   r  r  r  set_segment_suction_level)r   r  r  s   &&&rx   r
  ,DreameVacuumDevice.set_segment_suction_level  sO    T[[%B%B%B$$T%6%6%=%=%W%WXb%rss &Cr{   c               $    V ^8  d   QhRRRRRR/# )rg   r  r   r  rt   rv  rv   )rw   s   "rx   ry   rz     s'     r r3 rc rNc rr{   c                
   V P                   P                  '       gg   V P                  '       dS   V P                   P                  '       g5   V P	                  V P                  P
                  P                  W4      4      # R# R# R# )z/Update water volume of a segment on current mapNr   ro  r   r  r  r  set_segment_water_volume)r   r  r  s   &&&rx   r  +DreameVacuumDevice.set_segment_water_volume  se    {{3338I8I8IRVR]R]RoRoRo$$T%6%6%=%=%V%VWa%pqq Sp8I3r{   c               $    V ^8  d   QhRRRRRR/# )rg   r  r   r  rt   rv  rv   )rw   s   "rx   ry   rz     s'     v vs vc vVk vr{   c                
   V P                   P                  '       dg   V P                  '       dS   V P                   P                  '       g5   V P	                  V P                  P
                  P                  W4      4      # R# R# R# )z3Update mop pad humidity of a segment on current mapNr  )r   r  r  s   &&&rx   set_segment_mop_pad_humidity/DreameVacuumDevice.set_segment_mop_pad_humidity  sb    ;;///D4E4E4EdkkNkNkNk$$T%6%6%=%=%V%VWa%tuu Ol4E/r{   c               $    V ^8  d   QhRRRRRR/# )rg   r  r   r  rt   rv  rv   )rw   s   "rx   ry   rz     s'     v vS v# vRg vr{   c                   V P                   P                  '       d   \        R4      hV P                  '       dS   V P                   P                  '       g5   V P                  V P                  P                  P                  W4      4      # R# R# )z2Update cleaning times of a segment on current map.z6Cannot set room cleaning times while vacuum is runningN)r   r*  r^   r   r  r  r  set_segment_cleaning_times)r   r  r  s   &&&rx   r  -DreameVacuumDevice.set_segment_cleaning_times  sk    ;;()abbT[[%B%B%B$$T%6%6%=%=%X%XYc%tuu &Cr{   c                   V ^8  d   QhRR/# rg   rt   r  rv   )rw   s   "rx   ry   rz     s     < <% <r{   c                   \         P                   ! 4       pV P                  '       d5   WP                  ,
          ^<8:  d   ^# WP                  ,
          R8:  d   ^
# ^# V P                  ) ^<8:  g!   V P                  P                  '       d   ^# ^# V P                  P                  '       g   V P                  P
                  '       d!   V P                  P                  '       d   ^# ^# V P                  '       d9   \        V P                  V P                  P                  '       g   ^4      # ^
4      # V P                  P                  '       g   ^# ^
# )z4Dynamic update interval of the device for the timer.i,  )r   r   r   r   rS  r*  r  r   minr  r   rp   rD  s   & rx   r  #DreameVacuumDevice._update_interval  s    iik###666"<1uNfNfHfjmHm"usuu!!!R'***111;;!4!4!4+++122t004>>;V;V;V!__\^__333q;;r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rz     s      e r{   c                   V P                   '       d   \        P                  ! 4       pWP                  ,
          ^x8:  g   WP                  ,
          ^<8:  d=   V P                  P
                  '       g   V P                  P                  '       d   R# ^# V P                  P                  '       d   ^# V P                  P
                  '       d   ^
# ^# R# )z0Dynamic map update interval for the map manager.g      @r  )r   r   r   r   r   rS  r*  r  rD  s   & rx   r  'DreameVacuumDevice._map_update_interval  s     ))+C+++s2c<M<M6MQS6S"kk000DKK4G4G4GsNQN+++1Qt{{7I7I7IQrQ	r{   c                   V ^8  d   QhRR/# rg   rt   ri   rv   )rw   s   "rx   ry   rz     s      c r{   c                    V P                   # )zReturn the name of the device.)r   r  s   &rx   rh   DreameVacuumDevice.name  s     zzr{   c                   V ^8  d   QhRR/# rg   rt   rq   rv   )rw   s   "rx   ry   rz     s     ( ($ (r{   c                .    V P                   P                  # z'Return connection status of the device.)r   r  r  s   &rx   r  #DreameVacuumDevice.device_connected  s     ~~'''r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rz     s     j j jr{   c                    V P                   P                  ;'       dI    V P                   P                  P                  ;'       d!    V P                   P                  P                  # r(  )r   r   r  r  r  s   &rx   r  "DreameVacuumDevice.cloud_connected  sD     ~~##ii(<(<(F(Fii4>>K_K_KiKiir{   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r~   r   r   rj   r   rl   r   rk   )NNNNFNNr  )F)r   r   )r  )v__name__
__module____qualname____firstlineno____doc__r   rd   __annotations__r   re   r   r   r  r  r   r   r   r   r   r   r   r   r   r   r  r   r   r  staticmethodr  r  r  r  r  r   r   r  r  r  r<  r  r  r  r  r  r  r+  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r%  r,  r0  r8  rC  rK  rO  rX  r\  r`  rd  ri  rm  rr  rv  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r
  r  r  r  r   r  r  rh   r  r  __static_attributes__rv   r{   rx   rc   rc   q   s   #C^@^?XN<XN@`iVS $3
Q>Sj%$%
>:f\@|$%
8*    9vP !L('!FRh/	8A%FBH	 Y(YT"[NLH
;:J"9:
;$
LF
P'
RH2IK$444
4
Y$	Y"H      $T	

2	QN )+"b \E06334*.2.4G2D$6LCw
t
r
v
v < <     ( ( j jr{   rc   c                     ] tR tRtRtRtRt]P                  ! 4        U Uu/ uF  w  rWbK	  	  upp t	]
P                  ! 4        U Uu/ uF  w  rWbK	  	  upp t]P                  ! 4        U Uu/ uF  w  rWbK	  	  upp t]P                  ! 4        U Uu/ uF  w  rWbK	  	  upp t]P                  ! 4        U Uu/ uF  w  rWbK	  	  upp t]P                  ! 4        U Uu/ uF  w  rWbK	  	  upp t]P                  ! 4        U Uu/ uF  w  rWbK	  	  upp t]P                  ! 4        U Uu/ uF  w  rWbK	  	  upp tRtRtRtRtRtRtRtRtRt Rt!Rt"Rt#Rt$Rt%Rt&Rt'Rt(Rt)Rt*Rt+Rt,Rt-R t.R t/R R lt0]1R	 R
 l4       t2]1R R l4       t3]1R R l4       t4]1R R l4       t5]1R R l4       t6]1R R l4       t7]1R R l4       t8]1R R l4       t9]1R R l4       t:]1R R l4       t;]1R R l4       t<]1R R  l4       t=]1R! R" l4       t>]1R# R$ l4       t?]1R% R& l4       t@]1R' R( l4       tA]1R) R* l4       tB]1R+ R, l4       tC]1R- R. l4       tD]1R/ R0 l4       tE]1R1 R2 l4       tF]1R3 R4 l4       tG]1R5 R6 l4       tH]1R7 R8 l4       tI]1R9 R: l4       tJ]1R; R< l4       tK]1R= R> l4       tL]1R? R@ l4       tM]1RA RB l4       tN]1RC RD l4       tO]1RE RF l4       tP]1RG RH l4       tQ]1RI RJ l4       tR]1RK RL l4       tS]1RM RN l4       tT]1RO RP l4       tU]1RQ RR l4       tV]1RS RT l4       tW]1RU RV l4       tX]1RW RX l4       tY]1RY RZ l4       tZ]1R[ R\ l4       t[]1R] R^ l4       t\]1R_ R` l4       t]]1Ra Rb l4       t^]1Rc Rd l4       t_]1Re Rf l4       t`]1Rg Rh l4       ta]1Ri Rj l4       tb]1Rk Rl l4       tc]1Rm Rn l4       td]1Ro Rp l4       te]1Rq Rr l4       tf]1Rs Rt l4       tg]1Ru Rv l4       th]1Rw Rx l4       ti]1Ry Rz l4       tj]1R{ R| l4       tk]1R} R~ l4       tl]1R R l4       tm]1R R l4       tn]1R R l4       to]1R R l4       tp]1R R l4       tq]1R R l4       tr]1R R l4       ts]1R R l4       tt]1R R l4       tu]1R R l4       tv]1R R l4       tw]1R R l4       tx]1R R l4       ty]1R R l4       tz]1R R l4       t{]1R R l4       t|]1R R l4       t}]1R R l4       t~]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       t]1R R l4       tRtR# u upp i u upp i u upp i u upp i u upp i u upp i u upp i u upp i )r   i  a?  Helper class for device status and int enum type properties.
This class is used for determining various states of the device by its properties.
Determined states are used by multiple validation and rendering condition checks.
Almost of the rules are extracted from mobile app that has a similar class with same purpose.NFc                	    Wn         R # r  )_device)r   devices   &&rx   r   !DreameVacuumDeviceStatus.__init__  s    r{   c                	   \        V P                  \        P                  4      R J 4      V n        \        V P                  \        P
                  4      R J4      V n        \        V P                  \        P                  4      R J4      V n        \        V P                  \        P                  4      R J4      V n
        \        V P                  \        P                  4      R J4      V n        \        V P                  \        P                  4      R J4      V n        \        V P                  ;'       d    V P                  ;'       gB    V P                  P                   ;'       d$    RV P                  P                   P"                  9   4      V n        V P                  '       d   V P$                  '       g
   ^V n        R # V P                  '       d
   ^ V n        R # ^V n        R # )Nr2216)rq   _get_propertyr   rm  r  r   r  r   ro  rK  auto_empty_base_availabler   customized_cleaning_availabler   r  r7  r   r  r,  r6  r  s   &rx   r   1DreameVacuumDeviceStatus.update_static_properties  s    $T%7%78L8W8W%X\`%` a&*4+=+=>R>_>_+`hl+l&m#(,3IIJRVV)
% *.d.@.@AUAeAe.fnr.r)s&-13GGHPTT.
* /33HHIQUU/
+ *.**MMt/M/M J J!!HHg1B1B1H1H&H*
& ,,,T5S5S5S  	 +++ 	 23 	r{   c                    V ^8  d   QhRRRR/# r  rv   )rw   s   "rx   ry   %DreameVacuumDeviceStatus.__annotate__	  s     / /"6 /3 /r{   c                8    V P                   P                  V4      # )z4Helper function for accessing a property from device)r7  r  r  s   &&rx   r<  &DreameVacuumDeviceStatus._get_property	  s    ||((..r{   c                   V ^8  d   QhRR/# )rg   rt   z DreameMapVacuumMapManager | Nonerv   )rw   s   "rx   ry   rA  	  s     ) )> )r{   c                .    V P                   P                  # )z5Helper property for accessing map manager from device)r7  r   r  s   &rx   r   %DreameVacuumDeviceStatus._map_manager	  s     ||(((r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  	  s     - -4 -r{   c                .    V P                   P                  # )z6Helper property for accessing device connection status)r7  r  r  s   &rx   _device_connected*DreameVacuumDeviceStatus._device_connected	  s     ||,,,r{   c                   V ^8  d   QhRR/# rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     F Fs Fr{   c                @    V P                  \        P                  4      # )z#Return battery level of the device.)r<  r   rH  r  s   &rx   r  &DreameVacuumDeviceStatus.battery_level	  s     !!"6"D"DEEr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     0 07 0r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )z#Return suction level of the device.zSUCTION_LEVEL not supported: %s)r<  r   r  r   r7  r   r  r  r   r   s   & rx   r  &DreameVacuumDeviceStatus.suction_level	  sU     ""#7#E#EF*B*U*U!U+E227?'///r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  %	       Q QC Qr{   c                L    \         P                  ! V P                  \        4      # )z/Return suction level as string for translation.)r)   r   r  r'   r  s   &rx   suction_level_name+DreameVacuumDeviceStatus.suction_level_name$	       *--d.@.@-PPr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  *	  s     / /5 /r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )z"Return water volume of the device.zWATER_VOLUME not supported: %s)r<  r   rp  r   r7  r   r  r  rQ  s   & rx   r  %DreameVacuumDeviceStatus.water_volume)	  sU     ""#7#D#DE*A*T*T!T*5116>&...r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  3	  s     O O3 Or{   c                L    \         P                  ! V P                  \        4      # )z.Return water volume as string for translation.)r*   r   r  r'   r  s   &rx   water_volume_name*DreameVacuumDeviceStatus.water_volume_name2	  s     ),,T->->NNr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  8	  s     	: 	:"< 	:r{   c                l   V P                   '       d   \        P                  V P                  \        P
                  4      4      pV'       df   \        V4      ^8X  dT   V^,          pVe!   V\        P                  9   d   \        V4      # \        P                  RV4       \        P                  # R# R# R# )z&Return mop pad humidity of the device.Nz"MOP_PAD_HUMIDITY not supported: %s)ro  rc   r  r<  r   r&  r~  r   r7  r   r  r  r   r  r   s   &  rx   r  )DreameVacuumDeviceStatus.mop_pad_humidity7	  s     ((('99$:L:LMaMoMo:pqF#f+*q	$2L2_2_)_5e<<BEJ1999 +v )r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  D	  s     W Ws Wr{   c                L    \         P                  ! V P                  \        4      # )z2Return mop pad humidity as string for translation.)r+   r   r  r'   r  s   &rx   mop_pad_humidity_name.DreameVacuumDeviceStatus.mop_pad_humidity_nameC	  s     -001F1FVVr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  I	  s     "0 "07 "0r{   c                   V P                  \        P                  4      pV P                  '       d   \        P                  WP                  4      pV'       d   \        V4      ^8X  d   V P                  '       gQ   V P                  '       g   \        P                  # V^ ,          ^8X  d   \        P                  # \        P                  # V^ ,          ^8X  d   \        P                  # V^ ,          ^ 8X  d   \        P                  # V^ ,          pM@V P                  '       d/   V^8X  d   \        P                  # V^ 8X  d   \        P                  # Vf3   V P                  '       d   \        P                  # \        P                  # V\        P                  9   d   \        V4      # \        P                  RV4       \        P                   # )z#Return cleaning mode of the device.zCLEANING_MODE not supported: %s)r<  r   r&  ro  rc   r  r,  r~  r(  r   r   r   r  r7  r   r  r  )r   r   r  s   &  rx   r   &DreameVacuumDeviceStatus.cleaning_modeH	  sf    ""#7#E#EF((('99%A_A_`F#f+*555;;;7@@@ayA~7???3HHHayA~7@@@ayA~7LLL"1IE+++z/888z/DDD= 333 )== .66 ,???+E227?'///r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  n	  rT  r{   c                L    \         P                  ! V P                  \        4      # )z/Return cleaning mode as string for translation.)r,   r   r   r'   r  s   &rx   cleaning_mode_name+DreameVacuumDeviceStatus.cleaning_mode_namem	  rX  r{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  s	  s     * ** *r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )zReturn status of the device.zSTATUS not supported: %s)r<  r   r   r   r7  r   r  r  rQ  s   & rx   r   DreameVacuumDeviceStatus.statusr	  sU     ""#7#>#>?*<*O*O!O%e,,0%8!)))r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  |	  s     C CS Cr{   c                L    \         P                  ! V P                  \        4      # )z(Return status as string for translation.)r6   r   r   r'   r  s   &rx   status_name$DreameVacuumDeviceStatus.status_name{	  s     #&&t{{MBBr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     . .3 .r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )z!Return task status of the device.zTASK_STATUS not supported: %s)r<  r   r   r   r7  r   r  r  rQ  s   & rx   r   $DreameVacuumDeviceStatus.task_status	  sU     ""#7#C#CD*@*S*S!S)%005u=%---r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  	  s     M M# Mr{   c                L    \         P                  ! V P                  \        4      # )z-Return task status as string for translation.)r2   r   r   r'   r  s   &rx   task_status_name)DreameVacuumDeviceStatus.task_status_name	  s     (++D,<,<mLLr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     - -1 -r{   c                0   V P                  \        P                  4      pVeO   V^8X  d   \        P                  # V^8X  d   \        P
                  # V\        P                  9   d   \        V4      # \        P                  RV4       \        P                  # )z Return water tank of the device.zWATER_TANK not supported: %s)
r<  r   r   r   	INSTALLEDMOP_INSTALLEDr7  r   r  r  rQ  s   & rx   r  #DreameVacuumDeviceStatus.water_tank	  s|     ""#7#B#BCz,666z,:::-@@@,U334e<$,,,r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  	  s     K K Kr{   c                L    \         P                  ! V P                  \        4      # )z,Return water tank as string for translation.)r7   r   r  r'   r  s   &rx   water_tank_name(DreameVacuumDeviceStatus.water_tank_name	  s     '**4??MJJr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     
2 
2!; 
2r{   c                B   V P                  \        P                  4      pVeX   V\        P                  9   dC   \        V4      pV\        P
                  J d"   V P                  ^d8X  d   \        P                  # V# \        P                  RV4       \        P                  # )z%Return charging status of the device.z!CHARGING_STATUS not supported: %s)r<  r   r   r   r7  r`  r  CHARGING_COMPLETEDr   r  r  rQ  s   & rx   charging_status(DreameVacuumDeviceStatus.charging_status	  s     ""#7#G#GH*D*W*W!W.u5E2;;;@R@RVY@Y1DDDL95A)111r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  	  s     U Uc Ur{   c                L    \         P                  ! V P                  \        4      # )z1Return charging status as string for translation.)r.   r   r  r'   r  s   &rx   charging_status_name-DreameVacuumDeviceStatus.charging_status_name	  s     ,//0D0DmTTr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     3 3#> 3r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )z'Return auto empty status of the device.z#AUTO_EMPTY_STATUS not supported: %s)r<  r   rL  r   r7  r   r  r  rQ  s   & rx   auto_empty_status*DreameVacuumDeviceStatus.auto_empty_status	  sU     ""#7#I#IJ*E*X*X!X.u55;UC*222r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  	  s     T T Tr{   c                L    \         P                  ! V P                  \        4      # )z3Return auto empty status as string for translation.)r1   r   r  r'   r  s   &rx   auto_empty_status_name/DreameVacuumDeviceStatus.auto_empty_status_name	  s     ),,T-C-C]SSr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     4 4#? 4r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )z'Return relocation status of the device.z#RELOCATION_STATUS not supported: %s)r<  r   rJ  r   r7  r   r  r  rQ  s   & rx   relocation_status*DreameVacuumDeviceStatus.relocation_status	  sU     ""#7#I#IJ*F*Y*Y!Y/66;UC+333r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  	  s     Y Y Yr{   c                L    \         P                  ! V P                  \        4      # )z3Return relocation status as string for translation.)r/   r   r  r'   r  s   &rx   relocation_status_name/DreameVacuumDeviceStatus.relocation_status_name	  s     .11$2H2H-XXr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     6 6'E 6r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )z+Return self-wash base status of the device.z'SELF_WASH_BASE_STATUS not supported: %s)r<  r   r   r   r7  r   r  r  rQ  s   & rx   self_wash_base_status.DreameVacuumDeviceStatus.self_wash_base_status	  sU     ""#7#M#MN*H*[*[![1%88?G-555r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  	  s     \ \C \r{   c                L    \         P                  ! V P                  \        4      # )z7Return self-wash base status as string for translation.)r0   r   r  r'   r  s   &rx   self_wash_base_status_name3DreameVacuumDeviceStatus.self_wash_base_status_name	  s     -001K1K][[r{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     2 2!; 2r{   c                	    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )Nz!DUST_COLLECTION not supported: %s)r<  r   rK  r   r7  r   r  r  rQ  s   & rx   dust_collection(DreameVacuumDeviceStatus.dust_collection	  sS    ""#7#G#GH*D*W*W!W-e4495A)111r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  	       P Pc Pr{   c                L    \         P                  ! V P                  \        4      # )z1Return dust collection as string for translation.)r8   r   r  r'   r  s   &rx   dust_collection_name-DreameVacuumDeviceStatus.dust_collection_name	       '**4+?+?OOr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     5 5$A 5r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )z(Return carpet sensitivity of the device.z$CARPET_SENSITIVITY not supported: %s)r<  r   r_  r   r7  r   r  r  rQ  s   & rx   carpet_sensitivity+DreameVacuumDeviceStatus.carpet_sensitivity	  sU     ""#7#J#JK*G*Z*Z!Z077<eD,444r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  	  s     [ [ [r{   c                L    \         P                  ! V P                  \        4      # )z4Return carpet sensitivity as string for translation.)r-   r   r  r'   r  s   &rx   carpet_sensitivity_name0DreameVacuumDeviceStatus.carpet_sensitivity_name	  s     /2243J3JMZZr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  	  s     ) )( )r{   c                   V P                  \        P                  4      pVEe$   V\        P                  9   Ed   \        V4      pV\        P
                  J d   V P                  '       g%   V P                  '       g   V P                  '       d   \        P                  # V P                  '       d   V P                  '       d   \        P                  # V P                  '       d   \        P                  # V P                  '       d   \        P                   # V P"                  \$        P&                  J d   \        P&                  # V# \(        P+                  RV4       \        P,                  # )zReturn state of the device.zSTATE not supported: %s)r<  r   r  r   r7  r  r*  cleaning_pausedr  r  r  r$  WASHINGr+  DRYINGchargingr`  r  r   r  r   r  r  )r   r   vacuum_states   &  rx   r  DreameVacuumDeviceStatus.state	  s    ""#7#=#=>*;*N*N!N,U3L 0555<<<4#7#7#74;S;S;S,333[[[ |||0888{{{0777}}}0999++/I/\/\\0CCC/7 (((r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  
  s     B BC Br{   c                L    \         P                  ! V P                  \        4      # )z'Return state as string for translation.)r3   r   r  r'   r  s   &rx   
state_name#DreameVacuumDeviceStatus.state_name
  s     #&&tzz=AAr{   c                   V ^8  d   QhRR/# rg   rt   r   rv   )rw   s   "rx   ry   rA  
  s     	9 	9!: 	9r{   c                l   V P                   '       d   \        P                  V P                  \        P
                  4      4      pV'       df   \        V4      ^8X  dT   V^,          pVe!   V\        P                  9   d   \        V4      # \        P                  RV4       \        P                  # R# R# R# )z%Return self-clean area of the device.Nz!SELF_CLEAN_AREA not supported: %s)ro  rc   r  r<  r   r&  r~  r   r7  r   r  r  rb  s   &  rx   r  (DreameVacuumDeviceStatus.self_clean_area
  s     ((('99$:L:LMaMoMo:pqF#f+*q	$2K2^2^)^4U;;A5I0888 +v )r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  %
  r  r{   c                L    \         P                  ! V P                  \        4      # )z1Return self-clean area as string for translation.)r9   r   r  r'   r  s   &rx   self_clean_area_name-DreameVacuumDeviceStatus.self_clean_area_name$
  r  r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rA  *
  s     4 4 9 4r{   c                    V P                   '       dj   V P                  \        P                  4      pVe!   V\        P
                  9   d   \	        V4      # \        P                  RV4       \        P                  # R# )z$Return mop wash level of the device.Nz MOP_WASH_LEVEL not supported: %s)	ro  r<  r   r]  r   r7  r   r  r  rQ  s   & rx   mop_wash_level'DreameVacuumDeviceStatus.mop_wash_level)
  sf     (((&&';'J'JKE U.F.Y.Y%Y/66MM<eD+333 )r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  4
  s     N NS Nr{   c                L    \         P                  ! V P                  \        4      # )z0Return mop wash level as string for translation.)r:   r   r  r'   r  s   &rx   mop_wash_level_name,DreameVacuumDeviceStatus.mop_wash_level_name3
  s     &))$*=*=}MMr{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  9
  s      3 r{   c                    V P                   eN   V P                   \        P                  9   d/   \        P                  ! \        V P                   4      \
        4      # \
        # )z-Return moping type as string for translation.)r  r    r7  r;   r   r'   r  s   &rx   mopping_type_name*DreameVacuumDeviceStatus.mopping_type_name8
  sJ     (T->->BYBlBl-l'++,CDDUDU,VXeffr{   c                   V ^8  d   QhRR/# )rg   rt   r   rv   )rw   s   "rx   ry   rA  @
  s     - -, -r{   c                    V P                  \        P                  4      pVe!   V\        P                  9   d   \        V4      # \
        P                  RV4       \        P                  # )zReturn error of the device.zERROR_CODE not supported: %s)r<  r   r   r   r7  r   r  r  rQ  s   & rx   r  DreameVacuumDeviceStatus.error?
  sU     ""#7#=#=>*?*R*R!R(//4e<$,,,r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  I
  s     G GC Gr{   c                L    \         P                  ! V P                  \        4      # )z'Return error as string for translation.)r4   r   r  r'   r  s   &rx   
error_name#DreameVacuumDeviceStatus.error_nameH
  s     (++DJJFFr{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  N
  s     T T3 Tr{   c                P    \         P                  ! V P                  \        R.4      # )z'Return error description of the device.r  )r5   r   r  r'   r  s   &rx   error_description*DreameVacuumDeviceStatus.error_descriptionM
  s      /224::r?RSSr{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  S
  s     N NS Nr{   c                    V P                   '       g   R# \        P                  ! \        P                  ! V P                  ^4      4      # )z2Return error image of the device as base64 string.N)	has_errorr\   r   r<   r  r  s   &rx   error_image$DreameVacuumDeviceStatus.error_imageR
  s1     ~~~8<<TZZLMMr{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  Z
  s      c r{   c                   V P                   '       d'   V P                  '       g   V P                  '       g   ^# V P                  '       d_   V P                  '       g%   V P
                  '       g   V P                  '       d)   V P                  '       g   V P                  '       d   ^# ^# V P                  '       d   ^# V P                  '       g   V P                  '       d   V P                  '       d   ^# ^# V P                  '       d   ^# ^ # )z'Device status for robot icon rendering.)r  	returningrB  ro  r$  r+  r  r  r6  r  sleepingr  s   &rx   robot_status%DreameVacuumDeviceStatus.robot_statusY
  s     <<<t7H7H7H***tObObOb~~~!1!1!1]]]^^^t///}}}]]]r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  n
  s     m m4 mr{   c                    V P                   p\        VP                  ^ 8  ;'       d-    V P                  '       * ;'       d    V\        P
                  8g  4      # )z&Returns true when an error is present.)r  rq   r   r6  r   BATTERY_LOWr   r  s   & rx   r  "DreameVacuumDeviceStatus.has_errorm
  sE     

EKK!OkkD,<,<(<kkJ_JkJkAkllr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  t
  s     
 
T 
r{   c                   V P                   p\        VP                  ^ 8  ;'       d    V\        P                  8H  ;'       g    V\        P
                  8H  ;'       g    V\        P                  8H  ;'       ge    V\        P                  8H  ;'       gJ    V\        P                  8H  ;'       g/    V\        P                  8H  ;'       g    V\        P                  8H  4      # )zAReturns true when a warning is present and available for dismiss.)r  rq   r   r   
REMOVE_MOPMOP_REMOVED_2CLEAN_MOP_PADBLOCKEDWATER_TANK_DRYMOP_PAD_STOP_ROTATEMOP_PAD_STOP_ROTATE_2r  s   & rx   r6  $DreameVacuumDeviceStatus.has_warnings
  s     

KK!O 	 	.999 H H1???H H1???H H 1999H H 1@@@	H H
 1EEEH H 1GGG
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     N N4 Nr{   c                R    \        V P                  \        P                  4      4      # )z>Returns true when robot is docked and can start auto emptying.)rq   r<  r   rK  r  s   &rx   dust_collection_available2DreameVacuumDeviceStatus.dust_collection_available
  !     D&&';'K'KLMMr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     N ND Nr{   c                	X    \        V P                  \        P                  4      ^8H  4      # rz  )rq   r<  r   rb  r  s   &rx   
self_clean#DreameVacuumDeviceStatus.self_clean
  s$    D&&';'F'FG1LMMr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     S S Sr{   c                	X    \        V P                  \        P                  4      ^8H  4      # r  )rq   r<  r   rO  r  s   &rx   scheduled_clean(DreameVacuumDeviceStatus.scheduled_clean
  s%    D&&';'K'KLPQQRRr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     R RD Rr{   c                	X    \        V P                  \        P                  4      ^8H  4      # r  )rq   r<  r   r   r  s   &rx   r'  #DreameVacuumDeviceStatus.auto_mount
  s$    D&&';'J'JKqPQQr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     # #t #r{   c                *   V P                   '       Ed   V P                  pV P                  pV'       Ed_   V'       EdV   VP                  R4      p\	        V4      ^8X  Ed2   \
        P                  ! 4       pVP                  pVP                  pV^
8  d   RV 2p\        V V 24      p\        VP                  RR4      4      p\        VP                  RR4      4      p	VR,          \        V4      ^<,          ,           p
\        V^ ,          4      R,          \        V^,          4      ^<,          ,           pW8  d   W8  d   Wy8  g-   W8  d   RV8  d   Wx8  g   W8  d   V^ 8  g   Wx8X  g   Wy8X  d   W8  d   VR,           V
,
          # W,
          # ^ # R# )z/Returns remaining seconds to DND period to end.r  0r  i  i`	  iQ N)r  r  r  r  r~  r   r  hourminuter   r  )r   r  r  end_timer  r  r  r   r  endcurrent_secondsend_secondss   &           rx   dnd_remaining&DreameVacuumDeviceStatus.dnd_remaining
  sW    IllGyWW"==-x=A%",,.C88D ZZF{#$VH$x01D	 1 1#r :;Egooc267C&*TkCK"4D&DO"%hqk"2T"9C<Lr<Q"QK !L J;!D[T\SZDSTH=;  /< )50?B #."?
 r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     x xT xr{   c                    V P                   p\        V\        P                  J ;'       g    V\        P                  J 4      # )zJReturns true when water tank or additional mop is installed to the device.)r  rq   r   r  r  )r   r  s   & rx   r(  4DreameVacuumDeviceStatus.water_tank_or_mop_installed
  s8     __
J"7"A"AAvvZShSvSvEvwwr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     
 
 
r{   c                    V P                   p\        V\        P                  J ;'       g    V\        P                  J 4      # )z:Returns true when robot knows its position on current map.)r  rq   r   LOCATEDr  )r   r  s   & rx   located DreameVacuumDeviceStatus.located
  sG     !22!=!E!EE I I $@$H$HH
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     
 
$ 
r{   c                    V P                   p\        V\        P                  J;'       d    V\        P                  J4      # )zRReturns true when cleaning mode is sweeping therefore cannot set its water volume.)r   rq   r   r   r  )r   r   s   & rx   r-  !DreameVacuumDeviceStatus.sweeping
  sF     **!9!A!AA S S%=%R%RR
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     L L Lr{   c                L    \        V P                  \        P                  J 4      # )zRReturns true when cleaning mode is mopping therefore cannot set its suction level.)rq   r   r   r   r  s   &rx   mopping DreameVacuumDeviceStatus.mopping
  s!     D&&*B*J*JJKKr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
       
 
t 
r{   c                <   V P                   p\        V P                  ;'       du    V P                  ;'       da    V\        P
                  J ;'       gG    V\        P                  J ;'       g-    V\        P                  J ;'       g    V\        P                  J 4      # )zFReturns true when device is currently performing a zone cleaning task.)	r   rq   rI  r*  r   r;  ZONE_CLEANING_PAUSEDZONE_MOPPING_PAUSEDZONE_DOCKING_PAUSEDr   r   s   & rx   r)  &DreameVacuumDeviceStatus.zone_cleaning
       &&""    5CCC M M"8"M"MMM M"8"L"LLM M "8"L"LL	
 		
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     
 
t 
r{   c                   V P                   p\        V P                  ;'       de    V P                  ;'       dQ    V\        P
                  J ;'       g7    V\        P                  J ;'       g    V P                  \        P
                  J 4      # )zFReturns true when device is currently performing a spot cleaning task.)	r   rq   rI  r*  r   r=  SPOT_CLEANING_PAUSEDr   r   r/  s   & rx   r,  &DreameVacuumDeviceStatus.spot_cleaning
  s     &&""    5CCC C C"8"M"MMC C;;"4"B"BB
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  
  s     
 
$ 
r{   c                <   V P                   p\        V P                  ;'       du    V P                  ;'       da    V\        P
                  J ;'       gG    V\        P                  J ;'       g-    V\        P                  J ;'       g    V\        P                  J 4      # )zPReturns true when device is currently performing a custom segment cleaning task.)	r   rq   rI  r*  r   r<  SEGMENT_CLEANING_PAUSEDSEGMENT_MOPPING_PAUSEDSEGMENT_DOCKING_PAUSEDr/  s   & rx   r.  )DreameVacuumDeviceStatus.segment_cleaning
  s     &&""    5FFF P P"8"P"PPP P"8"O"OOP P "8"O"OO	
 		
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    r*  r{   c                <   V P                   p\        V P                  ;'       du    V P                  ;'       da    V\        P
                  J ;'       gG    V\        P                  J ;'       g-    V\        P                  J ;'       g    V\        P                  J 4      # )zNReturns true when device is currently performing a complete map cleaning task.)	r   rq   rI  r*  r   r:  AUTO_CLEANING_PAUSEDAUTO_MOPPING_PAUSEDAUTO_DOCKING_PAUSEDr/  s   & rx   auto_cleaning&DreameVacuumDeviceStatus.auto_cleaning  r1  r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     	
 	
d 	
r{   c                    \        V P                  ;'       dU    V P                  \        P                  J ;'       g1    V P
                  \        P                  J ;'       g    V P                  4      # )z/Returns true when device is creating a new map.)rq   rI  r   r   r?  r   r   r  r  s   &rx   rB  %DreameVacuumDeviceStatus.fast_mapping  si     ""    $:$G$GG , ,;;"4"A"AA, ,++
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA     s     
 
T 
r{   c                h   V P                  \        P                  4      pV P                  p\	        V\
        P                  8H  ;'       g    V\
        P                  8H  ;'       dJ    V\        P                  8H  ;'       g/    V\        P                  8H  ;'       g    V\        P                  8H  4      # )zReturns true when creating a new map paused by user.
Used for resuming fast cleaning on start because standard start action can not be used for resuming fast mapping.
)r<  r   r  r   rq   r   r?  MAP_CLEANING_PAUSEDr   r  r   r  )r   r  r   s   &  rx   r  ,DreameVacuumDeviceStatus.fast_mapping_paused  s     ""#7#=#=>&&5BBB M M"8"L"LL 
 *111 3 3-3333 3-222

 
	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  4  s        $  r{   c                \    V P                  \        P                  4      p\        V^8H  4      # )z6Returns true when carpet avoidance feature is enabled.)r<  r   rZ  rq   rQ  s   & rx   carpet_avoidance)DreameVacuumDeviceStatus.carpet_avoidance3  s*     ""#7#H#HIEQJr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  :  s     . .D .r{   c                v    V P                  \        P                  4      p\        V^8H  ;'       g    V^8H  4      # )z8Returns true when auto-add detergent feature is enabled.)r<  r   rY  rq   rQ  s   & rx   auto_add_detergent+DreameVacuumDeviceStatus.auto_add_detergent9  s6     ""#7#J#JKEQJ,,%1*--r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  @  s     N N Nr{   c                R    \        V P                  \        P                  4      4      # )zlReturns true when device battery is too low for resuming its task and needs to be charged before continuing.)rq   r<  r   rM  r  s   &rx   r  (DreameVacuumDeviceStatus.cleaning_paused?  r  r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  E  s     Q Q$ Qr{   c                L    \        V P                  \        P                  J 4      # )z/Returns true when device is currently charging.)rq   r  r   r`  r  s   &rx   r  !DreameVacuumDeviceStatus.chargingD  s!     D((,F,O,OOPPr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  J  s     
 
 
r{   c                    \        V P                  ;'       gY    V P                  \        P                  J ;'       g5    V P
                  ;'       g!    V P                  ;'       g    V P                  4      # )z#Returns true when device is docked.)rq   r  r  r   r  r$  r+  r  r  s   &rx   r  DreameVacuumDeviceStatus.dockedI  sp     MM # ###'A'T'TT# #||# # {{# # ""
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  U  s     @ @$ @r{   c                L    \        V P                  \        P                  J 4      # )z%Returns true when device is sleeping.)rq   r   r   rB  r  s   &rx   r  !DreameVacuumDeviceStatus.sleepingT  s     DKK#5#>#>>??r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  Z  s     	
 	
$ 	
r{   c                   V P                   p\        V P                  ;'       d    V\        P                  J ;'       gG    V\        P
                  J ;'       g-    V\        P                  J ;'       g    V\        P                  J 4      # )z.Returns true when returning to dock is paused.)r   rq   rI  r   DOCKING_PAUSEDr@  r:  r.  r/  s   & rx   returning_paused)DreameVacuumDeviceStatus.returning_pausedY  s     &&"" E E5DDDI I4HHHI I 4KKKI I 4HHH
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  f  s     x x4 xr{   c                    \        V P                  ;'       d1    V P                  \        P                  J ;'       g    V P
                  4      # )z<Returns true when returning to dock for charging or washing.)rq   rI  r   r   ra  returning_to_washr  s   &rx   r  "DreameVacuumDeviceStatus.returninge  s<     D**vv?Q?[?[0[0u0u_c_u_uwwr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  k  s     b b br{   c                v    \        V P                  \        P                  8g  ;'       g    V P                  4      # )zReturns true when device has an active task.
Used for preventing updates on settings that relates to currently performing task.)rq   r   r   r   r  r  s   &rx   r*   DreameVacuumDeviceStatus.startedj  s/     D$$(>(H(HH``DL`L`aar{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  q  s     
 
 
r{   c                @   V P                   p\        V P                  ;'       dk    V\        P                  J ;'       g]    V\        P
                  J  ;'       gB    V\        P                  J  ;'       g'    V\        P                  J ;'       g    V P                  4      # )z3Returns true when device has an active paused task.)	r   rq   r*  r   r  rB  r  r  r  r   r   s   & rx   r  DreameVacuumDeviceStatus.pausedp  s     LL  ,333$8/8888$8/4448$8 /777$ $ ##	
 		
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     I I Ir{   c                b    V P                   \        P                  J ;'       g    V P                  # )z3Returns true when device is moving or not sleeping.)r   r   r  r  r  s   &rx   rS  DreameVacuumDeviceStatus.active  s&     {{0888HHDLLHr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     
 
 
r{   c                   V P                   p\        V P                  '       * ;'       EdM    V\        P                  J ;'       Eg2    V\        P
                  J ;'       Eg    V\        P                  J ;'       g    V\        P                  J ;'       g    V\        P                  J ;'       g    V\        P                  J ;'       g    V\        P                  J ;'       g    V\        P                  J ;'       g{    V\        P                  J ;'       ga    V\        P                  J ;'       gG    V\        P                  J ;'       g-    V\        P                  J ;'       g    V\        P                  J 4      # )z#Returns true when device is moving.)r   rq   r  r   r  ra  PART_CLEANINGFOLLOW_WALLr   r<  r;  r=  r?  MONITOR_CRUISEMONITOR_SPOTSUMMON_CLEANrl  s   & rx   r   DreameVacuumDeviceStatus.running  s|    O  ,555 = =/999= =/==== = /;;;= = />>>	= =
 /@@@= = /==== = /==== = /==== = /<<<= = />>>= = /<<<= = /<<<
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     R Rt Rr{   c                L    \        V P                  \        P                  J 4      # )z*Returns true when device is auto emptying.)rq   r  r   ACTIVEr  s   &rx   auto_emptying&DreameVacuumDeviceStatus.auto_emptying  s!     D**.I.P.PPQQr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     Y YT Yr{   c                L    \        V P                  \        P                  J 4      # )zEReturns true when auto emptying is not performed due to DND settings.)rq   r  r   NOT_PERFORMEDr  s   &rx   auto_emptying_not_performed4DreameVacuumDeviceStatus.auto_emptying_not_performed  s!     D**.I.W.WWXXr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     i iT ir{   c                z    \        V P                  \        P                  4      ;'       d    V P                  4      # )z9Returns true when customized cleaning feature is enabled.)rq   r<  r   r   has_saved_mapr  s   &rx   r3  ,DreameVacuumDeviceStatus.customized_cleaning  s0     D&&';'O'OPggUYUgUghhr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     N N4 Nr{   c                R    \        V P                  \        P                  4      4      # )z5Returns true when multi floor map feature is enabled.)rq   r<  r   rg  r  s   &rx   r@  "DreameVacuumDeviceStatus.multi_map  r  r{   c                   V ^8  d   QhRR/# )rg   rt   zdatetime | Nonerv   )rw   s   "rx   ry   rA    s     , ,O ,r{   c                	B    V P                   '       d   V P                  # R # r  )r  r  r  s   &rx   last_cleaning_time+DreameVacuumDeviceStatus.last_cleaning_time  s    !!!+++ "r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rA    s      "7 r{   c                   V P                   '       Ed   / pV P                    EF  p\        P                  ! R\        P                  ! VP                  P                  4       4      4      p\        VP                   R2\        VP                   R2/W&   VP                  eQ   \        P                  ! VP                  \        4      P                  RR4      P                  4       W,          \         &   VP"                  eQ   \$        P                  ! VP"                  \        4      P                  RR4      P                  4       W,          \&        &   VP(                  e   VP(                  W,          \*        &   VP,                  f   EKe  \.        P                  ! VP,                  \        4      P                  RR4      P                  4       W,          \0        &   EK  	  V# R# )z*Returns the cleaning history list as dict.z%Y-%m-%d %H:%M:%Sz minu    m²N_r  )r  r   strftime	localtimer  	timestamprX   r  rY   r  r   r6   r   r'   r  
capitalizerS   r  r)   rU   r  rW   r  r7   rV   )r   r  r  r  s   &   rx   r  )DreameVacuumDeviceStatus.cleaning_history  su    !!!D11}}%8$..I_I_Ia:bc&7+@+@*A(F%'*>*>)?t'D
 >>-+//NVVWZ\_`kkm J{+ ((4266w7L7Lm\ c*# J12
 $$0181B1BDJ~.%%1/33G4F4FV^^_bdghssu J/' 2, K1 "r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     
 
 
r{   c                    \        V P                  ;'       dA    V P                  \        P                  J ;'       g    V P                  \        P
                  J 4      # )zAReturns true the when device is currently performing mop washing.)rq   ro  r  r   r  CLEAN_ADD_WATERr  s   &rx   r$   DreameVacuumDeviceStatus.washing  sZ     ))  **.L.T.TT ` `--1O1_1__	
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     
 
 
r{   c                t    \        V P                  ;'       d    V P                  \        P                  J 4      # )z@Returns true the when device is currently performing mop drying.)rq   ro  r  r   r  r  s   &rx   r+  DreameVacuumDeviceStatus.drying  4     ))qqd.H.HLjLqLq.q
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     
 
 
r{   c                t    \        V P                  ;'       d    V P                  \        P                  J 4      # )z%Returns true when mop washing paused.)rq   ro  r  r   r  r  s   &rx   r  'DreameVacuumDeviceStatus.washing_paused  r  r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA         
 
4 
r{   c                   \        V P                  ;'       dg    V P                  \        P                  J ;'       dC    V P
                  \        P                  8H  ;'       g    V P
                  \        P                  8H  4      # zPReturns true when the device returning to self-wash base to wash or dry its mop.)rq   ro  r  r   r  r  r   RETURNING_WASHINGr  s   &rx   re  *DreameVacuumDeviceStatus.returning_to_wash  sr     )) q q**.L.V.VVq q0:::oodjjL]LoLo>o
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     
 
$ 
r{   c                    \        V P                  ;'       dB    V P                  \        P                  J ;'       d    V P
                  \        P                  8H  4      # r  )rq   ro  r  r   r  r  r   r  r  s   &rx   r  1DreameVacuumDeviceStatus.returning_to_wash_paused  sV     )) 7 7**.L.V.VV7 7

/666
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     
 
4 
r{   c                v   \        V P                  ;'       d    V P                  ;'       d    V P                  ;'       gq    V P                  ;'       g]    V P
                  ;'       gI    V P                  ;'       g5    V P                  ;'       g!    V P                  ;'       g    V P                  '       * 4      # )zOReturns true when device has a self-wash base and washing mop can be performed.)
rq   ro  r(  r$  r  r  re  r  ra  r  r  s   &rx   r  *DreameVacuumDeviceStatus.washing_available  s     )) 
 
00
 
  ( (&&( (00( ( ))( ( >>	( (
 ((( ( ''
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     
 
$ 
r{   c                    \        V P                  ;'       dN    V P                  ;'       d:    V P                  ;'       d&    V P                  ;'       g    V P
                  '       * 4      # )zNReturns true when device has a self-wash base and drying mop can be performed.)rq   ro  r(  r  r$  r  r  s   &rx   r*  )DreameVacuumDeviceStatus.drying_available  sb     )) : :00: :: : \\88T%8%89	
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    r  r{   c                   \        V P                  '       * ;'       d_    V P                  '       * ;'       dF    V P                  '       * ;'       g-    V P                  '       d   ^M^\        V P                  4      8  4      # )z1Returns true when creating a new map is possible.)rq   r*  rB  map_availabler@  r~  r  r  s   &rx   mapping_available*DreameVacuumDeviceStatus.mapping_available  sk      ` `%%%` `'''^^$...Qa3t}}K],]
 	
r{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  !       H H Hr{   c                @    V P                  \        P                  4      # )z-Returns main brush remaining life in percent.)r<  r   rD  r  s   &rx   main_brush_life(DreameVacuumDeviceStatus.main_brush_life        !!"6"F"FGGr{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  &  r  r{   c                @    V P                  \        P                  4      # )z-Returns side brush remaining life in percent.)r<  r   rF  r  s   &rx   side_brush_life(DreameVacuumDeviceStatus.side_brush_life%  r  r{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  +  s     D DS Dr{   c                @    V P                  \        P                  4      # )z)Returns filter remaining life in percent.)r<  r   rG  r  s   &rx   filter_life$DreameVacuumDeviceStatus.filter_life*  s     !!"6"B"BCCr{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  0  s     J J3 Jr{   c                @    V P                  \        P                  4      # )z/Returns sensor clean remaining life in percent.)r<  r   rI  r  s   &rx   sensor_dirty_life*DreameVacuumDeviceStatus.sensor_dirty_life/  s     !!"6"H"HIIr{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  5  s     N Ns Nr{   c                @    V P                  \        P                  4      # )z3Returns secondary filter remaining life in percent.)r<  r   rK  r  s   &rx   secondary_filter_life.DreameVacuumDeviceStatus.secondary_filter_life4  s     !!"6"L"LMMr{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  :  s     E E# Er{   c                @    V P                  \        P                  4      # )z&Returns mop remaining life in percent.)r<  r   rM  r  s   &rx   mop_life!DreameVacuumDeviceStatus.mop_life9  s     !!"6"C"CDDr{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  ?  r  r{   c                @    V P                  \        P                  4      # )z#Returns silver-ion life in percent.)r<  r   rP  r  s   &rx   silver_ion_life(DreameVacuumDeviceStatus.silver_ion_life>  r  r{   c                   V ^8  d   QhRR/# rL  rv   )rw   s   "rx   ry   rA  D  s     G G Gr{   c                @    V P                  \        P                  4      # )z"Returns detergent life in percent.)r<  r   rR  r  s   &rx   detergent_life'DreameVacuumDeviceStatus.detergent_lifeC  s     !!"6"E"EFFr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  I  s     B BT Br{   c                R    \        V P                  \        P                  4      4      # )zReturns DND is enabled.)rq   r<  r   rc  r  s   &rx   r  $DreameVacuumDeviceStatus.dnd_enabledH  s!     D&&';'?'?@AAr{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  N  s     B B3 Br{   c                @    V P                  \        P                  4      # )zReturns DND start time.)r<  r   rd  r  s   &rx   r  "DreameVacuumDeviceStatus.dnd_startM  s     !!"6"@"@AAr{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   rA  S  s     @ @ @r{   c                @    V P                  \        P                  4      # )zReturns DND end time.)r<  r   re  r  s   &rx   r   DreameVacuumDeviceStatus.dnd_endR  s     !!"6">">??r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  X  s      d r{   c                    V P                   pV'       d-   VP                  4        F  pVP                  '       g   K   R# 	  R# )z2Returns true when custom cleaning sequence is set.TF)r1  r  r  )r   r1  r2  s   &  rx   r  %DreameVacuumDeviceStatus.custom_orderW  s2     ==__&777 ' r{   c                   V ^8  d   QhRR/# rg   rt   zlist[int] | Nonerv   )rw   s   "rx   ry   rA  b  s     1 1#3 1r{   c                   a V P                   oS'       d/   V P                  '       d   \        \        SV3R lR7      4      # R# V P                  '       d   . # R# )z&Returns custom cleaning sequence list.c                `   < SV ,          P                   '       d   SV ,          P                   # ^c# )c   )r  )r  r1  s   &rx   <lambda><DreameVacuumDeviceStatus.cleaning_sequence.<locals>.<lambda>j  s*    XV`MaMgMgMgx
/C/I/I/omo/or{   )r  N)r1  r  r  sorted)r   r1  s   &@rx   r  *DreameVacuumDeviceStatus.cleaning_sequencea  s^     == $$$  o	 	 &&&r0D0r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  s  s     3 3t 3r{   c                0    \        V P                  RJ4      # )z/Returns true when mapping feature is available.N)rq   r   r  s   &rx   r  &DreameVacuumDeviceStatus.map_availabler  s     D%%T122r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA  x  r*  r{   c                    V P                   '       g   R# V P                  p\        VRJ;'       d[    VP                  ^8H  ;'       dD    V P                  '       * ;'       d+    V P
                  '       * ;'       d    VP                  '       * 4      # )zLReturns true when device has saved map and knowns its location on saved map.TN)r  r  rq   r   r  has_new_map	empty_mapr   r  s   & rx   r  &DreameVacuumDeviceStatus.has_saved_mapw  s     !!!&&t# * *,,1* ***** * $$$* *  )))
 	
r{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     i i4 ir{   c                    V P                   '       g   R# V P                  p\        VRJ;'       d&    VP                  ;'       d    VP                  '       * 4      # )zlReturns true when device cannot store the newly created map and waits prompt for restoring or discarding it.FN)r  r  rq   temporary_mapr  r  s   & rx   r  *DreameVacuumDeviceStatus.has_temporary_map  sN     !!!&&Kt+gg0I0IggR]RgRgNghhr{   c                   V ^8  d   QhRR/# r&  rv   )rw   s   "rx   ry   rA    s     
 
T 
r{   c                    V P                   '       g   R# V P                  p\        VRJ;'       d?    VP                  '       * ;'       d&    VP                  '       * ;'       d    VP
                  4      # )z.Returns true when fast mapping from empty map.FN)r  r  rq   r  r  new_mapr  s   & rx   r  $DreameVacuumDeviceStatus.has_new_map  st     !!!&&t# $ $---$ $)))$ $ ##	
 	
r{   c                   V ^8  d   QhRR/# rg   rt   r  rv   )rw   s   "rx   ry   rA    s     2 2n 2r{   c                    V P                   '       d?   V P                  '       g+   V P                  '       g   V P                  P                  # R# R# R# )zReturn the selected map dataN)r  r  r  r   r!  r  s   &rx   r!  %DreameVacuumDeviceStatus.selected_map  sE     d&<&<&<TEUEUEU$$111 FV&<r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rA    s     / /^ /r{   c                ^    V P                   '       d   V P                  P                  4       # R# )zReturn the current map dataN)r  r   r  r  s   &rx   r  $DreameVacuumDeviceStatus.current_map  s*     $$,,.. r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rA    s     	 	* 	r{   c                    V P                   '       dT   V P                  '       d   V P                  P                  # V P                  P                  pV'       d   VP
                  .# . # )z:Return the saved map id list if multi floor map is enabled)r  r@  r   r  r!  r  r   r!  s   & rx   r  !DreameVacuumDeviceStatus.map_list  sS     ~~~((111,,99L$++,,	r{   c                   V ^8  d   QhRR/# )rg   rt   zdict[int, MapData] | Nonerv   )rw   s   "rx   ry   rA    s      8 r{   c                    V P                   '       dK   V P                  '       d   V P                  P                  # V P                  pV'       d   VP
                  V/# / # )z<Return the saved map data list if multi floor map is enabled)r  r@  r   map_data_listr!  r  r  s   & rx   r
  &DreameVacuumDeviceStatus.map_data_list  sO     ~~~((666,,L$++\::	r{   c                   V ^8  d   QhRR/# )rg   rt   zdict[int, Segment] | Nonerv   )rw   s   "rx   ry   rA    s      3 r{   c                    V P                   pV'       d1   VP                  '       d   VP                  '       g   VP                  # / # )z"Return the segments of current map)r  r1  r  r  s   & rx   r1  !DreameVacuumDeviceStatus.segments  s9     &&;///8M8M8M'''	r{   c                   V ^8  d   QhRR/# )rg   rt   zSegment | Nonerv   )rw   s   "rx   ry   rA    s     G Gn Gr{   c                   V P                   '       dp   V P                  pV'       dZ   VP                  '       dF   VP                  '       d2   VP                  '       g   VP                  VP                  ,          # R# R# R# R# R# )z.Return the segment that device is currently onN)r  r  r1  robot_segmentr  r  s   & rx   current_room%DreameVacuumDeviceStatus.current_room  sk        **K{3338Q8Q8QZeZoZoZo"++K,E,EFF [p8Q3{ !r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rA    s      !1 r{   c                	   V P                   pV'       d   V P                  '       d   V P                  '       g   V P                  '       d"   VP                  '       d   VP                  #  . # V P
                  '       g~   V P                  '       gl   VP                  '       dZ   V P                  '       gH   V P                  '       g6   V P                  '       g$   \        VP                  P                  4       4      # . # R # R # R # r  )r  r*  rB  r.  r/  r)  r,  r1  r  r  ra  r  keys)r   r;  s   & rx   r/  (DreameVacuumDeviceStatus.active_segments  s    ##T->->->$$$+++#333 , I &&&***%%%---H--22455I .?8r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rA    s      * r{   c                	   \         V P                  P                  \        V P                  P                  /pV P
                  YP                  '       g   \        M\        &   V P                  P                  '       d_   VP                  \        V P                  \        P                  4      \         V P                  \        P"                  4      \$        R /4       M	RV\$        &   V P&                  pV'       dh   VP(                  e   VP(                  V\*        &   V# VP,                  e   VP,                  V\.        &   V# VP0                  e   VP0                  V\2        &   V# )TF)rT   r   rh   rS   r   r(  ro  rV   r[   r7  r~   r  rY   r<  r   r9  rX   r8  rW   r  r/  r&   r+  r$   r-  r%   )r   
attributesr;  s   &  rx   jobDreameVacuumDeviceStatus.job  s*   ($*<*<*A*A;PTP[P[P`P`a
,, 	*G*G*G?\Z <<)))%t'9'9:N:[:['\&(:(:;O;];](^"D */J~&##''33;3K3K
/0
 	 &&2080E0E
,-  ''3191G1G
-.r{   c                   V ^8  d   QhRR/# r  rv   )rw   s   "rx   ry   rA    s     ` `1 `r{   c                D   \         P                  \         P                  \         P                  \         P                  \         P
                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                   \         P"                  \         P$                  \         P&                  \         P(                  \         P*                  \         P,                  \         P.                  \         P0                  \         P2                  \         P4                  \         P6                  \         P8                  \         P:                  \         P<                  .p/ pV P>                  '       g5   V P@                  V\B        &   VPE                  \         PF                  4       EMV P@                  V\H        &   V PJ                  '       d`   V PL                  '       dN   V PN                  '       g<   V PP                  '       g*   \R        PT                  ! 4       V\V        &   . V\V         R2&   MV PX                  P[                  RR4      PU                  4       V\V        &   V P\                  P_                  4        Uu. uF"  q3P[                  RR4      PU                  4       NK$  	  upV\V         R2&   V EF#  pV Pa                  V4      pVf   K  \b        Pd                  ! V4      pV'       d   V^ ,          pMVPf                  Pi                  4       pV\         P                  J d-   V Pj                  P[                  RR4      PU                  4       pEMV\         PF                  J d   V PJ                  '       dU   V PL                  '       dC   V PN                  '       g1   V PP                  '       g   \R        PT                  ! 4       p. W& R2&   EMV Pl                  PU                  4       pV Pn                  P_                  4        Uu. uF  q3PU                  4       NK  	  upW& R2&   MV\         P                  J d,   V Pp                  P[                  RR4      PU                  4       pMrV\         P:                  J d@   V PL                  ;'       d+    V PN                  '       * ;'       d    V PP                  '       * pMV\         P                  J d   V^8X  d   RMRpWRV&   EK&  	  V Pr                  V\t        &   V Pv                  V\x        &   V PJ                  V\z        &   V P|                  V\~        &   V P                  V\        &   V P                  V\        &   V P                  V\        &   V P                  V\        &   V P                  '       Ed)   V P                  V\        &   V P                  '       d2   V P                  '       d   V P                  P                  M^ V\        &   V P                  '       d   V P                  P                  MRV\        &   / V\        &   V P                  P                  4        Fz  w  rs\        VP                  P                  4       4       UU	u. uF-  w  r\        V\        V	Pf                  \        V	P                  /NK/  	  up	pV\        ,          VP                  &   K|  	  V# u upi u upi u up	pi )z$Return the attributes of the device._listr  r  Nonoff)[r   r&  r`  r   r8  r9  rk  rl  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rP  rO  rR  rQ  rU  rS  rT  rd  re  r   SERIAL_NUMBERro  r(  rV   r   rp  r[   r*  r3  r)  r,  r(   r  rZ   rf  r  mop_pad_humidity_listr  r<  r=   r   rh   lowerr  r^  water_volume_listrm  r  rF   r  rE   rG   r  rH   r  rI   ra  rJ   r  rK   rB  rL   r  r/  r&   r  r  r  rN   r!  r  rO   rM   r
  r.  r  r1  rP   rQ   rR   icon)
r   r   r  r2  r   r   	prop_namer1  jss
   &         rx   r  #DreameVacuumDeviceStatus.attributes  sM    !.. .. && .. -- 00 )) 55 00 55 00 ,, 11 22 77 66 ;; -- 22 00 55 // 44 33 44 // ** (( 44 ..=

B 
,,,*.*J*JJ'2??@'+'G'GJ|$|||!9!9!94CUCUCUY]YkYkYk4E4P4P4R
01>@
34E:;484N4N4V4VWZ\_4`4k4k4m
01>B>X>X>]>]>_?>_IIc3'224>_?
34E:; D&&t,E ,006	 )!I $		 1I/555 OO33C=HHJE1>>>|||)A)A)A4K]K]K]aeasasas 1 < < >:<
[#67 $ 6 6 A A CSWSiSiSnSnSp:qSpa<<>Sp:q
[#671??? 33;;CEPPRE1EEE 44jjT=O=O9OjjX\XjXjTjE1???$)QJDEE(-9%1 4 .2-C-C
)*$(KK
=!#'<<
< "&++
;#'<<
< ,0,A,A
()%)^^
>"#'#4#4
< ===/3/C/CJ+,$$$SWSdSdSd43D3D3O3Ojk
/0JNJ[J[J[D,=,=,F,FaeJ()%'Jz"**002U[\]\f\f\l\l\nUo6Uo6AWaAFFIqvvFUo6
:&qzz2 3
 e?* ;r26s   (\"\=3\)	r7  r  r=  r  r>  r  r,  r6  ro  )r-  r.  r/  r0  r1  r  r  r)   r.  suction_level_listr*   r%  r+   r#  r,   r/  r-   carpet_sensitivity_listr9   self_clean_area_listr:   mop_wash_level_listr;   mopping_type_listrs  rk  rl  rm  rn  ro  rp  rq  rr  r  r  r  r  r  r  r  ro  r=  r,  r>  r  r6  r   r   r<  r   r   rI  r  r  rV  r  r^  r  rf  r   rm  r   rt  r   r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6  r   r  r
  r'  r  r(  r   r-  r'  r)  r,  r.  rA  rB  r  rL  rP  r  r  r  r  ra  r  r*  r  rS  r  r|  r  r3  r@  r  r  r$  r+  r  re  r  r  r*  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r  r  r
  r1  r  r/  r  r  r4  )r1  r2  s   00rx   r   r     s
   e
 +E+K+K+MN+M41!$+MN*C*I*I*KL*K$!*KL.K.Q.Q.ST.SdaQT.ST+E+K+K+MN+M41!$+MN0O0U0U0WX0Wqt0WX-D-J-J-LM-LTQAD-LM,B,H,H,JK,JDA14,JK*>*D*D*FG*F$!*FG  MOOJJKOL!# $ $$(!%)"K
./ ) ) - - F F 0 0 Q Q / / O O 	: 	: W W "0 "0H Q Q * * C C . . M M - - K K 
2 
2 U U 3 3 T T 4 4 Y Y 6 6 \ \ 2 2 P P 5 5 [ [ ) )2 B B 	9 	9 P P 4 4 N N   - - G G T T N N  & m m
 
 
  N N N N S S R R # #J x x
 
 
 
 
 L L 
 
 
 
 
 
 
 
 	
 	
 
 
&    
 . .
 N N Q Q 
 
 @ @ 	
 	
 x x b b
 
 
 I I 
 
, R R Y Y i i N N , ,  8 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
 
 H H H H D D J J N N E E H H G G B B B B @ @   1 1  3 3 
 
 i i 
 
 2 2
 / /
 	 	     G G  "  6 ` `e! OLTNXMKGs/   X+X1+X7X=5YY	?Y$Yr   c                      ] tR tRtRtR tR t]R R l4       t]R R l4       t	]R	 R
 l4       t
]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       tRtR# )r  ib  z Container of device information.c                	    Wn         R # r  r   )r   r   s   &&rx   r   DreameVacuumDeviceInfo.__init__e  s    	r{   c           
     	    V P                   R ,          : RV P                   R,          : RV P                   R,          : RV P                  R,          : RV P                   R,          : 2	# )	r  z vfw_verz (rl   z) @ localIpz
 - token: rk   )r   network_interfacer  s   &rx   __repr__DreameVacuumDeviceInfo.__repr__h  sV    IIgIIhIIe""9--IIg
 	
r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   #DreameVacuumDeviceInfo.__annotate__r  s     " "3 "r{   c                (    V P                   R,          # )z(Information about network configuration.netifr2  r  s   &rx   r7  (DreameVacuumDeviceInfo.network_interfaceq  s     yy!!r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   r;  w  s      S r{   c                (    V P                   R,          # )z.Information about connected WLAN access point.apr2  r  s   &rx   accesspoint"DreameVacuumDeviceInfo.accesspointv  s     yyr{   c                   V ^8  d   QhRR/# rg   rt   zOptional[str]rv   )rw   s   "rx   ry   r;  |  s      } r{   c                V    V P                   R,          e   V P                   R,          # R# )zModel string if available.r  Nr2  r  s   &rx   r  DreameVacuumDeviceInfo.model{  s%     99W)99W%%r{   c                   V ^8  d   QhRR/# rE  rv   )rw   s   "rx   ry   r;          - r{   c                V    V P                   R,          e   V P                   R,          # R# )zFirmware version if available.r5  Nr2  r  s   &rx   r  'DreameVacuumDeviceInfo.firmware_version  %     99X*99X&&r{   c                   V ^8  d   QhRR/# )rg   rt   zOptional[int]rv   )rw   s   "rx   ry   r;    s       r{   c                    V P                   pVe4   VP                  R4      p\        V4      ^8X  d   \        V^,          4      # R# )z6Firmware version number if firmware version available.Nr  )r  r  r~  r   )r   r  s   & rx   r  DreameVacuumDeviceInfo.version  sI      00'/55c:#$)+A.//r{   c                   V ^8  d   QhRR/# rE  rv   )rw   s   "rx   ry   r;    rI  r{   c                V    V P                   R,          e   V P                   R,          # R# )zHardware version if available.hw_verNr2  r  s   &rx   hardware_version'DreameVacuumDeviceInfo.hardware_version  rL  r{   c                   V ^8  d   QhRR/# rE  rv   )rw   s   "rx   ry   r;    s      ] r{   c                V    V P                   R,          e   V P                   R,          # R# )zMAC address if available.rl   Nr2  r  s   &rx   r  "DreameVacuumDeviceInfo.mac_address  s%     99U'99U##r{   c                   V ^8  d   QhRR/# r"  rv   )rw   s   "rx   ry   r;    s      c r{   c                    R# )zManufacturer name.u   Dreametech™rv   r  s   &rx   manufacturer#DreameVacuumDeviceInfo.manufacturer  s     r{   c                   V ^8  d   QhRR/# )rg   rt   ru  rv   )rw   s   "rx   ry   r;    s      ^ r{   c                    V P                   # )z#Raw data as returned by the device.r2  r  s   &rx   rawDreameVacuumDeviceInfo.raw  s     yyr{   r2  N)r-  r.  r/  r0  r1  r   r8  r   r7  rB  r  r  r  rS  r  rZ  r^  r4  rv   r{   rx   r  r  b  s    *
 " "                r{   r  )v
__future__r   loggingr   r  r  r   r  r  r   rA  r   	threadingr   typingr   r   typesr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   constr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   	resourcesr\   
exceptionsr]   r^   r_   protocolr`   mapra   	getLoggerr-  r   rc   r   r  rv   r{   rx   <module>rk     s    "    	               @6 6 6 6 6 6 6 6 6 6 6 6 6 6n # 
 + *


H
%P!j P!jfB[ [|$G Gr{   