Home

Awesome

Xiaomi Robot Vacuum Protocol

Attempt to describe the Xiaomi Robot Vacuum Protocol.

These commands are send using the Xiaomi mi-home protocol. (For decoding of the vacuum map see RR Map File)

Applications implementing this protocol:

Supported vacuum devices:

ModelName / aliases
rockrobo.vacuum.v1Mi Robot Vacuum
roborock.vacuum.a01Roborock E Series
roborock.vacuum.a08Roborock S6 Pure
roborock.vacuum.a09Roborock T7 Pro
roborock.vacuum.a10Roborock S6 MaxV
roborock.vacuum.a11Roborock T7
roborock.vacuum.a14Roborock T7S
roborock.vacuum.a15Roborock S7
roborock.vacuum.a19Roborock S4 Max
roborock.vacuum.a23Roborock T7S Plus
roborock.vacuum.c1Xiaowa C1
roborock.vacuum.e2Roborock Xiaowa E Series
roborock.vacuum.m1sMi Robot Vacuum 1S
roborock.vacuum.p5Roborock P5
roborock.vacuum.s4Roborock S4
roborock.vacuum.s5Mi Robot Vacuum v2 / Roborock Vacuum S5 / Roborock Vacuum S50
roborock.vacuum.s5eRoborock S5 Max
roborock.vacuum.s6Roborock S6
roborock.vacuum.t4Roborock T4
roborock.vacuum.t6Roborock T6
roborock.vacuum.t7Roborock Vacuum T7

See supported robots and capability matrix here (based on get_fw_features command)

Vacuum Commands

:warning: Depending on the model and firmware version, not all commands might be available.
The last columns show for which models the commands are available (assumed the latest firmware is installed).
If there is no entry, the command is available for each device.

TypeCommandDocumentationOnly available for
APPSTATapp_stat
CARPET_MODE_GETget_carpet_mode-s5e
CARPET_MODE_SETset_carpet_mode-s5e
CHARGEapp_chargeBasic Operations
CLEAN_RECORD_DELdel_clean_record-s5e
CLEAN_RECORD_GETget_clean_recordClean Summary
CLEAN_RECORD_MAP_GETget_clean_record_mapClean Summary
CLEAN_SUMMARY_GETget_clean_summaryClean Summary
CONSUMABLES_GETget_consumableConsumable
CONSUMABLES_RESETreset_consumableConsumable
CUSTOM_MODE_GETget_custom_modeCustom Mode
CUSTOM_MODE_SETset_custom_modeCustom Mode
CUSTOM_MODE_WATERBOX_GETget_water_box_custom_modeWater Box Custom Modes5e
CUSTOM_MODE_WATERBOX_SETset_water_box_custom_modeWater Box Custom Modes5e, s6
DELETESELECTMAPdel_map
DND_CLOSEclose_dnd_timerDo Not Disturb
DND_GETget_dnd_timerDo Not Disturb
DND_SETset_dnd_timerDo Not Disturb
FIND_MEfind_meFind Robot
GETCLEANRECORDMAPV2get_clean_record_map_v2
GETCUSTOMCLEANMODEget_customize_clean_mode
GETFRESHMAPget_fresh_map
GETLEDSTATUSget_led_status
GETMAPget_map
GETMAPV2get_map_v2
GETMULTIMAPget_multi_map
GETPERSISTMAPget_persist_map
GETPROPget_prop
GETSERVERTIMERget_server_timer
GETSTATUSapp_get_status
GET_FW_FEATURESget_fw_featuresFirmware Featuress5e
GET_INIT_STATUSapp_get_init_statusInitial Statuss5e
GET_LOCALEapp_get_localeLocale Informations5e
GET_NETWORK_INFOget_network_infoNetwotk infos5e, s5, s7, s6
GET_SERIAL_NUMBERget_serial_numberSerial Number
GET_STATUSget_statusStatus Message
GOTOTARGETSTOPstop_goto_target
GOTO_TARGETapp_goto_targetGoto Targetv1, s5, s6, s5e
LOADMULTIMAPload_multi_map}
LOG_UPLOAD_ENABLEenable_log_upload-
LOG_UPLOAD_GETget_log_upload_statusLog Upload
LOG_UPLOAD_USERuser_upload_log-s5e
MANUALSEGMENTMAPmanual_segment_map
MAPS_GET_MULTI_MAPSget_multi_maps_listMultimaps5e, s7, s6
MAPS_LOAD_MULTI_MAPload_multi_mapMultimaps5e, s7, s6
MAPS_RECOVER_GETget_recover_maps-s5e
MAP_EDIT_ENDend_edit_map-s5e
MAP_EDIT_STARTstart_edit_map-s5e
MAP_RECOVERrecover_map-s5e
MAP_RECOVER_GETget_recover_map-s5e
MAP_RESETreset_map-s5e
MAP_SAVEsave_mapMaps5, s6, s5e
MAP_STATUS_GETget_map_status-s5e
MAP_USE_NEWuse_new_map-s5e
MAP_USE_OLDuse_old_map-s5e
MAP_V1_FRESH_GETget_fresh_map_v1-s5e
MAP_V1_GETget_map_v1Map V1
MAP_V1_PERSIST_GETget_persist_map_v1-s5e
NAMEMULTIMAPname_multi_map
PAUSEapp_pauseBasic Operations
RECOVERMULTIMAPrecover_multi_map
REMOTE_ENDapp_rc_endRemote Control
REMOTE_MOVEapp_rc_moveRemote Control
REMOTE_STARTapp_rc_startRemote Control
ROOM_MAPPING_GETget_room_mappingRoom Mappings5e, m1s
SEGMENT_CLEAN_RESUMEresume_segment_cleanSegment Cleanings5e
SEGMENT_CLEAN_STARTapp_segment_cleanSegment Cleanings5, s5e, m1s
SEGMENT_CLEAN_STOPstop_segment_cleanSegment Cleanings5e
SEGMENT_MERGEmerge_segment-s5e
SEGMENT_NAMEname_segment-s5e
SEGMENT_SPLITsplit_segment-s5e
SEGMENT_STATUS_GETget_segment_status-s5e
SETAPPTIMEZONEset_app_timezone
SETCUSTOMCLEANMODEset_customize_clean_mode
SETFDSENDPOINTset_fds_endpoint
SETLEDSTATUSset_led_status
SETSWITCHMAPMODEset_switch_map_mode
SET_LAB_STATUSset_lab_statusLab Statuss5, s6, s5e
SOUND_CURRENT_GETget_current_soundCurrent Sound
SOUND_INSTALLdnld_install_soundVoice Pack Installation
SOUND_PROGRESS_GETget_sound_progressVoice Pack Installations5e
SOUND_VOLUME_CHANGEchange_sound_volumeSound Volumes5e
SOUND_VOLUME_GETget_sound_volumeSound Volume
SOUND_VOLUME_TESTtest_sound_volumeSound Volumes5e
START_SPOTapp_spotBasic Operations
START_VACUUMapp_startBasic Operations
STOP_VACUUMapp_stopBasic Operations
TIMERSTARTstart_clean
TIMER_DELdel_timerCleaning Timer
TIMER_GETget_timerCleaning Timer
TIMER_SERVER_DELdel_server_timerCleaning Timers5e
TIMER_SERVER_GETget_server_timerCleaning Timers5e
TIMER_SERVER_SETset_server_timerCleaning Timers5e
TIMER_SERVER_UPDATEupd_server_timerCleaning Timers5e
TIMER_SETset_timerCleaning Timer
TIMER_UPDATEupd_timerCleaning Timer
TIMEZONE_GETget_timezoneTimezone
TIMEZONE_SETset_timezoneTimezone
WAKEUP_ROBOTapp_wakeup_robots5e
ZONED_CLEAN_RESUMEresume_zoned_cleanZone Cleanings5e
ZONED_CLEAN_STARTapp_zoned_cleanZone Cleaningv1, s5, s6, s5e
ZONED_CLEAN_STOPstop_zoned_cleanZone Cleanings5e

Generic MiIO Commands

:information_source: These commands appear to be shared amongs all(?) Xiaomi Mi Io devices.

TypeCommandDocumentation
INFOmiIO.infoInfo
ROUTERmiIO.config_router-
OTAmiIO.otaUpdate Firmware Over Air
OTA_PROGmiIO.get_ota_progress-
OTA_STATEmiIO.get_ota_state-
WIFI_STATEmiIO.wifi_assoc_stateWifi Status

Ruby variant commands

There are few models that take the same commands but preponed with user.
Below are the known ones:

TypeCommand
GETMAPuser.app_get_map
APPCHARGEuser.app_home
APPPAUSEuser.app_pause
APPREMOTECONTROLENDuser.app_rc_end
APPREMOTECONTROLMOVEuser.app_rc_move
APPREMOTECONTROLSTARTuser.app_rc_start
APPSPOTuser.app_spot
APPSTARTuser.app_start
APPWAKEUPROBOTuser.app_wakeup_robot
CLOSEDNDTIMERuser.close_dnd_timer
DELTIMERuser.del_timer
ENABLELOGUPLOADuser.enable_log_upload
FINDMEuser.find_me
GETCARPETMODEuser.get_carpet_mode
GETCLEANRECORDuser.get_clean_record
GETCLEANRECORDMAPuser.get_clean_record_map
GETCLEANRECORDMAPV2user.get_clean_record_map_v2
GETCLEANSUMMARYuser.get_clean_summary
GETCURRENTSOUNDPACKAGEuser.get_current_sound
GETCUSTOMMODEuser.get_custom_mode
GETDNDTIMERuser.get_dnd_timer
GETLOGUPLOADSTATUSuser.get_log_upload_status
GETMAPANDROIDuser.get_map_v1
GETMAPV2user.get_map_v2
GETSERIALNUMBERuser.get_serial_number
GETSOUNDPACKAGEPROGRESSuser.get_sound_progress
GETSOUNDVOLUMEuser.get_sound_volume
GETSUPPLIESuser.get_consumable
GETTIMERuser.get_timer
GETTIMEZONEuser.get_timezone
GOTOTARGETuser.app_goto_target
GOTOTARGETSTOPuser.stop_goto_target
RESETSUPPLIESuser.reset_consumable
RESUMEZONEDCLEANuser.app_resume_zoned_clean
SETCARPETMODEuser.set_carpet_mode
SETCUSTOMMODEuser.set_custom_mode
SETDNDTIMERuser.set_dnd_timer
SETSOUNDPACKAGEuser.dnld_install_sound
SETSOUNDVOLUMEuser.change_sound_volume
SETTIMERuser.set_timer
SETTIMEZONEuser.set_timezone
STARTZONEDCLEANuser.app_zoned_clean
STOPZONEDCLEANuser.stop_zoned_clean
TESTSOUNDVOLUMEuser.test_sound_volume
TIMERSTARTuser.start_clean
UPDTIMERuser.upd_timer

:exclamation: Suggestions & improvements very welcome!