miIO - протокол для Xiaomi (Mi Home) устройств
Модератор: immortal
-
- Сообщения: 529
- Зарегистрирован: Сб мар 12, 2016 6:33 pm
- Откуда: Ухта, Россия
- Благодарил (а): 3 раза
- Поблагодарили: 154 раза
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Включил Yeelight лампочку, не находит.
Она же тоже должна находится?
Она же тоже должна находится?
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1754 раза
- Контактная информация:
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Да, затупил, сорри.Aven писал(а):апач тут нипричем, т.к. запускаю из командной строки...
Код: Выделить всё
Ошибка чтения из сокета [11] Resource temporarily unavailable
Код: Выделить всё
public $disc_timeout = 2;
Должна. Я именно на ней и тестил.Aven писал(а):Включил Yeelight лампочку, не находит. Она же тоже должна находится?
Если у кого есть желание подебажить, то крайне полезно смотреть реальный трафик на интерфейсе сервера.
У себя в одной консоли запускаю
Код: Выделить всё
tcpdump -i eth0 -n udp dst port 54321 or src port 54321
В захваченном трафике должны увидеть:
- Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 529
- Зарегистрирован: Сб мар 12, 2016 6:33 pm
- Откуда: Ухта, Россия
- Благодарил (а): 3 раза
- Поблагодарили: 154 раза
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Да, видна проблема, скрипт отправляет трафик с неправильного интерфейса.
X.X.X.X - это мой белый IP адрес, смотрящий в интернет.
172.16.1.1 - смотрящий в локальную сеть.
172.16.1.11 - шлюз сяоми
Код: Выделить всё
# tcpdump -i enp1s0 -n udp dst port 54321 or src port 54321
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
12:48:34.941708 IP 172.16.1.11.54321 > 58.83.200.12.8053: UDP, length 32
12:48:35.211312 IP 58.83.200.12.8053 > 172.16.1.11.54321: UDP, length 32
12:48:40.596837 IP X.X.X.X.59089 > 172.16.1.11.54321: UDP, length 32
12:48:50.578899 IP 172.16.1.11.54321 > 58.83.200.12.8053: UDP, length 32
12:48:50.848457 IP 58.83.200.12.8053 > 172.16.1.11.54321: UDP, length 32
172.16.1.1 - смотрящий в локальную сеть.
172.16.1.11 - шлюз сяоми
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1754 раза
- Контактная информация:
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Именно. У меня туда же идет шифрованный трафик от шлюза и от приложения Mihome на смарте.Aven писал(а):58.83.200.12 - я так понимаю облако сяоми
По поводу проблемы с неверным интерфейсом пока не могу ничего посоветовать, кроме как попробовать добавить в miio.class.php в функцию public function discover($ip = NULL) {} после строки 79 такой код:
Код: Выделить всё
if( !socket_bind($sock, '172.16.1.1' , 0) ) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
if ($this->debug) echo "Не удалось привязать сокет [$errorcode] $errormsg" . PHP_EOL;
}
if ($this->debug) echo 'Сокет успешно привязан' . PHP_EOL;
Знающие комрады, м.б., позже предложать что-то дельное.
Aven, сервак с MJD в роли роутера еще выступает, аха?
- Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Устройством XIAOMI IR Mi Remote 360 с помощью вашего модуля можно будет управлять? У него тоже со сих пор нет режима разработчика и наверно не будет.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1754 раза
- Контактная информация:
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Модуля пока нет. ))Gelezako писал(а):Устройством XIAOMI IR Mi Remote 360 с помощью вашего модуля можно будет управлять? У него тоже со сих пор нет режима разработчика и наверно не будет.
В питоновской библиотеке есть базовая поддержка Xiaomi Universal IR Remote Controller (Chuangmi IR), если это то же самое, то можно будет реализовать. В каком объеме получится - тут уж надо исследовать вопрос. Лично у меня из wifi-девайсов сяоми только шлюз и лампочки yeelight, philips.
- Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 529
- Зарегистрирован: Сб мар 12, 2016 6:33 pm
- Откуда: Ухта, Россия
- Благодарил (а): 3 раза
- Поблагодарили: 154 раза
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Нет у меня MJD =) самописные скрипты. да, этот сервер маршрутизатором выступает.skysilver писал(а): Знающие комрады, м.б., позже предложать что-то дельное.
Aven, сервак с MJD в роли роутера еще выступает, аха?
это не помогло:
СпойлерПоказать
Код: Выделить всё
# php miio-cli.php --discover 172.16.1.11 --debug
array(2) {
["discover"]=>
string(11) "172.16.1.11"
["debug"]=>
bool(false)
}
Поиск 172.16.1.11
Взаимодействие с устройством IP 172.16.1.11
Статус отладки [1]
Проверяем доступность устройства 172.16.1.11
Сокет успешно создан
Сокет успешно привязан
Отправляем hello-пакет на 172.16.1.11 с таймаутом 10
Ошибка чтения из сокета [11] Resource temporarily unavailable
Поиск выполнен. Устройств не найдено.
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1754 раза
- Контактная информация:
Re: miIO - протокол для Xiaomi (Mi Home) устройств
Помимо своего боевого сервера на кубике (Debian 7, PHP 5.4, один eth-порт), смоделировал два варианта:
1. Виртуалка Debian 9, PHP 7.0, три eth-порта (два бриджа в реальные сети хостовой машины - eth и wifi, и один nat), шлюз по умолчанию в подсеть отличную от целевой подсети, где находятся сяоми девайсы.
2. Хост Windows 7 x64 Pro, PHP 7.0, три сетевых интерфейса (eth, wifi, вирт. eth для VirtualBox), шлюз по умолчанию аналогично в подсеть отличную от целевой подсети.
Во всех трех случаях поиск устройств как по ip, так и по броадкасту работает штатно. Даже биндить сокеты не приходится, если в качестве броадкаста указать 192.168.1.255 вместо 255.255.255.255.
Если все же оставлять 255.255.255.255, то для корректной работы нужно забиндить сокет к нужному интерфейсу. Пожалуй, пока остановлюсь на втором варианте и вынесу ip-адрес сетевого интерфейса, смотрящего в целевую подсеть, в настройки.
1. Виртуалка Debian 9, PHP 7.0, три eth-порта (два бриджа в реальные сети хостовой машины - eth и wifi, и один nat), шлюз по умолчанию в подсеть отличную от целевой подсети, где находятся сяоми девайсы.
2. Хост Windows 7 x64 Pro, PHP 7.0, три сетевых интерфейса (eth, wifi, вирт. eth для VirtualBox), шлюз по умолчанию аналогично в подсеть отличную от целевой подсети.
СпойлерПоказать
Если все же оставлять 255.255.255.255, то для корректной работы нужно забиндить сокет к нужному интерфейсу. Пожалуй, пока остановлюсь на втором варианте и вынесу ip-адрес сетевого интерфейса, смотрящего в целевую подсеть, в настройки.
Код: Выделить всё
php miio-cli.php --discover all --debug --bindip 192.168.1.36
Поиск всех
Режим широковещательного поиска устройств
Статус отладки [1]
Поиск доступных устройств в локальной сети (handshake discovery)
Сокет успешно создан
Параметр SO_RCVTIMEO сокета успешно задан
Параметр SO_BROADCAST сокета успешно задан
Сокет успешно привязан к адресу 192.168.1.36
Отправляем hello-пакет на 255.255.255.255 с таймаутом 15
Отправлено в сокет 32 байт
1 Получен ответ от IP 192.168.1.47 с порта 54321
Прочитано 32 байта из сокета
magic: 2131
length: 0020 --> 32 байт
unknown1: 00000000
devicetype: 035a
serial: fe8e
ts: 000704ad --> 459949 секунд
checksum: b31c928032e6a4afc898c5c8768a518f <-- may be token
2 Получен ответ от IP 192.168.1.45 с порта 54321
Прочитано 32 байта из сокета
magic: 2131
length: 0020 --> 32 байт
unknown1: 00000000
devicetype: 035f
serial: 8589
ts: 00162352 --> 1450834 секунд
checksum: c3d059d8e949382cef2c2f31c7f27799 <-- may be token
Поиск выполнен.
Найдено 2 устройств.
IP 192.168.1.47 DevType 035a Serial fe8e Token b31c928032e6a4afc898c5c8768a518f
IP 192.168.1.45 DevType 035f Serial 8589 Token c3d059d8e949382cef2c2f31c7f27799
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 178
- Зарегистрирован: Вс янв 05, 2014 5:37 am
- Благодарил (а): 10 раз
- Поблагодарили: 17 раз
Re: miIO - протокол для Xiaomi (Mi Home) устройств
коллеги успешно отработал поиск шлюза, но почему то токен одни нули. Это нормально?
Код: Выделить всё
IP 192.168.1.80 DevType 02d3 Serial 292c Token 00000000000000000000000000000000