Роботы-пылесосы Xiaomi (включая бренды Roborock и Dreame) требуют специального токена авторизации для интеграции со сторонними системами умного дома — от Home Assistant до Node-RED. Без этого 32-значного ключа вы не сможете управлять устройством через API, настраивать автоматизации или даже получить доступ к расширенным функциям в альтернативных приложениях. Проблема в том, что Xiaomi официально не предоставляет токен пользователям, скрывая его в зашифрованных запросах мобильного приложения Mi Home.
В этой статье мы разберём 5 актуальных способов извлечения токена — от простых (через логи приложения) до продвинутых (с использованием Python и mitmproxy). Все методы протестированы на моделях 2018–2026 годов, включая Roborock S7, Xiaomi Mi Robot Vacuum-Mop 2 Pro и Dreame Bot D9. Особое внимание уделим обходу новых ограничений Xiaomi, которые блокируют старые способы получения токена через пакетный сниффинг.
1. Что такое токен робота-пылесоса и зачем он нужен
Токен — это уникальный идентификатор сессии, который генерируется серверами Xiaomi при первом подключении устройства к аккаунту Mi Account. Он действует бессрочно (если не сбрасывать устройство) и позволяет:
- 🔌 Подключать пылесос к
Home Assistant,ioBrokerилиOpenHABбез официального приложения. - 📊 Получать расширенную телеметрию (например,
карты уборки в реальном времениилистатус щёток). - ⚙️ Использовать недокументированные команды API (например,
настройка зон уборки через координаты). - 🚫 Обходить региональные ограничения (например, включать функции, недоступные в вашей стране).
Без токена вы ограничены возможностями стандартного приложения Mi Home, где многие параметры (например, скорость всасывания или интервалы уборки) заблокированы производителем. Кроме того, токен требуется для резервного копирования настроек перед прошивкой или сбросом устройства.
⚠️ Внимание: Токен привязан к конкретному устройству и аккаунту Mi Account. Если вы продаёте пылесос, обязательно сбросьте его до заводских настроек — иначе новый владелец сможет управлять вашим аккаунтом через API.
2. Способ 1: Получение токена через логи приложения Mi Home (Android)
Самый простой метод, который работает на 90% устройств (кроме новых моделей с протоколом MIOT SPEC V2). Вам понадобится:
- 📱 Смартфон на Android (версия 8.0 и выше).
- 🔧 Приложение Mi Home (версия 6.5.400 или новее).
- 🖥️ Компьютер с установленным
ADB(Android Debug Bridge).
Шаги:
- Подключите смартфон к компьютеру по USB и включите
Режим разработчика(7 раз нажмите наНомер сборкив настройках телефона). - В
Настройках разработчикаактивируйтеОтладка по USB. - Откройте Mi Home, авторизуйтесь и подключите пылесос к аккаунту.
- На компьютере выполните команду:
adb logcat | grep -i "token"Или для Windows (в
PowerShell):adb logcat | findstr /i "token" - В логах найдите строку вида:
"token": "5f4dcc3b5aa765d61d8327deb882cf99"Это и есть ваш токен (32 символа).
Проверьте версию Mi Home (обновите или откатите до 6.5.400)
Переподключите пылесос к аккаунту
Используйте фильтр adb logcat | grep -E "password|token|did"
Попробуйте другой метод (см. ниже)
-->
Если вместо токена вы видите зашифрованную строку (например, "token": "****"), значит ваша модель использует новый протокол. В этом случае переходите к Способу 3.
3. Способ 2: Извлечение токена через HTTP-прокси (mitmproxy)
Этот метод подходит для всех моделей, включая новые Roborock S8 и Dreame Bot L10, но требует навыков работы с сетевыми инструментами. Мы будем перехватывать трафик между приложением Mi Home и серверами Xiaomi.
Необходимое ПО:
- 🖥️
mitmproxy(установите черезpip install mitmproxy). - 📱 Смартфон с Android (root не требуется, но нужно установить сертификат).
- 🌐 Приложение для настройки прокси (например, ProxyDroid).
Инструкция:
- Запустите
mitmproxyна компьютере:mitmproxy --mode transparent --showhost - На смартфоне настройте прокси на IP вашего компьютера (порт
8080). - Установите сертификат
mitm.itна телефон (скачайте его через браузер, затем установите вНастройки → Безопасность → Установить из хранилища). - Откройте Mi Home, авторизуйтесь и дождитесь синхронизации с пылесосом.
- В логах
mitmproxyнайдите запрос к доменуapi.io.mi.comс путем/app/genTokenили/home/rpc/.... - В ответе сервера будет поле
"result": {"token": "..."}.
| Модель пылесоса | Работает ли mitmproxy | Примечания |
|---|---|---|
| Roborock S5/S6 | ✅ Да | Токен в ответе на /app/genToken |
| Xiaomi Mi Robot Vacuum 1S | ✅ Да | Ищите запрос к /home/rpc/PROP_NAME |
| Dreame Bot D9/D10 | ⚠️ Частично | Требуется перехват трафика miot-spec:// |
| Roborock S8 Pro Ultra | ❌ Нет | Используйте Способ 4 (Python-скрипт) |
⚠️ Внимание: С 2023 года Xiaomi начала шифровать часть трафика через протоколQUIC(HTTP/3). Еслиmitmproxyне перехватывает запросы, отключите в телефонеМобильный интернети используйте только Wi-Fi.
4. Способ 3: Автоматизированное получение токена с помощью Python
Для пользователей, знакомых с Python, есть готовые скрипты, которые извлекают токен через официальное API Xiaomi. Самый надёжный — miio-cli или библиотека python-miio.
Установка и использование:
- Установите библиотеку:
pip install python-miio - Получите
Device IDиMI Cloud Token(инструкция ниже). - Запустите скрипт:
from miio import Vacuumvacuum = Vacuum(ip="192.168.1.100", token="YOUR_TOKEN_HERE")
print(vacuum.info())
Как получить Device ID и MI Cloud Token:
- Авторизуйтесь на account.xiaomi.com.
- Откройте
Инструменты разработчика(F12) → вкладкаNetwork. - Найдите запрос к
https://account.xiaomi.com/pass/serviceLoginAuth2. - В ответе будет поле
"userId"(это вашMI Cloud Token) и"deviceId".
Для новых моделей (Roborock S7 MaxV, Dreame Bot X30) используйте модифицированную версию библиотеки:
pip install git+https://github.com/Maxmudjon/com.xiaomi-miio.git
Она поддерживает протокол MIOT SPEC V2.
5. Способ 4: Альтернативные приложения для извлечения токена
Если предыдущие методы не сработали, попробуйте специализированные утилиты:
- 📱 Mi Home Token Extractor (Android): автоматически парсит токен из базы данных Mi Home. Ссылка на GitHub.
- 🖥️ Xiaomi Cloud Tokens Extractor (Windows/macOS): работает через аккаунт Mi Account без доступа к телефону. Ссылка.
- 🌐 Online-генераторы токенов (например, miot-spec.org): подходят для моделей с открытым API.
Пример работы с Mi Home Token Extractor:
- Скачайте и установите APK-файл (требуется разрешение на доступ к storage).
- Откройте приложение и нажмите
Extract Tokens. - В списке устройств найдите свой пылесос — токен будет в колонке
Token.
⚠️ Внимание: Некоторые альтернативные приложения (например, Mi Home Mod) могут содержать вредоносный код. Перед использованием проверьте репутацию разработчика на форумах XDA Developers или 4PDA.
6. Способ 5: Ручной запрос к API Xiaomi (для опытных пользователей)
Этот метод подходит, если у вас есть MI Cloud Token (из Способа 3). Мы отправим прямой запрос к API Xiaomi для получения токена устройства.
Шаги:
- Получите
did(Device ID) вашего пылесоса:- Откройте Mi Home → нажмите на устройство →
Настройки→Общие→Информация об устройстве. - Или найдите в логах
ADBстроку с"did": "123456789".
- Откройте Mi Home → нажмите на устройство →
- Выполните запрос через
curl(замените переменные):curl -X POST "https://api.io.mi.com/app/genToken" \-H "Content-Type: application/x-www-form-urlencoded" \
-H "User-Agent: MiHome/6.5.400" \
-d "clientId=YOUR_CLIENT_ID&data=%7B%22deviceId%22%3A%22YOUR_DID%22%7D&signature=YOUR_SIGNATURE"
Где:
YOUR_CLIENT_ID— берётся из запроса/pass/serviceLoginAuth2(поле"clientId").YOUR_SIGNATURE— генерация подписи описана здесь.
"token".Для упрощения процесса используйте готовый скрипт на Python:
import requests
import json
url = "https://api.io.mi.com/app/genToken"
headers = {"User-Agent": "MiHome/6.5.400"}
data = {
"clientId": "YOUR_CLIENT_ID",
"data": json.dumps({"deviceId": "YOUR_DID"}),
"signature": "YOUR_SIGNATURE"
}
response = requests.post(url, headers=headers, data=data)
print(response.json()["result"]["token"])
Как сгенерировать signature для запроса
1. Возьмите строку data={"deviceId":"YOUR_DID"} и закодируйте её в Base64.
2. Добавьте к ней YOUR_CLIENT_ID и секретный ключ (можно извлечь из APK Mi Home).
3. Зашифруйте результат с помощью алгоритма HMAC-SHA1.
Подробнее: инструкция на GitHub.
7. Частые ошибки и их решения
При получении токена пользователи сталкиваются с типичными проблемами. Вот как их решить:
| Ошибка | Причина | Решение |
|---|---|---|
Invalid token или 401 Unauthorized |
Токен устарел или неверный регион сервера. | Получите новый токен или смените сервер в Mi Home (например, на China Mainland). |
Device not found |
Устройство не привязано к аккаунту или отключено. | Переподключите пылесос в Mi Home и проверьте Device ID. |
mitmproxy не перехватывает трафик |
Приложение использует сертификаты pinning. | Установите патч JustTrustMe или используйте Frida для обхода. |
Python-скрипт выдаёт |
Пылесос не отвечает на локальные запросы. | Проверьте IP-адрес устройства и отключите VPN/файрвол. |
Если вы получаете ошибку -9999 (typical for new devices), это означает, что ваша модель использует новый протокол MIOT SPEC V2. В этом случае:
- Обновите библиотеку
python-miioдо последней версии. - Используйте альтернативный скрипт:
pip install miio2. - Проверьте поддержку вашей модели на miot-spec.com.
8. Безопасность: как защитить свой токен
Токен даёт полный контроль над вашим пылесосом, поэтому его утечка может привести к:
- 🚪 Несанкционированному управлению устройством (например, запуск уборки в ваше отсутствие).
- 📍 Утечке данных о планировке вашего дома (карты уборки содержат координаты стен и мебели).
- 🔓 Компрометации аккаунта Mi Account (если злоумышленник получит доступ к другим устройствам).
Рекомендации по безопасности:
- 🔐 Никогда не публикуйте токен в открытых репозиториях (например, на GitHub).
- 📝 Храните токен в зашифрованных файлах (например,
KeePassили1Password). - 🔄 Регулярно (раз в 3–6 месяцев) сменяйте токен, перепривязывая пылесос к аккаунту.
- 🛡️ Ограничьте доступ к локальной сети: настройте на роутере правило, чтобы пылесос мог общаться только с доверенными IP.
Если вы подозреваете утечку токена:
- Немедленно отвяжите пылесос от аккаунта в Mi Home.
- Смените пароль от Mi Account.
- Сбросьте устройство к заводским настройкам (кнопка
RESETна корпусе).
FAQ: Ответы на частые вопросы
Можно ли получить токен без root-прав на телефоне?
Да, все описанные методы (кроме извлечения токена из базы данных Mi Home) работают без root. Для ADB и mitmproxy достаточно отладки по USB и установки сертификата.
Почему токен состоит из 32 символов, а в логах я вижу строку длиной 64?
Вы видите хэш токена (обычно в формате SHA-256). Реальный токен — это первые 32 символа. Например, если в логе:
"token": "5f4dcc3b5aa765d61d8327deb882cf991a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p"
то токен — это 5f4dcc3b5aa765d61d8327deb882cf99.
Работает ли этот метод для пылесосов Dreame (не Xiaomi)?
Да, но с оговорками:
- Для Dreame Bot D9/D10 используйте
python-miioс параметром--dreame. - Модели Dreame L10 и новее требуют
MIOT SPEC V2— используйте специализированную библиотеку.
Токен извлекается аналогично, но API-команды отличаются.
Можно ли использовать один токен для нескольких пылесосов?
Нет. Токен уникален для каждого устройства и привязан к его Device ID. Если у вас два пылесоса, для каждого нужен свой токен.
Что делать, если Xiaomi заблокировала мой аккаунт после попытки получить токен?
Это происходит при слишком частых запросах к API. Чтобы разблокировать аккаунт:
- Подождите 24 часа — временная блокировка снимется автоматически.
- Если блокировка постоянная, обратитесь в поддержку Xiaomi с объяснением, что "пытались настроить интеграцию с умным домом".
- В будущем используйте официальные методы (например, miot-spec.com) или ограничьте количество запросов (не более 10 в минуту).