3737 UserData ,
3838 WashTowelMode ,
3939)
40- from .exceptions import RoborockException , RoborockTimeout , VacuumError
40+ from .exceptions import (
41+ RoborockAccountDoesNotExist ,
42+ RoborockException ,
43+ RoborockInvalidCode ,
44+ RoborockInvalidEmail ,
45+ RoborockTimeout ,
46+ RoborockUrlException ,
47+ VacuumError ,
48+ )
4149from .roborock_future import RoborockFuture
4250from .roborock_message import RoborockMessage
4351from .typing import DeviceProp , DockSummary , RoborockCommand
@@ -345,12 +353,15 @@ async def _get_base_url(self) -> str:
345353 params = {"email" : self ._username , "needtwostepauth" : "false" },
346354 )
347355 if response is None :
348- raise RoborockException ("get url by email returned None" )
349- if response .get ("code" ) != 200 :
350- raise RoborockException (response .get ("error" ))
356+ raise RoborockUrlException ("get url by email returned None" )
357+ response_code = response .get ("code" )
358+ if response_code != 200 :
359+ if response_code == 2003 :
360+ raise RoborockInvalidEmail ("Your email was incorrectly formatted." )
361+ raise RoborockUrlException (response .get ("error" ))
351362 response_data = response .get ("data" )
352363 if response_data is None :
353- raise RoborockException ("response does not have 'data'" )
364+ raise RoborockUrlException ("response does not have 'data'" )
354365 self .base_url = response_data .get ("url" )
355366 return self .base_url
356367
@@ -375,8 +386,12 @@ async def request_code(self) -> None:
375386 )
376387 if code_response is None :
377388 raise RoborockException ("Failed to get a response from send email code" )
378- if code_response .get ("code" ) != 200 :
379- raise RoborockException (code_response .get ("msg" ))
389+ response_code = code_response .get ("code" )
390+ if response_code != 200 :
391+ if response_code == 2008 :
392+ raise RoborockAccountDoesNotExist ("Account does not exist - check your login and try again." )
393+ else :
394+ raise RoborockException (f"{ code_response .get ('msg' )} - response code: { code_response .get ('code' )} " )
380395
381396 async def pass_login (self , password : str ) -> UserData :
382397 base_url = await self ._get_base_url ()
@@ -395,7 +410,7 @@ async def pass_login(self, password: str) -> UserData:
395410 if login_response is None :
396411 raise RoborockException ("Login response is none" )
397412 if login_response .get ("code" ) != 200 :
398- raise RoborockException (login_response .get (" msg" ) )
413+ raise RoborockException (f" { login_response .get (' msg' ) } - response code: { login_response . get ( 'code' ) } " )
399414 user_data = login_response .get ("data" )
400415 if not isinstance (user_data , dict ):
401416 raise RoborockException ("Got unexpected data type for user_data" )
@@ -417,8 +432,11 @@ async def code_login(self, code) -> UserData:
417432 )
418433 if login_response is None :
419434 raise RoborockException ("Login request response is None" )
420- if login_response .get ("code" ) != 200 :
421- raise RoborockException (login_response .get ("msg" ))
435+ response_code = login_response .get ("code" )
436+ if response_code != 200 :
437+ if response_code == 2018 :
438+ raise RoborockInvalidCode ("Invalid code - check your code and try again." )
439+ raise RoborockException (f"{ login_response .get ('msg' )} - response code: { response_code } " )
422440 user_data = login_response .get ("data" )
423441 if not isinstance (user_data , dict ):
424442 raise RoborockException ("Got unexpected data type for user_data" )
@@ -439,7 +457,7 @@ async def get_home_data(self, user_data: UserData) -> HomeData:
439457 if home_id_response is None :
440458 raise RoborockException ("home_id_response is None" )
441459 if home_id_response .get ("code" ) != 200 :
442- raise RoborockException (home_id_response .get (" msg" ) )
460+ raise RoborockException (f" { home_id_response .get (' msg' ) } - response code: { home_id_response . get ( 'code' ) } " )
443461
444462 home_id = home_id_response ["data" ].get ("rrHomeId" )
445463 timestamp = math .floor (time .time ())
0 commit comments