miIO - протокол для Xiaomi (Mi Home) устройств

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение skysilver » Вт окт 17, 2017 1:07 am

Gelezako писал(а):skysilver, к сожалению так и не получилось у меня заставить работать IR Mi Remote 360, но у меня ещё есть ксиоми лента и лампа. Для всех токен всегда нули и --info ничего не выдаёт, --degug выдаёт информацию, но чек сумма всегда тоже нули. Может у вас есть пример как отправлять на них команды?
Трафик между IR Mi Remote 360 и Mihome захватить удалось?

Если устройство не сообщает свой токен, то нужно выискивать его другими способами. Без токена вообще не вариант что-либо сделать. Токен можно посмотреть в базе данных или файлах приложения Mihome (раз и два). Либо сначала отвязать устройство от Mihome, затем подключиться к его точке доступа и запустить поиск (discover).
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение Gelezako » Вт окт 17, 2017 1:14 pm

skysilver писал(а):Mihome захватить удалось?
поставил снифер,нажимаю плей, начинаю включать выключать свет, изменять цвет яркость, но ни одного пакета не было перехвачено. Год назад вроде удавалось, а сейчас что-то не получается. Пока не разобрался в чём дело.
skysilver писал(а): Токен можно посмотреть в базе данных или файлах приложения Mihome
1. вот тут /data/data/com.xiaomi.smarthome/cache/smrc4-cache удалось найти токе для шлюза, но для ленты и лампочки почему-то их там не оказалось ((
Но управление шлюзом я могу делать через стандарный модуль т.к.у него есть режим разработчика, тут всё отлично работает и я уже написал несколько своих решений.

2. вот тут /data/data/com.xiaomi.smarthome/databases/ вообще не было ни одного файла.
Подскажите, почему команда php miio-cli.php --discover all показала токен для устройства IR Mi Remote 360, а для остальных показало нули? От чего зависит правильное определение токена? Хочется всё таки найти токеты для ленты и лампочки.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение skysilver » Вт окт 17, 2017 1:46 pm

Gelezako писал(а):поставил снифер,нажимаю плей, начинаю включать выключать свет, изменять цвет яркость, но ни одного пакета не было перехвачено. Год назад вроде удавалось, а сейчас что-то не получается. Пока не разобрался в чём дело.
Поставив снифер на комп, не удастся ловить весь трафик локальной сети. Трафик нужно захватывать на роутере (идеальный вариант) или на самом телефоне, где установлен Михом. Либо ставить на комп эмулятор андроида и в нем запускать Михом - в этом случае можно уже на самом компе будет пакеты перехватить.
Gelezako писал(а):2. вот тут /data/data/com.xiaomi.smarthome/databases/ вообще не было ни одного файла.
Путь к базе может отличаться на разных смартфонах. И главное - нужен рут! Если рута нет, то с компа через adb можно достать этот файл.
Gelezako писал(а):От чего зависит правильное определение токена? Хочется всё таки найти токеты для ленты и лампочки.
Уже говорил - от логики, зашитой в прошивку устройства. Одни всегда, на любой версии прошивки, открыто отдают свой токен. Вторые отдают токен только до определенной версии прошивки, а после обновления перестают. Третьи вообще сообщают свой токен только в режиме инициализации, т.е. до привязки к Михом и подключения к wifi. Поэтому я и предлагал еще вариант - это сбросить устройство.

Также могу предложить свои услуги в получении всех api функций обмен на оборудование, тем кто не хочет или не может сделать самостоятельно. ;) Сведу все в класс, распишу примеры использования и интеграции.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение Gelezako » Вт окт 17, 2017 2:02 pm

skysilver писал(а):Поставив снифер на комп, не удастся ловить весь трафик локальной сети. Трафик нужно захватывать на роутере (идеальный вариант) или на самом телефоне, где установлен Михом. Либо ставить на комп эмулятор андроида и в нем запускать Михом - в этом случае можно уже на самом компе будет пакеты перехватить.
понял, попробую такой вариант. Но udp броадкасты я всё равно ожидал увидеть, не понял почему было пусто. И пакеты с самого ноута тоже не видел. Думаю что я что-то делаю не так.
Путь к базе может отличаться на разных смартфонах. И главное - нужен рут! Если рута нет, то с компа через adb можно достать этот файл.
рут есть, всё норм, у меня созданы все эти папки, но базы почему-то нет. Спрошу на гитхабе почуму может не быть файла базы, может помогут.
Уже говорил - от логики, зашитой в прошивку устройства. Одни всегда, на любой версии прошивки, открыто отдают свой токен. Вторые отдают токен только до определенной версии прошивки, а после обновления перестают. Третьи вообще сообщают свой токен только в режиме инициализации, т.е. до привязки к Михом и подключения к wifi. Поэтому я и предлагал еще вариант - это сбросить устройство.
понял, спасибо, попробую переподключить устройства.
skysilver писал(а): Также могу предложить свои услуги в получении всех api функций обмен на оборудование, тем кто не хочет или не может сделать самостоятельно. ;) Сведу все в класс, распишу примеры использования и интеграции.
намёк что я уже задолбал с вопросами на бесплатной основе или я всё ещё могу надеятся на ответы в этом топике? :)
Видно что вы проделали громадную работу и хочется применить написанное, но без вашей помощи это нереально.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение skysilver » Вт окт 17, 2017 2:17 pm

Gelezako писал(а):намёк что я уже задолбал с вопросами на бесплатной основе или я всё ещё могу надеятся на ответы в этом топике? :)
Никаких намеков. )) Просто информация для всех пользователей.

Конечно, буду помогать по мере возможности и компетенции.

Вот так у меня на телефоне выглядит путь к базе и содержимое нужной таблицы devicerecord:
СпойлерПоказать
Screenshot_20171017-140949.png
Screenshot_20171017-140949.png (82.54 КБ) 5103 просмотра
Screenshot_20171017-141102.png
Screenshot_20171017-141102.png (148.76 КБ) 5103 просмотра
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение Gelezako » Вт окт 17, 2017 2:20 pm

Отлично, спасибо.
Вам повезло, а у меня в этой папке нет ни одного файла ((
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение skysilver » Вт окт 17, 2017 2:38 pm

Gelezako писал(а):а у меня в этой папке нет ни одного файла ((
Это значит, что она лежит в где-то другом месте. Приложение Михом без своей базы работать не сможет.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение Gelezako » Вт окт 17, 2017 3:06 pm

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

--

Для того что бы можно было управлять устройствами, необходимо знать их токены. Способы получения токена устройства:
1. Выполнить команду: php miio-cli.php --discover all
2. Если устройства найдены, но вместо токенов нули, то поискать их на телефоне. У вас должно быть установлено приложение MiHome, устройства должны быть добавлены и успешно управляются из приложения.
2.1. /data/data/com.xiaomi.smarthome/cache/smrc4-cache
Из этой папки необходимо скачать все файлы на компьютер и найти в них токены. Для автоматизации из под Windows можно искать вот так.
Консоль: find "token" d:\папка с файлами\*
После чего открываете файл и ищите токен. В 90% файлов тока не будет, а файлов может быть несколько десятков, поэтому лучше использовать поиск текста по всем файлам.
2.2. /data/data/com.xiaomi.smarthome/databases/ Тут срины из поста viewtopic.php?f=8&t=4677&p=62024#p62024
Утилита для просмотра файла базы данных miio.db под Windows и Mac http://sqlitebrowser.org

Список команд для управления на примере устройства IR Mi Remote 360 https://github.com/rytilahti/python-mii ... ngmi_ir.py
а) miIO.ir_learn
б) miIO.ir_read
в) miIO.ir_play
Список команд для других устройств:
https://github.com/aholstenson/miio/tre ... cs/devices
https://github.com/rytilahti/python-mii ... aster/miio
По аналогии с примером из 1-го пункта ищите устройство и внутри файла в исходном коде команды.

Формат управления на примере устройства IR Mi Remote 360. Для других устройств формат команды может отличатся.
php miio-cli.php --ip 192.168.1.47 --debug --sendcmd {'id':1,'method':'miIO.ir_play','params':{'freq':38400,'code':'код_кнопки'}}
Команда будет эмулировать нажатие определённой кнопки в приложении MiHome.
В качестве кода нужно указывать код IR кнопки пульта. Коды кнопок можно найти в мобильном приложении по адесу:
/data/data/com.xiaomi.smarthome/files/IR_REMOTE_DID_device.json
Устройства предварительно должны быть добавлены и нужные кнопки обучены.
За это сообщение автора Gelezako поблагодарил:
Mavric (Пн апр 16, 2018 12:15 pm)
Рейтинг: 1.16%
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение skysilver » Ср окт 18, 2017 12:58 am

В третьем посте темы расписал все, что известно мне о токенах и способах их получения - viewtopic.php?f=8&t=4677&p=61208#p61208
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Сообщение Gelezako » Ср окт 18, 2017 1:25 am

skysilver, нарыл я в общем токен для лампочки, нашёл его в базе данных. Хотя команда

Код: Выделить всё

php miio-cli.php --discover all
почему-то показывает нули.
Нашёл так же документацию в каком формате отправлять команды
https://www.yeelight.com/download/Yeeli ... n_Spec.pdf
Делаю вот так: miio-cli.php --ip 192.168.0.110 --debug --sendcmd '{"id":1,"method":"toggle","params":[]}'
Ожидаю вкл\выкл лампы, но ничего не происходит :(
Может из-за того что утилита не видит токен? Как мне его явно указать?
Вот ответ после попытки переключить состояние лампочки:

Код: Выделить всё

array(3) {
  ["ip"]=>
  string(13) "192.168.0.110"
  ["debug"]=>
  bool(false)
  ["sendcmd"]=>
  string(32) "'{id:1,method:toggle,params:[]}'"
}
Соединение с устройством IP 192.168.0.110
Статус отладки [1]
Команда для отправки - "{id:1,method:toggle,params:[]}"

Проверяем доступность устройства 192.168.0.110
Сокет успешно создан
Параметр SO_RCVTIMEO сокета успешно задан
Отправляем hello-пакет на 192.168.0.110 с таймаутом 15
Отправлено в сокет 32 байт
Получен ответ от IP 192.168.0.110 с порта 54321
Прочитано 32 байта из сокета
magic: 2131
length: 0020 --> 32 байт
unknown1: 00000000
devicetype: 0348
serial: 53c5
ts: 00000ec7 --> 3783 секунд
checksum: 00000000000000000000000000000000

Устройство 192.168.0.110 доступно
Сокет успешно создан
Параметр SO_RCVTIMEO сокета успешно задан
Используется токен, полученный от устройства, - 00000000000000000000000000000000

Отправляем пакет на 192.168.0.110 с таймаутом 5
Отправлено в сокет 80 байт
Получен ответ от IP 192.168.0.110 с порта 54321
Прочитано 32 байта из сокета
magic: 2131
length: 0050 --> 80 байт
unknown1: 00000000
devicetype: 0348
serial: 53c5
ts: 00000ec8 --> 3784 секунд
checksum: ffffffffffffffffffffffffffffffff
data:
Расшифрованные данные:
Устройство 192.168.0.110 доступно и ответило: 
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Ответить