- PVSM.RU - https://www.pvsm.ru -

Есть такая замечательная библиотека python-miio [1], позволяющая управлять многими гаджетами Xiaomi: пылесосом, очистителем/увлажнителем воздуха, лампами и тд. В процессе чтения документации я наткнулся на в целом бесполезную, но занятную возможность заменить стандартную озвучку робота-пылесоса на свою. А поскольку на Гиктаймс мне доселе ничего подобного не попадалось, и бытовые гаджеты Xiaomi пользуются популярностью, я решил, что возможно описание процесса окажется для кого-то полезным.
Начинается все с библиотеки. Как минимум она хороша тем, что позволяет отказаться от проприетарного приложения Xiaomi и вообще закрыть IoT гаджетам доступ в интернет, ограничившись изолированной локалкой.
Помимо Python 3 для установки потребуются libffi-dev libssl-dev.
Выполняем:
pip3 install -U setuptools
pip3 install python-miio
На маке и Debian (Raspberry Pi) больше никаких зависимостей не потребовалось.
Для общения с девайсами Xiaomi нужно получить токены устройств (в данном случае пылесоса), это, пожалуй, самая унылая часть. Возможно, ее получится избежать, выполнив
mirobo discover --handshake 1
, но у меня данный способ не сработал, поэтому ставим официальное приложение MiHome, регистрируемся, добавляем пылесос штатным образом, затем
echo '0: <извлеченный_токен>' | xxd -r -p | openssl enc -d -aes-128-ecb -nopad -nosalt -K 00000000000000000000000000000000
adb backup -noapk com.xiaomi.smarthome -f backup.ab
с помощью ADB Backup Extractor извлекаем содержимое
java -jar Android Backup Utilities/Android Backup Extractor/android-backup-extractor-20171005-bin/abe.jar unpack backup.ab unpacked.tar
и распаковываем
tar -xvf unpacked.tar
из полученной БД с помощью, например, DB Browser for SQLite [2] извлекаем нужный нам токен (поле ZTOKEN).
Вместо просмотра полученных баз вручную, можно воспользоваться инструментом из библиотеки python-miio, должно работать с базами и с Android и с iOS:
miio-extract-tokens <файл_бд>
Самая скучная часть позади, впереди часть творческая.
Я воспользовался готовым скриптом [3]. Клонируем к себе, понадобится только папка dustcloud/devices/xiaomi.vacuum/audio_generator. Отредактируем скрипт generate_audio.py. Я все проделывал на Маке и, соответственно, использовал его генератор речи, но понадобилось внести пару правок:
84. os.system("say -v <голос> -o " + path + " --data-format=LEI16@22050 " + text)
С голосом все просто, выбираете тот, какой нравится (весь список можно посмотреть, набрав в Терминале)
say -v ?
Я поставил русский голос Milena. Обратите внимание на параметр --data-format, в оригинальном скрипте автор использует LEF32@22050, но у меня при таком атрибуте робот выдавал тишину. Глянув вывод ffmpeg, я увидел, что в оригинальной озвучке используется pcm_s16le, поэтому я сменил в скрипте параметр на LEI16, после чего все заработало. У меня первое поколение пылесоса, возможно на втором другой формат звуковых файлов, тем не менее, если робот молчит, рекомендую в первую очередь убедиться, что звуковые файлы имеют одинаковые параметры.
Поправив скрипт, идем в ./language, где хранятся списки фраз. Дублируем любую, переименовываем в audio_ru.csv и правим как душе угодно. После запускаем скрипт
./generate_audio.py
выбрав в интерактивном режиме наш файл с фразами (audio_ru.csv) и tts-движок. На выходе получим файл ru.pkg, который нужно залить на пылесос командой
mirobo install_sound ./ru.pkg
предварительно выполнив
export MIROBO_TOKEN=<токен>
и
export MIROBO_IP=<ip-адрес робота>
В принципе, все вышеописанное есть в документации к библиотеке python-miio, но, надеюсь, данный мини-мануал все же кому-нибудь пригодится) Пользуясь случаем, хочу спросить: интересна ли будет еще одна статья по «умному» дому? Дело в том, что я уже достаточно долгое время выстраиваю домашнюю экосистему на основе девайсов от Xiaomi и Philips, но без фирменных приложений, всем рулит Home Assistant. Занятие это вполне себе бесконечное, однако на данный момент система пришла к более-менее стабильному виду.
С одной стороны, на Geektimes полно подобных статей, с другой – я бы хотел больший упор сделать на опыт эксплуатации, косяки и ошибки, с которыми столкнулся. Возможно мой опыт уберег бы кого-то от таких же граблей, или подкинул новых идей.
Автор: Александр
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/gadzhety/279241
Ссылки в тексте:
[1] python-miio: https://github.com/rytilahti/python-miio
[2] DB Browser for SQLite: http://sqlitebrowser.org
[3] готовым скриптом: https://github.com/dgiese/dustcloud.git
[4] Источник: https://geektimes.com/post/300531/?utm_campaign=300531
Нажмите здесь для печати.