Страница 4 из 24
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Вс окт 15, 2017 10:03 pm
skysilver
Gelezako писал(а):Но вот столкнулся в главной проблемой, вы выводите в консоль кирилицу, а под виндой из-за разности в кодировке выводятся не читаемые символы. Пробовал в notepad++ пересохранять файл в разных кодировках, но это не помогает. Может подскажите решение? А то не охота выводимый текст на латиницу переписывать
Я тестировал и под виндой (Win7x64Pro). Кириллица нормально отображается. В настройках консоли указан шрифт с поддержкой юникод Lucida Console.

- win cmd.png (99.5 КБ) 7435 просмотров
Gelezako писал(а):Ещё вопрос, как думаете можно ли вашу логику прикрутить в основной Ксиоми модуль?
Думаю, логичнее и целесообразнее вынести поддержку miIO-устройств в отдельный модуль. А тот оставить конкретно для зигби и api шлюза в режиме разработчика.
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Вс окт 15, 2017 10:28 pm
Gelezako
ура ура, моё устройство XIAOMI IR Mi Remote 360 отвечает и отдало мне свой токен. Я открыл ваш пример, файл philipsbulb-sample.php и подставил свой IP адрес и свой токен. Запускаю его, но дальше получаю одни ошибки:
22:10:22Лампа не включена. Ошибка: Ответ не получен
Я понимаю что нужно подредактировать код, логика работы IR Mi Remote 360 совсем другая и у него другие свойства. Но сам я не могу разобраться в вашем коде. Может подскажите как сформировать файл для управления другими устройствами, не лампами?
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Вс окт 15, 2017 11:08 pm
Alex77
Может кто пояснить зачем это если есть модуль для MD для работы с Xiaomi?
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Вс окт 15, 2017 11:41 pm
Gelezako
Alex77 писал(а):Может кто пояснить зачем это если есть модуль для MD для работы с Xiaomi?
модуль позволяет управлять только шлюзом и датчиками, которые подключаются к шлюзу. Но есть куча ксяоми устройств, которые не управляются шлюзом и стандартный модуль не умеет ими управлять
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Пн окт 16, 2017 2:32 am
skysilver
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
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Пн окт 16, 2017 2:44 am
Gelezako
ясно, но если уже известны 3 команды,может подскажите что подредактировать в philipsbulb-sample.php документе на примере для команды miIO.ir_play
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Пн окт 16, 2017 2:57 am
skysilver
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':'код'}}
Интересно, что ответит устройство.
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Пн окт 16, 2017 3:05 am
skysilver
Если через 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;
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Пн окт 16, 2017 1:17 pm
Gelezako
хм, но как мне определить код? Ваши скрипты позволяют это сделать?
Я погуглил немного и нашёл проект, который вроде как это умеет, но он на питоне, я в нём слабовато разбираюсь. Качаю анаконду что бы попробовать запустить скрипт. Буду признателен за любую помощь в определении способа захвата этих кодов для устройства 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}
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Добавлено: Пн окт 16, 2017 1:30 pm
skysilver
Gelezako писал(а):хм, но как мне определить код? Ваши скрипты позволяют это сделать? Я погуглил немного и нашёл проект, который вроде как это умеет, но он на питоне, я в нём слабовато разбираюсь.
У меня нет этого устройства. Поэтому я даже не знаю по какому принципу оно работает в связке с Михом.
Могу предположить, что "miIO.ir_learn" запускает режим обучения и задает ячейку памяти, в которую будет записан IR-код. Т.е. включаем режим обучения, светим на него пультом с зажатой кнопкой, код записывается в память.
"miIO.ir_read" соответственно читает этот код из указанной ячейки памяти.
Ну а "miIO.ir_play" собственно воспроизводит IR-код (излучает, так скажем). Т.е. в качестве кода нужно указывать тот код, который подразумевается отправлять на бытовую технику, которой нужно управлять по IR-каналу.
По вышеприведенной ссылке одним из вариантов ir-кода является последовательность
Код: Выделить всё
Z6VLAAkCAABpAgAAYgYAAKYIAACJEQAAoSMAAKScAABYeQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAQEBAQEBAQEhISEhISEhIQEBISEBAQEBISEBASEhISFhNXE1AQ==