Xiaomi, роботы, токены и все все все

Спойлер: не все токены одинаково полезны

Достался по случаю детектор качества воздуха Xiaomi PM2.5.

1538337617935

Попытался установить соответствующий компонент Home Assistant, но не тут-то было. Пыхтит в логах, ругается, но не работает:

Platform xiaomi_miio not ready yet. Retrying in 180 seconds

Покрутил и забыл. Пока на следующий день сервис мониторинга не стал присылать мне в ящик тревожные сообщения о повторяющихся ошибках в логах:

Timer got out of sync. Resetting

Причин у этой ошибки может быть много, я уже и думать забыл про активированный в настройках Air Quality Monitor. С ног сбился в поисках проблемы, но это оказался он. Отключил, забыл.

На выходных решил все же разобраться. Оказалось, что несмотря на то, что в документации к компоненту дана ссылка на получение токена для робота-пылесоса Xiaomi Robot Vacuum, токены для разных Wi-Fi устройств у Xiaomi отличаются, поэтому мой любовно хранимый в бабушкиной шкатулке токен от пылесоса здесь не прокатил. Пришлось заниматься заниматься раскопками.

Получение токена

С какого-то момента Xiaomi убрали из sqlite базы приложения Mi Home открыто лежащий токен и способ с расковыриванием бэкапа приложения на большом брате остался только для энтузиастов-некрофилов, готовых установить старую версию, извлечь токен и вернуть все как было. Этот способ был оставлен на самый конец, учитывая, что большинство подобных инструкций описывают добычу токена для робота-пылесоса, который у меня и так есть.

Затем очередь дошла до приложения от суровых арийских парней Flolevac, которое, по слухам, позволяет (позволяло) получить токен из файла экспорта конфигурации. Но и здесь ждал облом, потому что с какого-то момента конфигурация на SD карте стала храниться в зашифрованном виде.

Между делом был также опробован npm пакет miio, который вроде бы умеет извлекать токен в режиме исследования (discovery) домашней сети. Всё закончилось с ожидаемым результатом, даже подключение ноутбука с 5 GHz на 2.4, в котором живёт робот, не помогло, miio хранил гробовое молчание и делал вид, что в моей домашней сети нет даже духа устройств Xiaomi.

Выручила, на первый взгляд, стрёмная модификация Mi Home от одного энтузиаста расковыривания чужих apk файлов. Забегая вперёд, надо сказать ему спасибо, потому что всё получилось. А стрёмная эта затея тем, что “улучшенное” приложение представляет собой адский коктейль из неконтролируемого кода и огромного списка пермишенов, которых требует оригинальный Mi Home. Набравшись смелости я все же решился ее запустить на планшете, где нет никаких важных данных или приложений. И, о чудо, в окне “свойства сети” (на поиск которого также было убито довольно много времени) был найден искомый токен, который (сюрприз!) отличался от такового для пылесоса.

1538338114874

Важно: если при запуске приложения Mi Home указать регион Россия (как рекомендуемый) ни одного устройства, ранее зарегистрированного в регионе China (Mainland) найдено не будет. К счастью, это легко исправить установкой правильной локали.

Окно свойства сети уникальное для каждого устройства Mi Home, его можно вызвать из меню, в правом верхнем углу экрана конкретного устройства, будь то пылесос или сенсор качества воздуха.

1538337273624

1538337311847

Приложение можно найти на сайте автора, ставить на свой страх и риск.