Модуль Xiaomi miIO - Токены устройств

Xiaomi miIO Комментариев нет

Токены miIO-устройств

Токен - это уникальная 32-ухзначная последовательность символов, используемая для формирования ключа шифрования. Наличие и знание токена - это обязательное условие успешного управления miIO-устройством средствами модуля.

В целом процедура добавления нового устройства в приложение Mihome выглядит так:

  1. Включаем новое устройство в сеть. Оно создает свою открытую точку доступа.
  2. Приложение Mihome производит поиск новых wifi-сетей, и если находит, то предлагает добавить устройство.
  3. При добавлении телефон подключается к точке доступа, созданной устройством.
  4. Mihome посылает hello-пакет устройству.
  5. Устройство, получив hello-пакет, отправляет ответ на него, в котором содержится токен.
  6. Mihome получает ответ, сохраняет токен в свою базу данных и отправляет устройству команду на подключение к wifi-сети и пароль от нее.
  7. Устройство перезагружается и цепляется к целевой wifi-сети. Телефон также переключается обратно на основную точку доступа.
  8. Mihome и устройство обмениваются пакетами по протоколу miIO, зашифрованного на основе полученного ранее токена.
  9. После привязки устройства к Mihome устройства в большинстве случаев перестают транслировать свой токен в ответ на hello-пакеты. Это зависит от логики, зашитой в прошивку устройства, и версии этой прошивки. Одни устройства всегда, на любой версии прошивки, открыто отдают свой токен. Вторые отдают токен только до определенной версии прошивки, а после обновления перестают. Ну а третьи сообщают свой токен только в режиме инициализации, т.е. до привязки к Mihome и подключения к wifi-сети.

Исходя из вышеуказанной процедуры, можно рассмотреть несколько базовых подходов получения токенов устройств.

  1. Произвести поиск устройств в сети с помощью отправки широковещательного hello-пакета (handshake discover) и получить токен в ответном пакете от устройства.
  2. Извлечь токены из базы данных или кеш-файлов приложения Mihome на смартфоне.
  3. Сбросить устройство (или удалить из Mihome) и получить токен в режиме инициализации устройства аналогично первому способу через handshake discover.

Рассмотрим эти подходы подробнее.

Поиск устройств в сети (handshake discover)

Данный способ штатно предусмотрен в модуле Xiaomi miIO. Модуль выполняет периодический (или ручной) поиск устройств в домашней локальной сети, и если в ответных сообщениях от найденных устройств содержатся их токены, то модуль автоматически их получает и сохраняет в своих настройках.

Но, как было сказано ранее, не все так хорошо, как хотелось бы. Большинство устройств не сообщают открыто свои токены, поэтому приходится пользоваться другими способами.

База данных и кеш-файлы Mihome

Самый простой вариант - это воспользоваться кастомной сборкой Mihome от vevs (только для андроида).
Брать здесь http://www.kapiba.ru/2017/11/mi-home.html

В Mihome нужно зайти в раздел Информация о сети нужного устройства, в котором наряду с информацией о подключении к wifi точке доступа также будет строка с токеном. Бонусом получаем руссифицированный Mihome.

С другими вариациями этого подхода можно ознакомиться на Форуме.

Сброс устройства и последующая инициализация

Суть заключается в том, что предварительно нужно сбросить устройство (если оно уже было подключено к домашней сети), а затем подключиться к открытой точке доступа, которую оно создает в режиме инициализации.

В этом случае лучше воспользоваться ПК с wifi-адаптером и приложением для Windows MiHomeAdmin, которое можно скачать на Форуме. 

Если Windows не подходит, то можно воспользоваться утилитой miio-cli.php в составе библиотеки php-miio. Или кросс-платформенными приложениями (в т.ч. под iOS, Android), которые позволяют отправить UDP-пакет нужной нам структуры. Примерами таким приложений могут быть Packet SenderPacket Handler. Подробно эти варианты расписаны на Форуме.

Но у этого способа есть один нюанс - некоторые хитрые устройства меняют свой токен в момент последующей привязки к Mihome. Для таких устройств подойдет только вариант №2 - база Mihome. Так отличаются пылесос, wifi-радио и, возможно, еще какие-то другие.

Поделитесь в соц сетях

Теги: