15 KiB
layout, title, description, date, sidebar, comments, sharing, footer, logo, ha_category, ha_release, ha_iot_class
layout | title | description | date | sidebar | comments | sharing | footer | logo | ha_category | ha_release | ha_iot_class |
---|---|---|---|---|---|---|---|---|---|---|---|
page | Xiaomi Mi Robot Vacuum | Instructions on how to integrate your Xiaomi Mi Robot Vacuum within Home Assistant. | 2018-06-03 11:30 | true | false | true | true | xiaomi.png | Vacuum | 0.51 | Local Polling |
The xiaomi_miio
vacuum platform allows you to control the state of your Xiaomi Mi Robot Vacuum.
Currently supported services are:
start
pause
stop
return_to_base
locate
clean_spot
set_fan_speed
- remote control of your robot.
{% linkable_title Configuration %}
Please follow Retrieving the Access Token to retrieve the API token used in
configuration.yaml
.
To add a vacuum to your installation, add the following to configuration.yaml
:
vacuum:
- platform: xiaomi_miio
host: 192.168.1.2
token: YOUR_TOKEN
{% configuration %} host: description: The IP address of your robot. required: true type: string token: description: The API token of your robot. required: true type: string name: description: The name of your robot. required: false type: string default: Xiaomi Vacuum cleaner {% endconfiguration %}
{% linkable_title Platform Services %}
In addition to all of the services provided by the vacuum
component (start
, pause
, stop
, return_to_base
, locate
, set_fan_speed
and send_command
), the xiaomi
platform introduces specific services to access the remote control mode of the robot. These are:
xiaomi_remote_control_start
xiaomi_remote_control_stop
xiaomi_remote_control_move
xiaomi_remote_control_move_step
{% linkable_title Service vacuum.xiaomi_remote_control_start
%}
Start the remote control mode of the robot. You can then move it with remote_control_move
; when done, call remote_control_stop
.
Service data attribute | Optional | Description |
---|---|---|
entity_id |
yes | Only act on a specific robot; default targets all |
{% linkable_title Service vacuum.xiaomi_remote_control_stop
%}
Exit the remote control mode of the robot.
Service data attribute | Optional | Description |
---|---|---|
entity_id |
yes | Only act on a specific robot; default targets all |
{% linkable_title Service vacuum.xiaomi_remote_control_move
%}
Remote control the robot. Please ensure you first set it in remote control mode with remote_control_start
.
Service data attribute | Optional | Description |
---|---|---|
entity_id |
yes | Only act on a specific robot; default targets all |
velocity |
no | Speed: between -0.29 and 0.29 |
rotation |
no | Rotation: between -179 degrees and 179 degrees |
duration |
no | The number of milliseconds that the robot should move for |
{% linkable_title Service vacuum.xiaomi_remote_control_move_step
%}
Enter remote control mode, make one move, stop, and exit remote control mode.
Service data attribute | Optional | Description |
---|---|---|
entity_id |
yes | Only act on a specific robot; default targets all |
velocity |
no | Speed: between -0.29 and 0.29 |
rotation |
no | Rotation: between -179 degrees and 179 degrees |
duration |
no | The number of milliseconds that the robot should move for |
{% linkable_title Attributes %}
In addition to all of the attributes provided by the vacuum
component,
(battery_icon
, cleaned_area
, fan_speed
, fan_speed_list
, and params
), the xiaomi
platform introduces specific attributes. These are:
cleaning_time
do_not_disturb
main_brush_left
side_brush_left
filter_left
cleaning_count
total_cleaned_area
total_cleaning_time
The following table shows the units of measurement for each attribute:
Attribute | Unit of measurement | Description |
---|---|---|
do_not_disturb |
DND mode on / off | |
cleaning_time |
minutes | Last / actual cleaning time in minutes |
cleaned_area |
square meter | Last / actual cleaned area in square meters |
main_brush_left |
hours | Hours left until a change of the main brush is needed |
side_brush_left |
hours | Hours left until a change of the side brush is needed |
filter_left |
hours | Hours left until a change of the filter is needed |
cleaning_count |
Number of total cleaning cycles | |
total_cleaned_area |
square meter | Total cleaned area in square meters |
total_cleaning_time |
minutes | Total cleaning time in minutes |
{% linkable_title Retrieving the Access Token %}
As per [`python-miio` issue 185](https://github.com/rytilahti/python-miio/issues/185) the Android Mi Home app no longer stores the token within the database (it's retrieved from Xiaomi servers from version 5.0.31+). Currently, the only known fix is to uninstall, then install a downgraded version of the apk. Apkmirror is a trusted source for older versions of the app. [Mi-Home version 5.0.30](https://www.apkmirror.com/apk/xiaomi-inc/mihome/mihome-5-0-30-release/) is confirmed as working for the following Android methods. Using an older version than 5.0.30 is not recommended as it might lack support for some newer devices like the Roborock S50.
The iPhone app still stores the token in the SQLite db as of v4.10.2 (Dec 22, 2018).
This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuum, Mi Robot 2 (Roborock) Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security method and requires a `key` (16 alphanumeric chars), which can be obtained
easily via a hidden menu item at the Mi-Home app or using the `miio` command line tool.
{% linkable_title Miio command line tool %}
You can install the command line tool using the following command:
npm install -g miio
Discovering devices on the current network:
miio discover
This will list devices that are connected to the same network as your computer. Let it run for a while so it has a chance to reach all devices, as it might take a minute or two for all devices to answer.
The commands outputs each device on this format:
Device ID: 48765421
Model info: zhimi.airpurifier.m1
Address: 192.168.100.9
Token: token-as-hex-here via auto-token
Support: At least basic
The information output is:
Device ID
- The unique identifier of the device, does not change if the device is reset.Model ID
- The model id if it could be determined, this indicates what type of device it is.Address
- The IP that the device has on the network.Token
- The token of the device or???
if it could not be automatically determined.
{% linkable_title Windows and Android %}
To fetch the token follow these instructions depending on your mobile phone platform.
- Configure the robot with the Mi-Home app.
- Download and extract the MiToolKit.zip.
- Enable developer mode and USB debugging on the Android phone and plug it into the computer.
- Change the MiToolKit language to English if you need to.
- Click "Extract Token".
- On the phone, you must confirm the backup. DO NOT enter any password and press the button to make the backup.
- Once you have confirmed the backup the token extraction will begin, it should appear in the MiToolKit shortly.
- If you don't get a token, close MiToolKit completely, delete the folder MiToolkit\apps\com.xiaomi.smarthome and relaunch MiToolKit to force recreate a new backup (sometimes the files would not be overwritten before deleting the old ones).
{% linkable_title Linux and Android (not rooted) %}
Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from an SQLite file inside your phone.
Before you begin you need to install libffi-dev
and libssl-dev
by running the command below. This is needed for python-miio
to be installed correctly.
sudo apt-get install libffi-dev libssl-dev
If your Home Assistant installation is running in a virtualenv, make sure you activate it by running the commands below.
sudo -u homeassistant -H -s
source /srv/homeassistant/bin/activate
To fetch the token follow these instructions depending on your mobile phone platform.
- Configure the robot with the Mi-Home app.
- Enable developer mode, USB debugging and plug the Android phone into the computer.
- Get ADB by running
apt-get install android-tools-adb
orapt-get install adb
. adb devices
should list your device. Consult the ADB manual if necessary.- Issue a backup command via adb:
adb backup -noapk com.xiaomi.smarthome -f backup.ab
(set a password if prompted on your phone). Some devices may require single quotes in the commandadb backup '-noapk com.xiaomi.smarthome -f backup.ab'
. - Download the 'ADB Backup Extractor'.
- Extract the data from the backup: (enter the password, if prompted)
java -jar Android\ Backup\ Utilities/Android\ Backup\ Extractor/android-backup-extractor-20171005-bin/abe.jar unpack backup.ab unpacked.tar
- Untar the unpacked data:
tar -xvf unpacked.tar
. - The following command returns the token for your Xiaomi vacuum bot:
sqlite3 apps/com.xiaomi.smarthome/db/miio2.db 'select token from devicerecord where name like "%Vacuum%";'
{% linkable_title Linux and Android (rooted!) %}
Follow the pairing process using your phone and Mi-Home app. You will be able to retrieve the token from an SQLite file inside your phone.
Before you begin you need to install libffi-dev
and libssl-dev
by running the command below. This is needed for python-miio
to be installed correctly.
sudo apt-get install libffi-dev libssl-dev
If your Home Assistant installation is running in a virtualenv, make sure you activate it by running the commands below.
sudo -u homeassistant -H -s
source /srv/homeassistant/bin/activate
To fetch the token follow these instructions depending on your mobile phone platform.
- Configure the robot with the Mi-Home app.
- Enable developer mode, USB debugging and root permission only for ADB on the Android phone and plug it into the computer.
- Get ADB (e.g, using
apt-get install android-tools-adb
). - The command
adb devices
should list your device. - The command
adb root
(does work for development builds only: ones withro.debuggable=1
). - The command
adb shell
(for those using Magisk based root the this command won't work. After entering a shell, typesu
to enter the root shell and try again). - The following command returns a list of all registered devices including IP address and token:
echo "select name,localIP,token from devicerecord;" | sqlite3 /data/data/com.xiaomi.smarthome/databases/miio2.db
{% linkable_title iOS %}
- Configure the robot with the Mi-Home app.
- Using iTunes, create an unencrypted backup of your iPhone.
- Install iBackup Viewer, open it, and open your backup.
- Open the "Raw Data" module.
- Navigate to
com.xiaomi.mihome
. - Search for a file that looks like this:
123456789_mihome.sqlite
(Note:_mihome.sqlite
is not the correct file). - Save this file to your filesystem.
- Install DB Browser for SQLite.
- Open DB Browser and load the
.sqlite
file you saved from your backup. - Click on the
Execute SQL
tab. - Input and run this query:
SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%vacuum%"
- Copy the returned 32-digit hexadecimal string to your clipboard.
- Open
Terminal
and execute this command:echo '0: <YOUR HEXADECIMAL STRING>' | xxd -r -p | openssl enc -d -aes-128-ecb -nopad -nosalt -K 00000000000000000000000000000000
- Use the resulting string as your token.
{% linkable_title Bluestacks %}
- Configure the robot with the Mi-Home app.
- Install BlueStacks.
- Set up the Mi-Home app in BlueStacks and login to synchronize devices.
- Use BlueStacks Tweaker to access the filesystem and retrieve the token.
{% linkable_title Selecting token manually (Windows and Android) %}
The following instruction explained an alternative method, in case the MiToolKit didn't work.
Software Required:
- Android ADB is contained in Android SDK
- Mi-Home version 5.0.30
- Android Backup Extractor
- SQLite Browser
Steps to take:
- Install an old Version of MiHome (e.g. Mi-Home version 5.0.30) on your Android-Device.
- Open MiHome, log-in and add your devices.
- Enable USB-Debugging on your Android.
- Create a backup from your MiHome App, by using adb:
Now the backup App opens on you Android-Device. You don't need to set a password, just click save.adb backup com.xiaomi.smarthome
- Extract the backup-file with android-backup-extractor:
After that, extract the file with WinRAR, 7-Zip (or similar).java -jar abe.jar unpack backup.ab backup.tar
- Go to
\apps\com.xiaomi.smarthome\db
. - Open
miio2.db
with the SQLite Browser. - You can find your device tokens in
devicerecord
table.