Токен miIO-устройства
Токен - это уникальная 32-ухзначная последовательность символов, используемая для формирования ключа шифрования.
Наличие и знание токена - это обязательное условие успешного управления miIO-устройством (далее устройство).
В целом процедура добавления нового устройства в приложение Mihome выглядит так:
- 1. Включаем новое устройство в сеть. Оно создает свою открытую точку доступа.
2. Приложение Mihome производит поиск новых wifi-сетей, и если находит, то предлагает добавить устройство.
3. При добавлении телефон подключается к точке доступа, созданной устройством.
4. Mihome посылает hello-пакет устройству.
5. Устройство, получив hello-пакет, отправляет ответ на него, в котором содержится токен.
6. Mihome получает ответ, сохраняет токен в свою базу данных и отправляет устройству команду на подключение к wifi-сети и пароль от нее.
7. Устройство перезагружается и цепляется к целевой wifi-сети. Телефон также переключается обратно на основную точку доступа.
8. Mihome и устройство обмениваются пакетами по протоколу miIO, зашифрованного на основе полученного ранее токена.
После привязки устройства к Mihome устройства в большинтсве случаев перестают транслировать свой токен в ответ на hello-пакеты. Это зависит от логики, зашитой в прошивку устройства, и версии этой прошивки. Одни устройства всегда, на любой версии прошивки, открыто отдают свой токен. Вторые отдают токен только до определенной версии прошивки, а после обновления перестают. Ну а третьи сообщают свой токен только в режиме инициализации, т.е. до привязки к Mihome и подключения к wifi-сети.
Исходя из вышеуказанной процедуры, можно рассмотреть несколько вариантов получения токена устройства.
- 1. Произвести поиск устройств в сети с помощью handshake discover.
2. Извлечь токены из базы данных или кеш-файлов приложения Mihome на смартфоне.
3. Сбросить устройство (или удалить из Mihome) и получить токен в режиме инициализации устройства.
Обновлено 20.03.2018.
4-ый простой способ получить токены - воспользоваться сборкой Mihome от vevs. (только для андроида)
Брать здесь
http://www.kapiba.ru/2017/11/mi-home.html Если зайти в раздел "Информация о сети" нужного устройства, то увидим там заветный токен. Бонусом получаем руссифицированный Mihome.
Рассмотрим эти варианты подробнее.
1. Поиск устройств в сети (handshake discover)
При наличии ПК с Windows самый простой способ - это поиск через приложение MiHomeAdmin https://majordomo.smartliving.ru/forum/ ... 190#p72228.
Другой способ - через консольную php-утилиту. Для поиска miIO-устройств необходимо на компьютере с установленным PHP и подключенном к локальной сети выполнить в консоли команду:
Результатом команды будет список найденных устройств и в случае успеха их токенов. Если устройство не транслирует свой токен, то значение будет заполнено нулями, и в таком случае выяснять токен придется другими способами.
- discoverall.png (8.5 КБ) 28995 просмотров
Можно не опрашивать все устройства в сети, а отправить запрос адресно на конкретный IP:
Код: Выделить всё
php miio-cli.php --discover 192.168.1.47 --debug
Помимо консольной утилиты
miio-cli.php можно воспользоваться кросс-платформенным приложением
Packet Sender или аналогичными утилитами для смартфонов (например Packet Handler для андроида). В качестве отправляемого сообщения указать "
21310020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF". Остальные настройки наглядно представлены на скриншотах.
- packsender1.png (208.63 КБ) 28995 просмотров
- packethandler1.png (78.24 КБ) 28995 просмотров
- packethandler2.png (85.8 КБ) 28995 просмотров
2. База данных и кеш-файлы Mihome
Внимание! Для этого способа версия Mihome д.б. 5.0.29 и ниже.
На андроид смартфоне с рутом в папке
/data/data/com.xiaomi.smarthome/databases/ нужно найти файл базы данных приложения
miio2.db и скопировать его в любую пользовательскую папку. Затем с помощью приложения
aSQLiteManager открыть эту базу и в таблице
devicerecord найти столбец
token. В нем и будут токены всех устройств.
Чтобы скопировать файл базы данных на нерутованных смартфонах, нужно включить режим USB-отладки и подключиться по ADB. Затем в консоли ADB сделать резервную копию приложения Mihome командой
Код: Выделить всё
adb backup -noapk com.xiaomi.smarthome -f backup.ab
Полученный архив распаковывается java-утилитой
ADB Backup Extractor Код: Выделить всё
java.exe -jar abe.jar unpack backup.ab backup.tar
Файл
backup.tar открываем обычным архиватором (7-zip) и ищем там базу
miio2.db. Для просмотра базы на ПК можно воспользоваться
SQLite browser.
- miio2db.png (52.83 КБ) 28995 просмотров
- sqlite.png (97.96 КБ) 28995 просмотров
Аналогичную процедуру можно выполнить с помощью утилиты
MiToolkit. Суть та же, что и через ADB, только через windows-приложение, чтобы не ковыряться в консоли.
Условия:
- Установленные на ПК ADB-драйвера смартфона.
- Установленная на ПК Java.
- На смартфоне включена отладка через USB и разрешено подключение с ПК.
- И, разумеется, смартфон подключен по USB к ПК.
Скачиваем на ПК утилиту
MiToolkit 1.5 и распаковываем архив. Запускаем
MiToolkit.exe.
Переключаем на английский язык и нажимаем
Extract Token.
- mitoolkit_1.png (12.28 КБ) 28574 просмотра
Появится окно с описанием процесса. В нем снова нажимаем
Extract Token.
- mitoolkit_2.png (22.05 КБ) 28574 просмотра
Через некоторое время на телефоне запустится приложение Mihome, а на ПК появится предупреждение, что ни в коем случае не ставить пароль на резервную копию приложения Mihome. Нажимаем
ОК.
- mitoolkit_3.png (6.28 КБ) 28574 просмотра
Далее на смартфоне появится сообщение о подтверждении создания резервной копии приложения Mihome. Оставляем поле ввода пароля пустым и тапаем
Создать резервную копию данных.
- mitoolkit_6.png (72.29 КБ) 28574 просмотра
После успешной архивации на ПК появится соответствующее сообщение. Нажимаем
ОК и ждем результата.
- mitoolkit_4.png (8.38 КБ) 28574 просмотра
По окончанию экспорта устройств из базы приложения в основном окне будет заполнено соответствующее поле. Если устройство много, то нужно прокрутить список вниз. Полоса прокрутки при этом не отображается, но они там есть. ))
- mitoolkit_5.png (30.68 КБ) 28574 просмотра
На рутованных смартфонах токены также можно найти в файлах кеша
/data/data/com.xiaomi.smarthome/cache/smrc4-cache. Например, через тот же ADB это выглядит так:
Код: Выделить всё
adb root
adb shell
cd /data/data/com.xiaomi.smarthome/cache/smrc4-cache
grep -nr token .
3. Сброс устройства и последующая инициализация
Здесь все то же самое, что и в первом варианте. За исключением того, что предварительно нужно подключиться к открытой точке доступа, которую создает не настроенное miIO-устройство, и выяснить какие IP-адреса выданы.
Также есть приложение для Windows
MiHomeAdmin https://majordomo.smartliving.ru/forum/ ... 190#p72228.
Но у этого способа есть один нюанс - некоторые хитрожопые девайсы меняют свой токен в момент привязки к Mihome. Для таких только один вариант - база Mihome. Так отличаются пылесос, вайфай-радио, и возможно какие-то другие.
- wifi_ap.png (43.9 КБ) 28995 просмотров