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

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

Модератор: immortal

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

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

Сообщение skysilver » Пн окт 16, 2017 1:37 pm

Gelezako писал(а):отправил чисто для теста код в качестве "1" на дефолтную частоту.
А если попробовать считать сохраненные коды из памяти:

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

php miio-cli.php --ip 192.168.0.103 --debug --sendcmd {'id':1,'method':'miIO.ir_read','params':{'key':1}} 
Вместо единицы в параметре key можно поперебирать значения, они там от 1 до 1000000 подразумеваются.
Еще как вариант заменить фигурные скобки на квадратные. Вот так:

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

php miio-cli.php --ip 192.168.0.103 --debug --sendcmd {'id':1,'method':'miIO.ir_read','params':['key':1]} 
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 » Пн окт 16, 2017 1:57 pm

коды кнопок я нашёл, оказывается они лежат вот тут

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

/data/data/com.xiaomi.smarthome/files/IR_REMOTE_DID_device.json
в мобильном телефоне где установлен Mi Home.

Перепробовал кучу кодов, но никакой реакции, вот ответ в конце выполнения:

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

...
Расшифрованные данные: {"result":0,"id":1}
Устройство 192.168.0.103 доступно и ответило:
{"result":0,"id":1} 
вопрос, "result":0 - это успех или не удача?
фанат Мажордомо
тематический блог 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 » Пн окт 16, 2017 2:06 pm

Gelezako писал(а):вопрос, "result":0 - это успех или не удача?
Без понятия. Чтобы это выяснить, надо инициировать отправку кода через Михом, перехватить эту сессию wireshark-ом и расшифровать отправляемые и получаемые пакеты. Тогда будет видно, что отвечает устройство при успешно выполненной команде.

Но на всякий случай надо еще попробовать отправить вариант команды с квадратными скобками в параметрах. Так:

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

php miio-cli.php --ip 192.168.0.103 --debug --sendcmd {'id':1,'method':'miIO.ir_play','params':['freq':38400,'code':'код']}
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 » Пн окт 16, 2017 2:16 pm

не, с таким синтаксисом не хочет работать, вот что отвечает

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

...
Расшифрованные данные: {"error":{"code":-5006,"message":"need code"},"id":1}
Устройство 192.168.0.103 доступно и ответило:
{"error":{"code":-5006,"message":"need code"},"id":1} 
фанат Мажордомо
тематический блог 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 » Пн окт 16, 2017 2:50 pm

Gelezako писал(а):не, с таким синтаксисом не хочет работать, вот что отвечает
Ясно. Тогда оставляем вариант с фигурными скобками.

Если отправить команду и посмотреть на ir-диоды через камеру телефона, видно факт отправки или нет?

Ну а в целом, надо брать wireshark и снифить пакеты от Михом к IR Mi Remote 360 и обратно. Там уже точно будет видно api-взаимодействия и формат команд.

И что насчет чтения сохраненных команд из памяти? Получается или нет?

P.S. В будущем прошу полностью приводить лог отладки, чтобы мне более целостно воспринимать картину происходящего. ))
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 » Пн окт 16, 2017 3:14 pm

skysilver писал(а): Если отправить команду и посмотреть на ir-диоды через камеру телефона, видно факт отправки или нет?
диод не мигает, команда не отправляется ((
Если тоже самое делать из приложения, то чётко видно что диод мигает и каналы переключаются.
skysilver писал(а): Ну а в целом, надо брать wireshark и снифить пакеты от Михом к IR Mi Remote 360 и обратно. Там уже точно будет видно api-взаимодействия и формат команд.
т.е. думаете формат команды мы отправляем не такой как надо? Со сниферами опыта работы малова-то, но попробую поработать с ним.
skysilver писал(а):И что насчет чтения сохраненных команд из памяти? Получается или нет?
решил не заморачиваться т.к. все коды я нашёл
skysilver писал(а):P.S. В будущем прошу полностью приводить лог отладки, чтобы мне более целостно воспринимать картину происходящего. ))
ок ))
только вот что слать, идеи закончились
фанат Мажордомо
тематический блог 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 » Пн окт 16, 2017 3:21 pm

Gelezako писал(а):решил не заморачиваться т.к. все коды я нашёл
А вот хорошо бы проверить этот момент.
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 » Пн окт 16, 2017 3:48 pm

skysilver писал(а):А вот хорошо бы проверить этот момент.
вот ответ для ключа со значением 1

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

Проверяем доступность устройства 192.168.0.103
Сокет успешно создан
Параметр SO_RCVTIMEO сокета успешно задан
Отправляем hello-пакет на 192.168.0.103 с таймаутом 15
Отправлено в сокет 32 байт
Получен ответ от IP 192.168.0.103 с порта 54321
Прочитано 32 байта из сокета
magic: 2131
length: 0020 --> 32 байт
unknown1: 00000000
devicetype: 0349
serial: 1937
ts: 000226ac --> 140972 секунд
checksum: 3f59b17fc3333333d3c31d51b94

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

Отправляем пакет на 192.168.0.103 с таймаутом 5
Отправлено в сокет 96 байт
Получен ответ от IP 192.168.0.103 с порта 54321
Прочитано 96 байта из сокета
magic: 2131
length: 0060 --> 96 байт
unknown1: 00000000
devicetype: 0349
serial: 1937
ts: 000226ac --> 140972 секунд
checksum: cf991b1afcfd75bcf9fd7bbeea9600f7
data: 13c0c5f11d16cad61b92b1f522dda0eb7d3636808326c53a59bff717f79fd81cb1eeff9c14
82167ef515f251c3589ff1e19966607bb60c319a7933b21f36918b
Расшифрованные данные: {"error":{"code":-5001,"message":"need key"},"id":1}
Устройство 192.168.0.103 доступно и ответило:
{"error":{"code":-5001,"message":"need key"},"id":1}
фанат Мажордомо
тематический блог 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 » Пн окт 16, 2017 6:58 pm

Во второй пост темы добавил описание протокола miIO - типы и структуру пакетов, построение сессии, шифрование и др.

Тыц viewtopic.php?f=8&t=4677&p=61207#p61207
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 » Пн окт 16, 2017 10:25 pm

skysilver, к сожалению так и не получилось у меня заставить работать IR Mi Remote 360, но у меня ещё есть ксиоми лента и лампа. Для всех токен всегда нули и --info ничего не выдаёт, --degug выдаёт информацию, но чек сумма всегда тоже нули. Может у вас есть пример как отправлять на них команды?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Ответить