Владельцы роботизированных пылесосов Xiaomi и Roborock часто сталкиваются с желанием интегрировать устройство в единую экосистему умного дома, выходящую за рамки стандартного китайского облака. Для связки с платформами вроде Home Assistant, Domoticz или для запуска локальных скриптов через miio критически важно знать уникальный идентификатор безопасности — токен. Стандартный путь получения этого ключа лежит через официальное приложение Mi Home, которое требует авторизации и привязки к серверу, что не всегда удобно или возможно в условиях ограниченной сети.
Однако существует альтернативный и более технический подход, позволяющий извлечь необходимые данные напрямую, минуя мобильное приложение и его ограничения. Этот метод базируется на анализе сетевого трафика или использовании локального API самого устройства, если оно уже подключено к сети. Токен представляет собой 32-символьную строку в шестнадцатеричном формате, которая служит ключом шифрования для всех команд, отправляемых пылесосу.
В данном руководстве мы детально разберем безопасные способы получения токена, используя только компьютер и базовые знания сетевых протоколов. Вы научитесь перехватывать handshake-пакеты и использовать специализированные утилиты командной строки для дешифровки данных. Это знание откроет вам полный контроль над устройством, позволяя автоматизировать уборку, создавать сложные сценарии и управлять пылесосом даже при отсутствии интернета.
Понимание архитектуры безопасности Xiaomi Mi IoT
Прежде чем приступать к извлечению ключей, необходимо разобраться в том, как Xiaomi обеспечивает безопасность своих устройств. Протокол взаимодействия строится на принципе локального шифрования, где каждый пакет данных (запрос или ответ) подписывается и шифруется с использованием уникального токена. Без этого ключа устройство просто игнорирует входящие команды, считая их нелегитимными.
Процесс авторизации обычно происходит в фоновом режиме при первом подключении через приложение. Мобильный телефон запрашивает токен у облачного сервера Xiaomi Cloud, получая его в ответ после проверки прав пользователя. Именно этот механизм мы пытаемся обойти или эмулировать. Понимание того, что токен хранится в памяти устройства и передается при каждом соединении, дает нам ключ к решению задачи.
⚠️ Внимание: Любые манипуляции с сетевыми протоколами и перехват трафика должны производиться только в вашей собственной локальной сети. Вмешательство в работу чужих сетей или устройств запрещено законом.
Важно отметить, что разные модели пылесосов (например, Roborock S5, Xiaomi Vacuum Mop или Dreame) могут использовать слегка различающиеся версии протокола miio. Однако базовый принцип получения токена остается неизменным: нам нужно стать "доверенным" клиентом в глазах пылесоса или подслушать диалог между уже доверенным устройством и сервером.
Почему Xiaomi скрывает токен?
Xiaomi использует токенизацию для предотвращения несанкционированного доступа к устройствам IoT. Если бы токен был статичным и известным, любой злоумышленник в радиусе действия Wi-Fi мог бы управлять вашим пылесосом. Динамическая выдача токена при привязке через приложение — это компромисс между удобством и безопасностью.
Метод перехвата трафика: анализ сетевого обмена
Наиболее надежный способ, не требующий root-прав на телефоне или сложных манипуляций с прошивкой самого пылесоса — это анализ сетевого трафика. Суть метода заключается в том, чтобы поставить компьютер между роутером и пылесосом (или между телефоном и роутером) и зафиксировать момент, когда устройство запрашивает или получает токен. Для этого используется программное обеспечение для сниффинга пакетов, например, Wireshark или tcpdump.
Процесс выглядит следующим образом: вы настраиваете свой компьютер как точку доступа или используете режим зеркалирования портов на управляемом коммутаторе. Затем инициируется процесс переподключения пылесоса или сброса настроек сети, чтобы заставить устройство заново запросить конфигурацию. В этот момент в эфир транслируются пакеты, содержащие искомую 32-символьную строку.
Для успешного перехвата вам потребуется:
- 💻 Компьютер с установленным Wireshark и правами администратора.
- 📡 Возможность поднять точку доступа с тем же SSID и паролем, что и у вашей основной сети (для перенаправления устройства).
- 🔌 Стабильное соединение между анализатором и целевым устройством.
После захвата пакетов необходимо отфильтровать трафик по протоколу UDP (обычно порт 54321) или искать HTTP-запросы к доменам mi.com или xiaomi.com. В теле ответа часто содержится JSON-структура, где поле token будет видно в открытом виде, если соединение не использует дополнительное шифрование SSL/TLS на этом этапе (что часто бывает при локальном обнаружении).
Использование утилит командной строки: Python и miio
Если метод с сниффером кажется вам слишком сложным, существует альтернатива, основанная на переборе или использовании уязвимостей в старых версиях прошивок, но более современный и легальный подход — это использование специализированных Python-библиотек. Библиотека python-miio является стандартом де-факто для работы с экосистемой Xiaomi и позволяет взаимодействовать с устройствами на низком уровне.
Для начала работы вам потребуется установить Python на ваш компьютер (версии 3.7 и выше) и установить необходимые зависимости. Этот метод часто требует, чтобы устройство уже было в сети, но не обязательно привязано к вашему аккаунту в приложении, если мы используем методы локального токена. Однако, чаще всего этот инструмент используется для валидации уже полученного токена или для его извлечения, если у вас есть доступ к файловой системе Android (через ADB).
Рассмотрим базовый сценарий использования утилиты для проверки связи. Если вы каким-либо образом получили предполагаемый токен (например, из резервной копии Android), вы можете проверить его работоспособность следующей командой:
miio --ip 192.168.1.X --token YOUR_TOKEN_HERE info
Если токен верен, устройство ответит подробной информацией о модели, версии прошивки и текущем статусе. Если же токен неверен, вы получите ошибку таймаута или authentication failed. Это мощный инструмент для тестирования гипотез при поиске ключа.
☑️ Подготовка окружения Python
Получение токена через Android Debug Bridge (ADB)
Один из самых эффективных способов, который формально не требует "отсутствия телефона" в момент настройки, но позволяет избежать использования Mi Cloud для извлечения токена — это доступ к внутренним базам данных Android-смартфона. Приложения Mi Home и Roborock хранят токены привязанных устройств в локальной базе данных SQLite на телефоне.
Чтобы воспользоваться этим методом, вам не нужен root-доступ, если вы используете возможности отладки по USB (ADB). Вы подключаете телефон к компьютеру, получаете доступ к файловой системе приложения (если оно не защищено сильно, что бывает на старых версиях Android) или делаете полный бэкап приложения, который затем разбираете на компьютере. В файле miio_store.db или аналогичном содержится таблица с токенами.
Последовательность действий выглядит так:
- Включите режим разработчика и отладку по USB на Android-устройстве.
- Подключите телефон к ПК и выполните команду
adb backup -f mihome.ab -noapk com.xiaomi.mihome. - Распакуйте полученный архив
.abв.tar, а затем извлеките базу данных. - Откройте базу данных любым SQLite-браузером и найдите строку
tokenдля вашего устройства.
⚠️ Внимание: На современных версиях Android (10 и выше) доступ к данным приложений через ADB без root-прав ограничен. В таких случаях метод может не сработать без предварительной подготовки или использования эмуляторов.
Этот метод хорош тем, что он дает вам "чистый" токен, который работает гарантированно, так как он взят непосредственно из источника истины — официального клиента. После извлечения вы можете использовать этот токен для интеграции в Home Assistant или другие системы, полностью отключив телефон от процесса управления.
Сравнение методов и выбор оптимального пути
Выбор метода зависит от вашей технической подготовки и имеющегося оборудования. Сниффинг трафика универсален, но требует хорошего понимания сетевых технологий. Работа с ADB проще для тех, кто знаком с Android-разработкой, но зависит от версии ОС. Использование Python-скриптов идеально для программистов.
Ниже приведена таблица, сравнивающая основные характеристики рассмотренных методов:
| Метод | Сложность | Необходимое ПО | Риск сброса |
|---|---|---|---|
| Сниффинг (Wireshark) | Высокая | Wireshark, Точка доступа | Низкий |
| ADB Backup | Средняя | ADB, SQLite Browser | Отсутствует |
| Python-miio | Средняя | Python, Терминал | Отсутствует |
| Официальное приложение | Низкая | Mi Home / Root | Отсутствует |
Стоит отметить, что для новых моделей пылесосов с обновленной системой безопасности Xiaomi IoT старые методы могут работать хуже. В таких случаях комбинация методов (например, получение токена через ADB и проверка через Python) дает наилучший результат.
Интеграция токена в системы умного дома
После того как вы успешно добыли 32-символьный ключ, наступает самый приятный этап — настройка интеграции. В Home Assistant это делается через интеграцию Xiaomi Miio. Вам потребуется ввести IP-адрес устройства и полученный токен в конфигурационный файл configuration.yaml или через графический интерфейс, если интеграция поддерживает ручной ввод.
Пример конфигурации для configuration.yaml:
vacuum:
- platform: xiaomi_miio
host: 192.168.1.XXX
token: YOUR_32_CHAR_TOKEN
name: Xiaomi Vacuum
После перезагрузки сервиса вы получите полный контроль над пылесосом. Вы сможете запускать уборку, отправлять в док, регулировать мощность всасывания и даже получать карту помещения в реальном времени. Это превращает обычный гаджет в полноценного участника умного дома, способного реагировать на события, например, начинать уборку, когда все ушли из дома.
⚠️ Внимание: При смене пароля Wi-Fi или переподключении пылесоса к новой сети токен может измениться. В таком случае процедуру извлечения придется повторить.
Не забывайте, что локальное управление через токен работает только внутри вашей сети. Для удаленного доступа вам потребуется настроить проброс портов (не рекомендуется из-за рисков безопасности) или использовать VPN, либо оставить шлюз Home Assistant доступным извне через безопасные каналы.
Часто задаваемые вопросы (FAQ)
Можно ли узнать токен, если пылесос никогда не подключался к интернету?
Да, это возможно. Токен генерируется при первой инициализации устройства. Если вы сможете перехватить пакет handshake при попытке подключения пылесоса к локальной сети (даже без выхода в глобальный интернет), вы сможете вычислить или перехватить токен, так как он необходим для локальной работы протокола MiIO.
Что делать, если токен перестал работать?
Токен может измениться после сброса устройства до заводских настроек (сброс Wi-Fi). В этом случае старый токен становится невалидным. Вам придется заново привязать устройство (хотя бы временно) или повторить процедуру сниффинга трафика в момент новой настройки сети.
Безопасно ли передавать токен сторонним интеграциям?
Токен — это ключ доступа к вашему устройству. Передавать его следует только доверенным open-source проектам с проверенной репутацией (как Home Assistant). Никогда не вводите токен на подозрительных сайтах или в непроверенных приложениях.
Работает ли этот метод для пылесосов Roborock?
Да, пылесосы Roborock используют тот же протокол miio и структуру токенов. Однако, некоторые новые модели могут требовать привязки через сервер Roborock, что усложняет получение локального токена без эмуляции официального клиента.