openHab Roborock S7 mop features

Hi,

currently I’m trying to integrate the Roborock S7 into my openHab installation and therefore, I’m using this binding: Xiaomi Mi IO - Bindings | openHAB.
I have a few questions to it:

  1. The Roborock S7 offers different cleaning modes (*vaccum: quit, normal, turbu, max; mop: disabled, softly, medium, intense). I’m able to control all fan modes with the “actions#fan” channel but how can i choose which mop mode should be used? I cannot find any channel regarding this?
  2. If I try to enable/disable the “Do not Disturb” feature in openhab it won’t be applied to the vacuum cleaner. Otherwise, if I enable/disable it inside the Xiaomi Home App the state will be updated in openHab. There is no error in any log. Is this a known bug?
  3. All “history” and “last cleaning details” channels don’t have any values, it’s just NULL all the time.

I’m using openHab 3.1.0

Thanks in advance!
Cheers

The various modes, including mop modes corrospond to specific fan levels on the other models. Maybe the S7 has different standard values. To figure that out, you can set it in the mihome app and see what level it reports back.

This is the current logic:

<option value="38">Silent</option>
			<option value="60">Standard</option>
			<option value="75">Turbo</option>
			<option value="77">Power</option>
			<option value="90">Full</option>
			<option value="100">Max</option>
			<option value="101">Quiet</option>
			<option value="102">Balanced</option>
			<option value="103">Turbov2</option>
			<option value="104">Maxv2</option>
			<option value="105">Mob</option>

It is a feature not a bug :slight_smile: DND was never implemented as a command, it is read-only. If I remember well it is because it requires a time as well in order to set it. If that is important to you you can send the command to the command channel with rule.

Can you share a debug log of a refresh to see what the robot responds when the refresh commands are send.

1 Like

I have already tried all different values in openHab and compared them with the Xiaomi Home app. Here are my results:


As you can see it’s possible to change the vaccum, but not the mop mode. If I send a different mode (let’s say “Turbo”) from openHab to roborock, it will be automatically changed to “Balanced”.
Or another example: If I set the mop mode on the Xiaomi Home app to “intense” and change the vacuum fan level on openhab to a different mode, only the vacuum level will be changed accordingly.

Sorry for the dumb question but do you’ve a link to an API documentation?

I guess the “CLEAN_SUMMARY_GET” should be the correct log? The output seems fine to me:

2021-07-06 20:07:12.541 [DEBUG] [internal.handler.MiIoAbstractHandler] - Received response for XXXXXXX type: CLEAN_SUMMARY_GET, result: {"clean_time":23231,"clean_area":391290000,"clean_count":39,"dust_collection_count":0,"records":[1625563095,1625494278,1625477423,1625428843,1625391985,1625351583,1625349338,1625344212,1625315969,1625315537,1625314664,1625314517,1625314339,1625312071,1625309167,1625308823,1625308754,1625307768,1625307561,1625304622]}, fullresponse: {"id":5224,"result":{"clean_time":23231,"clean_area":391290000,"clean_count":39,"dust_collection_count":0,"records":[1625563095,1625494278,1625477423,1625428843,1625391985,1625351583,1625349338,1625344212,1625315969,1625315537,1625314664,1625314517,1625314339,1625312071,1625309167,1625308823,1625308754,1625307768,1625307561,1625304622]},"exe_time":101}

My item file looks like:

DateTime            Roborock01_EG_lastCleaningStart             "Letzte Reinigung Startzeit"                    {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_start_time"}
DateTime            Roborock01_EG_lastCleaningEnd               "Letzte Reinung Endzeit"                        {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_end_time"}
Number:Area         Roborock01_EG_lastCleaningArea              "Letzte Reinigung Fläche"                       {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_area"}
Number:Time         Roborock01_EG_lastCleaningTime              "Letzte Reinung Zeit"                           {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_duration"}
Number              Roborock01_EG_lastCleaningError             "Letzte Reinung Error"                          {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_error"}
Number              Roborock01_EG_lastCleaningFinished          "Letzte Reinigung beendet"                      {channel="miio:vacuum:XXXXXXX:cleaning#last_clean_finish"}

Can you try what is the output of sending this command to the command channel:
get_mop_mode[0] and/or get_mop_mode[]

You can probaly update with
set_mop_mode [300]

There is no “official” API, but the most complete desription is here GitHub - marcelrv/XiaomiRobotVacuumProtocol: Attempt to describe the Xiaomi Robot Vacuum Protocol

The response for CLEAN_SUMMARY_GET is quite different than the binding expects see
XiaomiRobotVacuumProtocol/clean_summary+record.md at master · marcelrv/XiaomiRobotVacuumProtocol · GitHub what is notmally there for the other models.
It needs some development to also parse yours. Can you create an issue for that in openhab github.

It’s possible to control the moproutine (red area) with this parameter, but not the mop intensity (blue area):

The following values are available:

  • 300: Normal cleaning
  • 301: Deep cleaning (the robot will clean every spot two times)

I’ve also found this documentation ( miio.vacuum module — python-miio documentation) and it seems like that there is no way to control the mop intensity in any way.

Sure, I will do this later on.

I’ll take a quick look if I can see what uis the command for that one.
Can you confirm the model you see in openhab is roborock.vacuum.a15

Thank you very much!

  • modelID: roborock.vacuum.a15
  • firmwareVersion: 4.1.2_1140

I ran quickly my check on the S7… these are all the commands I can see.
My first guess to try is the get_water_box_custom_mode

 "model": "roborock.vacuum.a15",
    "commands": [
        "set_clean_motor_mode",
        "set_camera_status",
        "set_ignore_carpet_zone",
        "set_clean_sequence",
        "set_homesec_password",
        "set_child_lock_status",
        "set_carpet_clean_mode",
        "set_ignore_identify_area",
        "set_dust_collection_switch_status",
        "set_map_beautification_status",
        "set_fan_motor_work_timeout",
        "set_mop_motor_status",
        "set_collision_avoid_status",
        "set_flow_led_status",
        "set_dust_collection_mode",
        "set_custom_mode",
        "set_water_box_custom_mode",
        "set_timer",
        "set_dnd_timer",
        "set_timezone",
        "set_app_timezone",
        "set_carpet_mode",
        "set_lab_status",
        "set_server_timer",
        "set_fds_endpoint",
        "set_led_status",
        "set_customize_clean_mode",
        "set_mop_mode",
        "set_airdry_hours",
        "set_timer_dup",
        "set_map_name",
        "set_multi_map_timer_different_map_tip",
        "set_multi_map_timer_switch_different_map_tip",
        "set_multi_map_timer_different_map_save_tip",
        "get_clean_motor_mode",
        "get_camera_status",
        "get_timer_summary",
        "get_timer_detail",
        "get_testid",
        "get_clean_sequence",
        "get_turn_server",
        "get_device_sdp",
        "get_device_ice",
        "get_homesec_connect_status",
        "get_child_lock_status",
        "get_carpet_clean_mode",
        "get_random_pkey",
        "get_multi_maps_list",
        "get_dust_collection_switch_status",
        "get_map_beautification_status",
        "get_fan_motor_work_timeout",
      "set_server_timer",
        "set_fds_endpoint",
        "set_led_status",
        "set_customize_clean_mode",
        "set_mop_mode",
        "set_airdry_hours",
        "set_timer_dup",
        "set_map_name",
        "set_multi_map_timer_different_map_tip",
        "set_multi_map_timer_switch_different_map_tip",
        "set_multi_map_timer_different_map_save_tip",
        "get_clean_motor_mode",
        "get_camera_status",
        "get_timer_summary",
        "get_timer_detail",
        "get_testid",
        "get_clean_sequence",
        "get_turn_server",
        "get_device_sdp",
        "get_device_ice",
        "get_homesec_connect_status",
        "get_child_lock_status",
        "get_carpet_clean_mode",
        "get_random_pkey",
        "get_multi_maps_list",
        "get_dust_collection_switch_status",
        "get_map_beautification_status",
        "get_fan_motor_work_timeout",
        "get_mop_motor_status",
        "get_collision_avoid_status",
        "get_flow_led_status",
        "get_dust_collection_mode",
        "get_photo",
        "get_multi_map",
        "get_prop",
        "get_status",
        "get_map",
        "get_map_v1",
        "get_map_v2",
        "get_custom_mode",
        "get_water_box_custom_mode",
        "get_clean_summary",
        "get_clean_record",
        "get_clean_record_map",
        "get_clean_record_map_v2",
        "get_consumable",
        "get_timer",
        "get_dnd_timer",
        "get_serial_number",
        "get_log_upload_status",
        "get_sound_progress",
        "get_current_sound",
        "get_timezone",
        "get_carpet_mode",
        "get_sound_volume",
        "get_fw_features",
        "get_fresh_map",
        "get_persist_map",
      "get_collision_avoid_status",
        "get_flow_led_status",
        "get_dust_collection_mode",
        "get_photo",
        "get_multi_map",
        "get_prop",
        "get_status",
        "get_map",
        "get_map_v1",
        "get_map_v2",
        "get_custom_mode",
        "get_water_box_custom_mode",
        "get_clean_summary",
        "get_clean_record",
        "get_clean_record_map",
        "get_clean_record_map_v2",
        "get_consumable",
        "get_timer",
        "get_dnd_timer",
        "get_serial_number",
        "get_log_upload_status",
        "get_sound_progress",
        "get_current_sound",
        "get_timezone",
        "get_carpet_mode",
        "get_sound_volume",
        "get_fw_features",
        "get_fresh_map",
        "get_persist_map",
        "get_room_mapping",
        "get_recover_maps",
        "get_recover_map",
        "get_map_status",
        "get_segment_status",
        "get_server_timer",
        "get_network_info",
        "get_led_status",
        "get_customize_clean_mode"
    ]
},
1 Like

get_water_box_custom_mode regulates the amount of water the robot will use during the cleaning process.

You can try the various get_ commands to find out which one is related.

E.g get_mop_motor_status looks also promising.
Alternative is trying to log the command, but that is rather complex

Unfortunately, it seems like, that there is no mentioned command responsible to change the mop mode.

Not even the “get_status” command returns the current mode:

{"id":3947,"result":[{"msg_ver":2,"msg_seq":1880,"state":8,"battery":100,"clean_time":10,"clean_area":0,"error_code":0,"map_present":1,"in_cleaning":0,"in_returning":0,"in_fresh_state":1,"lab_status":1,"water_box_status":1,"fan_power":102,"dnd_enabled":0,"map_status":3,"is_locating":0,"lock_status":0,"water_box_mode":203,"water_box_carriage_status":1,"mop_forbidden_enable":1,"adbumper_status":[0,0,0],"water_shortage_status":0,"dock_type":0,"dust_collection_status":0,"auto_dust_collection":1,"mop_mode":-1239414972,"debug_mode":0}],"exe_time":101}

The “mop_mode” parameter seems pretty good to me, but it doesn’t update if i change the mop mode inside the Xiaomi Home App.

Dears,

I can help here because I have also implemented S7 into my OH2 system.

Here items:

Group S7_gVac “Xiaomi Robot Vacuum”
Group S7_gVacStat “Status Details” (S7_gVac)
Group S7_gVacCons “Consumables Usage” (S7_gVac)
Group S7_gVacDND “Do Not Disturb Settings” (S7_gVac)
Group S7_gVacHist “Cleaning History” (S7_gVac)
Group S7_gVacNetwork “Network Details” (S7_gVac)

String S7_actionControl “Vacuum Control” (S7_gVac) {channel=“miio:vacuum:1CC72D5A:actions#control”}
Number S7_actionFan “Vacuum Fan” (S7_gVac) {channel=“miio:vacuum:1CC72D5A:actions#fan”}
String S7_actionCommand “Vacuum Command” {channel=“miio:vacuum:1CC72D5A:actions#commands”}
String S7_actionsSegment {channel=“miio:vacuum:1CC72D5A:actions#segment”}

Number S7_statusBat “Battery Level [%1.0f%%]” (S7_gVac,S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#battery”}
Number S7_statusArea “Cleaned Area [%1.0fm²]” (S7_gVac,S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#clean_area”}
Number S7_statusTime “Cleaning Time [%1.0f’]” (S7_gVac,S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#clean_time”}

String S7_statusError “Error [%s]” (S7_gVac,S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#error_code”}
Number S7_carriage_status “Wischtuch” (S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#water_box_carriage_status”}
Number S7_water_box_status “Wassertank” (S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#water_box_status”}
Number S7_water_box_mode “Wassermenge” (S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#water_box_mode”}

Number S7_statusFanPow “Fan Power [%1.0f %%]” (S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#fan_power”}
Number S7_statusClean “In Cleaning Status [%1.0f]” (S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#in_cleaning”}
String S7_statusStatus “Status” (S7_gVacStat) {channel=“miio:vacuum:1CC72D5A:status#state”}

Number S7_consumableMainT “Main Brush [%1.0f]” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#main_brush_time”}
Number S7_consumableMainP “Main Brush [%1.0f%%]” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#main_brush_percent”}
Number S7_consumableSideT “Side Brush [%1.0f]” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#side_brush_time”}
Number S7_consumableSideP “Side Brush [%1.0f%%]” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#side_brush_percent”}
Number S7_consumableFilterT “Filter Time[%1.0f]” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#filter_time”}
Number S7_consumableFilterP “Filter Time[%1.0f%%]” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#filter_percent”}
Number S7_consumableSensorT “Sensor [%1.0f]” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#sensor_dirt_time”}
Number S7_consumableSensorP “Sensor [%1.0f%%]” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#sensor_dirt_percent”}
String S7_ConsumablesConsumableReset “Reset consumable” (S7_gVacCons) {channel=“miio:vacuum:1CC72D5A:consumables#consumable_reset”}

Switch S7_dndFunction “DND Function” (S7_gVacDND) {channel=“miio:vacuum:1CC72D5A:dnd#dnd_function”}
String S7_dndStart “DND Start Time [%s]” (S7_gVacDND) {channel=“miio:vacuum:1CC72D5A:dnd#dnd_start”}
String S7_dndEnd “DND End Time [%s]” (S7_gVacDND) {channel=“miio:vacuum:1CC72D5A:dnd#dnd_end”}

String S7_miNetSSID “Network SSID [%s]” (S7_gVac,S7_gVacNetwork) {channel=“miio:vacuum:1CC72D5A:network#ssid”}
String S7_miNetBSSID “Network BSSID [%s]” (S7_gVac,S7_gVacNetwork) {channel=“miio:vacuum:1CC72D5A:network#bssid”}

Image S7_map “Cleaning Map” {channel=“miio:vacuum:1CC72D5A:cleaning#map”}
String S7_mopmode “Mop-Modus”

Switch S7_wohnen “Reinigung Wohnzimmer”
Switch S7_diele “Reinigung Diele”
Switch S7_gaesteWC “Reinigung WC”
Switch S7_kueche “Reinigung Küche”
Switch S7_fliessen “Reinigung Fliessen”
Switch S7_Erd “Reinigung Erdgeschoss”
Switch S7_Dach “Reinigung Dachgeschoss”
Switch S7_Keller “Reinigung Keller”
Switch S7_Erd_carpet “Reinigung Teppich”

Switch Reinigungsautomatik “Reinigung EG [MAP(allgemein.map):%s]”
Number mapfloor “Karte geladen [MAP(robo2.map):%s]”

Here map file A:

Manual Mode=Manuelle Steuerung
Spot Cleaning=Fleckenreinigung
Idel=Untätig
Room Clean=Raumreinigung
Returning Dock=Rückfahrt zur Station
Charging=Aufladen
Cleaning=Reinigen
Unknown=Status unbekannt

Paused=Pause
Sleeping=Schlummern
vacuum=Reinigen
pause=Pause
spot=Spot
dock=Laden

101=Silent
102=Normal
103=Power
104=Full

-1=Program
0=Ruhezustand
1=Allgemeine Reinigung
3=Selektive Zimmerreinigung

200=Aus
201=Sanft
202=Mittel
203=Intensiv

Here map file B:

0=nicht montiert
1=montiert

16=Diele
17=Küche
18=WC
19=Wohnzimmer
18,17,16=EG Fliessen
18,17,16,19=Erdgeschoss
18,16,17,19=Dachgeschoss
17,16,19,18=Keller
20=Teppich
Teppich=Teppich
CHARGE=Ladestation
[21983,25183,24167,27250,3]=Teppich

UNDEF=nicht definiert
-=ausgeschaltet
NULL=unbekannt

10=Erdgeschoss
20=Dachgeschoss
30=Keller

main_brush_work_time=Hauptbürste
side_brush_work_time=Seitenbürste
filter_work_time=Filter
sensor_dirty_time=Sensoren
none=Aus

Here sitemap:

Frame label=“Roborock S7”{
Text item=mapfloor label=“Karte geladen [MAP(robo2.map):%s]”
Switch item=S7_actionControl label=“Modus [MAP(robo.map):%s]” mappings=[vacuum=“Reinigen”, pause=“Pause”, dock=“Ladestation”]
Switch item=S7_Erd label=“Reinigung EG (WC->Küche->Diele->Wohnen)” mappings=[ON=“An”, OFF=“Aus”]
Switch item=S7_Dach label=“Reinigung DG (Bad->Schlafen->Kind->Flur)” mappings=[ON=“An”, OFF=“Aus”]
Switch item=S7_Keller label=“Reinigung UG (Wasch->Vorrat->Büro->Flur)” mappings=[ON=“An”, OFF=“Aus”]
Switch item=S7_Erd_carpet label=“Teppichreinigung EG” mappings=[ON=“An”, OFF=“Aus”]
Selection item=S7_actionsSegment label=“Selektive Reinigung EG ? [MAP(robo2.map):%s]” mappings=[16=“Diele”, 17=“Küche”, 18=“WC”, 19=“Wohnen”, “18,17,16”=“EG Fliessen”, CHARGE=“Ladestation”]
Switch item=S7_mopmode mappings=[“0”=“Standart”, “1”=“Gründlich”]
Selection item=S7_actionFan label=“Vacuum fan [MAP(robo.map):%s]” mappings=[101=“Silent”, 102=“Normal”, 103=“Power”, 104=“Full”, -1=“Program”]
Selection item=S7_water_box_mode label=“Wischwasser [MAP(robo.map):%s]” mappings=[200=“Aus”, 201=“Sanft”, 202=“Mittel”, 203=“Intensiv”]
Default item=S7_statusBat label=“Batterie Status [%1.0f%%]”
//Switch item=Test

        Text label="Wartung und Status Details" icon="status"{
                Default item=S7_statusBat               label="Batterie Status [%1.0f%%]"
                Default item=S7_statusStatus            label="Status [%s]"
                Default item=S7_carriage_status         label="Wischtuch [MAP(robo2.map):%s]"   
                Default item=S7_water_box_status        label="Wassertank [MAP(robo2.map):%s]"        
                Default item=S7_statusArea              label="Aktuelle Reinigungsfläche [%1.0f m²]"
                Default item=S7_statusTime              label="Aktuelle Reinigungsdauer [%1.0f Minuten]"
                Default item=S7_statusError             label="Fehler [%s]"
                Default item=S7_statusFanPow            label="Saugleistung [MAP(robo.map):%s]"  
                Default item=S7_statusClean             label="In Cleaning Status [MAP(robo.map):%s]" 
                Default item=S7_dndFunction             label="Do Not Disturb"                         
                Default item=S7_dndStart                label="DND Beginn [%s]"           
                Default item=S7_dndEnd                  label="DND Ende [%s]"   
                Default item=S7_miNetSSID               label="Netzwerk SSID [%s]"    
                Default item=S7_miNetBSSID              label="Netzwerk MAC Adresse [%s]"
                Text label="" icon="none"
                Text label="" icon="none"
                Default item=S7_consumableMainP             label="Hauptbürste [%1.0f%%]"
                Default item=S7_consumableMainT             label="Hauptbürste austauschen nach [%1.0f/300 Std.]"
                Default item=S7_consumableSideP             label="Seitenbürste [%1.0f%%]"
                Default item=S7_consumableSideT             label="Seitenbürste austauschen nach [%1.0f/200 Std.]"
                Default item=S7_consumableFilterP           label="Filter [%1.0f%%]"
                Default item=S7_consumableFilterT           label="Filter austauschen nach [%1.0f/150 Std.]"
                Default item=S7_consumableSensorP           label="Sensoren [%1.0f%%]"
                Default item=S7_consumableSensorT           label="Sensoren reinigen nach [%1.0f/30 Std.]"
                Switch item=S7_ConsumablesConsumableReset   label="Reset [MAP(robo2.map):%s]"  mappings=[none="Aus", "main_brush_work_time"="Hauptbürste", "side_brush_work_time"="Seitenbürste", "filter_work_time"="Filter", "sensor_dirty_time"="Sensoren"]
            }
        Image 	item=S7_map 
    }

Cheers
Sascha

2 Likes

Thank you @S_Schlawjinski!

@marcel_verpaalen the “get_water_box_custom_mode” command was the right way to control the mop mode. As I’ve written, this command sets the amount of water the Roborock is using for cleaning the floor. I didn’t know, that this is also the equivalent to the mop cleaning mode in the Xiaomi Home App - my bad. Nervermind, thank you!

Is there any chance to get a list of valid commands for a model (for S6MaxV for example)?

what is the model for that one (not the commercial name). This is what I have for the regular s6
note: this is not an official list, just commands I extracted from the source code

   {
        "model": "roborock.vacuum.s6",
        
        "commands": [
            "set_clean_motor_mode",
            "set_camera_status",
            "set_custom_mode",
            "set_water_box_custom_mode",
            "set_timer",
            "set_dnd_timer",
            "set_timezone",
            "set_app_timezone",
            "set_carpet_mode",
            "set_lab_status",
            "set_server_timer",
            "set_fds_endpoint",
            "set_led_status",
            "set_customize_clean_mode",
            "set_timer_dup",
            "get_camera_status",
            "get_timer_summary",
            "get_timer_detail",
            "get_prop",
            "get_status",
            "get_map",
            "get_map_v1",
            "get_map_v2",
            "get_custom_mode",
            "get_water_box_custom_mode",
            "get_clean_summary",
            "get_clean_record",
            "get_clean_record_map",
            "get_clean_record_map_v2",
            "get_consumable",
            "get_timer",
            "get_dnd_timer",
            "get_serial_number",
            "get_log_upload_status",
            "get_sound_progress",
            "get_current_sound",
            "get_timezone",
            "get_carpet_mode",
            "get_sound_volume",
            "get_fw_features",
            "get_fresh_map",
            "get_persist_map",
            "get_room_mapping",
            "get_recover_maps",
            "get_recover_map",
            "get_map_status",
            "get_segment_status",
            "get_server_timer",
            "get_network_info",
            "get_led_status",
            "get_customize_clean_mode",
            "get_multi_maps_list",
            "get_multi_map"
        ]

“Roborock S6 MaxV” should be “roborock.vacuum.a10”

here you go

  {
        "model": "roborock.vacuum.a10-v2",
        "commands": [
            "set_clean_motor_mode",
            "set_camera_status",
            "set_clean_sequence",
            "set_homesec_password",
            "set_child_lock_status",
            "set_carpet_clean_mode",
            "set_ignore_identify_area",
            "set_custom_mode",
            "set_water_box_custom_mode",
            "set_timer",
            "set_dnd_timer",
            "set_timezone",
            "set_app_timezone",
            "set_carpet_mode",
            "set_lab_status",
            "set_server_timer",
            "set_fds_endpoint",
            "set_led_status",
            "set_customize_clean_mode",
            "set_timer_dup",
            "set_map_name",
            "get_prop",
            "get_camera_status",
            "get_timer_summary",
            "get_timer_detail",
            "get_testid",
            "get_clean_sequence",
            "get_turn_server",
            "get_device_sdp",
            "get_device_ice",
            "get_homesec_connect_status",
            "get_child_lock_status",
            "get_carpet_clean_mode",
            "get_random_pkey",
            "get_multi_maps_list",
            "get_photo",
            "get_multi_map",
            "get_status",
            "get_map",
            "get_map_v1",
            "get_map_v2",
            "get_custom_mode",
            "get_water_box_custom_mode",
            "get_clean_summary",
            "get_clean_record",
            "get_clean_record_map",
            "get_clean_record_map_v2",
            "get_consumable",
            "get_timer",
            "get_dnd_timer",
            "get_serial_number",
            "get_log_upload_status",
            "get_sound_progress",
            "get_current_sound",
            "get_timezone",
            "get_carpet_mode",
            "get_sound_volume",
            "get_fw_features",
            "get_fresh_map",
            "get_persist_map",
            "get_room_mapping",
            "get_recover_maps",
            "get_recover_map",
            "get_map_status",
            "get_segment_status",
            "get_server_timer",
            "get_network_info",
            "get_led_status",
            "get_customize_clean_mode"
        ]
    },
1 Like

Perfect! Thanks a lot!

Can you feedback what is the response to a get_fw_features command. I’m curious if we can use that for future binding improvements

I’m getting just an array of ints as result:

{"id":3047,"result":[111,112,113,114,115,116,117,118,119,120,122,123,124,125],"exe_time":101}