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

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

Модератор: immortal

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

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

Сообщение skysilver » Вс окт 15, 2017 10:03 pm

Gelezako писал(а):Но вот столкнулся в главной проблемой, вы выводите в консоль кирилицу, а под виндой из-за разности в кодировке выводятся не читаемые символы. Пробовал в notepad++ пересохранять файл в разных кодировках, но это не помогает. Может подскажите решение? А то не охота выводимый текст на латиницу переписывать
Я тестировал и под виндой (Win7x64Pro). Кириллица нормально отображается. В настройках консоли указан шрифт с поддержкой юникод Lucida Console.
СпойлерПоказать
win cmd.png
win cmd.png (99.5 КБ) 5382 просмотра
Gelezako писал(а):Ещё вопрос, как думаете можно ли вашу логику прикрутить в основной Ксиоми модуль?
Думаю, логичнее и целесообразнее вынести поддержку miIO-устройств в отдельный модуль. А тот оставить конкретно для зигби и 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 » Вс окт 15, 2017 10:28 pm

ура ура, моё устройство XIAOMI IR Mi Remote 360 отвечает и отдало мне свой токен. Я открыл ваш пример, файл philipsbulb-sample.php и подставил свой IP адрес и свой токен. Запускаю его, но дальше получаю одни ошибки:
22:10:22Лампа не включена. Ошибка: Ответ не получен
Я понимаю что нужно подредактировать код, логика работы IR Mi Remote 360 совсем другая и у него другие свойства. Но сам я не могу разобраться в вашем коде. Может подскажите как сформировать файл для управления другими устройствами, не лампами?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Alex77
Сообщения: 215
Зарегистрирован: Вс мар 05, 2017 2:18 pm
Благодарил (а): 21 раз
Поблагодарили: 6 раз

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

Сообщение Alex77 » Вс окт 15, 2017 11:08 pm

Может кто пояснить зачем это если есть модуль для MD для работы с Xiaomi?
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

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

Сообщение Gelezako » Вс окт 15, 2017 11:41 pm

Alex77 писал(а):Может кто пояснить зачем это если есть модуль для MD для работы с Xiaomi?
модуль позволяет управлять только шлюзом и датчиками, которые подключаются к шлюзу. Но есть куча ксяоми устройств, которые не управляются шлюзом и стандартный модуль не умеет ими управлять
фанат Мажордомо
тематический блог 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:32 am

Gelezako писал(а):Я понимаю что нужно подредактировать код, логика работы IR Mi Remote 360 совсем другая и у него другие свойства. Но сам я не могу разобраться в вашем коде. Может подскажите как сформировать файл для управления другими устройствами, не лампами?
Тут к вопросу надо подходить глобально.

В первую очередь надо выяснить какие команды устройство принимает и что на них отвечает. Для этого нужно перехватить и расшифровать трафик обмена между устройством и Mihome. Либо полазить по github и поискать там. Кое-что точно было.

Дальше, уже зная конкретный команды, нужно их проверить, выполнив:

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

php miio-cli.php --ip 192.168.1.20 --debug --sendcmd {'id':1,'method':'get_prop','params':['power']}
Здесь {'id':1,'method':'get_prop','params':['power']} как раз одна из возможных команд.
Когда будут известны и проверены все нужные команды и ответы на них, тогда уж и можно описывать их в виде класса.

В частности по XIAOMI IR Mi Remote 360 я встречал три команды здесь https://github.com/rytilahti/python-mii ... ngmi_ir.py
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:44 am

ясно, но если уже известны 3 команды,может подскажите что подредактировать в philipsbulb-sample.php документе на примере для команды miIO.ir_play
фанат Мажордомо
тематический блог 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:57 am

Gelezako писал(а):ясно, но если уже известны 3 команды,может подскажите что подредактировать в philipsbulb-sample.php документе на примере для команды miIO.ir_play
Чтобы выполнить miIO.ir_play нужны частота (по дефолту 38400) и код. Проверить корректность в консоли:

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

php miio-cli.php --ip 192.168.1.47 --debug --sendcmd {'id':1,'method':'miIO.ir_play','params':{'freq':частота,'code':'код'}} 
Интересно, что ответит устройство.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пн окт 16, 2017 3:05 am

Если через philipsbulb-sample.php, то можно так попробовать:

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

public function irPlay($freq = 38400, $command) {
        
        $result = $this->dev->msgSendRcv('miIO.ir_play', "{'freq':$freq,'code':$command}");
        return $result;
        
}
Для теста эту функцию надо добавить в philipsbulb.class.php, а в philipsbulb-sample.php вызвать:

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

echo $bulb->irPlay(38400, 'какой-то_код_команды') . PHP_EOL;
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:17 pm

хм, но как мне определить код? Ваши скрипты позволяют это сделать?
Я погуглил немного и нашёл проект, который вроде как это умеет, но он на питоне, я в нём слабовато разбираюсь. Качаю анаконду что бы попробовать запустить скрипт. Буду признателен за любую помощь в определении способа захвата этих кодов для устройства Mi IR remote.
Линка на проект: https://github.com/homeassistantchina/c ... _remote.md

--
skysilver писал(а):Интересно, что ответит устройство.
отправил чисто для теста код в качестве "1" на дефолтную частоту.

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

Соединение с устройством IP 192.168.0.103
Статус отладки [1]
Команда для отправки - {"id":1,"method":"miIO.ir_play","params":{"freq":"38400",
"code":"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: 000204a3 --> 132259 секунд
checksum: 3f59b17fcb3333333333c31d51b94

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

Отправляем пакет на 192.168.0.103 с таймаутом 5
Отправлено в сокет 112 байт
Получен ответ от IP 192.168.0.103 с порта 54321
Прочитано 96 байта из сокета
magic: 2131
length: 0060 --> 96 байт
unknown1: 00000000
devicetype: 0349
serial: 1937
ts: 000204a3 --> 132259 секунд
checksum: ed9f85f8616a2427719b85d3d946d7a3
data: 13c0c5f11d16cad61b92b1f522dda0eb42d7e03a18f67c99b21dcf2e1fc590de89947ba07c
e0dc049df4060887a1dc23bc0c27b655d6a3c88484421bb5ae242a
Расшифрованные данные: {"error":{"code":-5008,"message":"magic error"},"id":1}
Устройство 192.168.0.103 доступно и ответило:
{"error":{"code":-5008,"message":"magic error"},"id":1}
Последний раз редактировалось Gelezako Пн окт 16, 2017 3:49 pm, всего редактировалось 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 1:30 pm

Gelezako писал(а):хм, но как мне определить код? Ваши скрипты позволяют это сделать? Я погуглил немного и нашёл проект, который вроде как это умеет, но он на питоне, я в нём слабовато разбираюсь.
У меня нет этого устройства. Поэтому я даже не знаю по какому принципу оно работает в связке с Михом.

Могу предположить, что "miIO.ir_learn" запускает режим обучения и задает ячейку памяти, в которую будет записан IR-код. Т.е. включаем режим обучения, светим на него пультом с зажатой кнопкой, код записывается в память.

"miIO.ir_read" соответственно читает этот код из указанной ячейки памяти.

Ну а "miIO.ir_play" собственно воспроизводит IR-код (излучает, так скажем). Т.е. в качестве кода нужно указывать тот код, который подразумевается отправлять на бытовую технику, которой нужно управлять по IR-каналу.

По вышеприведенной ссылке одним из вариантов ir-кода является последовательность

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

Z6VLAAkCAABpAgAAYgYAAKYIAACJEQAAoSMAAKScAABYeQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAQEBAQEBAQEhISEhISEhIQEBISEBAQEBISEBASEhISFhNXE1AQ==
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Ответить