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

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

Модератор: immortal

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

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

Сообщение skysilver » Чт окт 19, 2017 4:25 pm

webms писал(а):и если повторить еще раз
то дальше будет выдавать только
А какой промежуток между запросами? Надо не чаще, чем раз в 2 секунды. У лампочек по крайней мере такая особенность.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

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

Сообщение webms » Чт окт 19, 2017 4:53 pm

skysilver писал(а):
webms писал(а):и если повторить еще раз
то дальше будет выдавать только
А какой промежуток между запросами? Надо не чаще, чем раз в 2 секунды. У лампочек по крайней мере такая особенность.
после 10 мин проверил - заработал
подождал 10 сек - не захотел повторить

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

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

Проверяем доступность устройства 192.168.0.112
Сокет успешно создан
Параметр SO_RCVTIMEO сокета успешно задан
Отправляем hello-пакет на 192.168.0.112 с таймаутом 15
Отправлено в сокет 32 байт
Получен ответ от IP 192.168.0.112 с порта 54321
Прочитано 32 байта из сокета
magic: 2131
length: 0020 --> 32 байт
unknown1: 00000000
devicetype: 03da
serial: 3682
ts: 59e8ad15 --> 1508420885 секунд
checksum: ffffffffffffffffffffffffffffffff

Устройство 192.168.0.112 доступно
Сокет успешно создан
Параметр SO_RCVTIMEO сокета успешно задан
Используется токен, указанный вручную, - 633756495a714e376964305a79394570
Отправляем пакет на 192.168.0.112 с таймаутом 5
Отправлено в сокет 80 байт
Получен ответ от IP 192.168.0.112 с порта 54321
Прочитано 64 байта из сокета
magic: 2131
length: 0040 --> 64 байт
unknown1: 00000000
devicetype: 03da
serial: 3682
ts: 59e8ad15 --> 1508420885 секунд
checksum: 2522505ac866fcdc5bae901de4774aba
data: 3d2892846ea9e2241b253c11ea2ad3d2bacabb471fde343b0ead84113b0b80f1
Расшифрованные данные: {"result":0,"id":1}
Устройство 192.168.0.112 доступно и ответило:
{"result":0,"id":1} 
ysanjok
Сообщения: 15
Зарегистрирован: Сб авг 12, 2017 7:16 pm
Благодарил (а): 11 раз
Поблагодарили: 7 раз

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

Сообщение ysanjok » Чт окт 19, 2017 6:05 pm

Аналогичная ситуация.
Есть предложение, чисто из наблюдений:
Лампы перестали принимать команды, как мне кажется, после того как...
Начну по порядку.
Мои действия :
>Выполнил сброс настроек Philips connected bulb, путём удаления из MiHome.
>С ноутбука подключился к открытой Wi-Fi сети, созданной лампой.
>Посредством miIO-cli.php получил token и ip от лампы.
>В целях проверки работоспособности решил запустить philipsbulb-sample.php, предварительно поместив полученные данные (ip, token) в соответствующие строки файла philipsbulb.class.php.
>Скрипт отработал без ошибок, лампа управляется.
>Повторил всё выше описанное со второй лампой. Всё Ок.
>Зашёл в Mihome и заново добавил лампы в мои устройства. Подключив к роутеру.
>Снова просканировал эфир через miIO-cli.php
>Получил список из трёх устройств (Две лампы Philips bulb и Gateway), с новыми ip адресами и значениями token равным 00000...
>Снова решил запустить philipsbulb-sample.php, предварительно поместив полученные ip в строки файла philipsbulb.class.php, по очереди для каждой лампы.
>Скрипт отработал без ошибок, лампа управляется.
А вот тут, опять же, как мне кажется, нарисовалась проблема.
>Запустил mihome, поиграл с лампочками там.
>Решил повторить попытку запустить philipsbulb-sample.php, но не тут-то было.
>Получаю ответ "Устройство 192.168.*.* не доступно или не отвечает."

Как-то так...

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

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

Сообщение skysilver » Чт окт 19, 2017 10:07 pm

ysanjok писал(а):>Снова решил запустить philipsbulb-sample.php, предварительно поместив полученные ip в строки файла philipsbulb.class.php, по очереди для каждой лампы.
Можно увидеть получившийся код?
ysanjok писал(а):А вот тут, опять же, как мне кажется, нарисовалась проблема. >Запустил mihome, поиграл с лампочками там.
>Решил повторить попытку запустить philipsbulb-sample.php, но не тут-то было. >Получаю ответ Устройство 192.168.*.* не доступно или не отвечает."
Не смог у себя воспроизвести такую проблему. Попеременно слал команды из консоли и управлял через Михом. Все четко.
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 » Пт окт 27, 2017 1:25 am

Новости проекта.

Обновления ядра библиотеки:
  • Добавлена коррекция разницы времени между сервером и устройством.
  • Оптимизирован вызов функций работы с сокетами.
  • Добавлена функция fastDiscover() для отправки широковещательного hello-пакета без ожидания ответа от miIO-устройств.
  • Улучшен вывод отладочных сообщений.
Успешно испытано взаимодействие со следующими устройствами:
  • Yeelight White Bulb.
  • Xiaomi Philips LED Ball Lamp.
  • Xiaomi Philips Eyecare Smart Lamp.
  • Xiaomi Mi Smart Home Gateway 2.
Проведена большая работа по отлову проблем взаимодействия с Xiaomi Mi Robot Vacuum, в результате чего управление все же удалось получить! Но для дальнейшей интеграции требуется доработка ядра библиотеки. Веду работу в этом направлении. Большую благодарность за предоставленный удаленный стенд выражаю пользователю форума webms.

Для оценки потенциального интереса к модулю управления miIO-устройствами создал проект в Connect. Любая помощь, в т.ч. материальная, всячески поддерживается, и способствует скорейшему появлению модуля на свет. ;)
За это сообщение автора skysilver поблагодарили (всего 6):
ysanjok (Пт окт 27, 2017 5:55 am) • ингвар (Пт окт 27, 2017 11:28 pm) • Mavric (Вс окт 29, 2017 3:34 pm) • webms (Пн окт 30, 2017 11:35 pm) • antpino (Пн ноя 20, 2017 12:28 pm) • VooDooN (Вс ноя 26, 2017 8:23 pm)
Рейтинг: 6.98%
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 » Пн окт 30, 2017 1:08 pm

Проверил еще один способ получения токенов устройств из приложения Mihome на андроиде. Суть та же, что и через ADB, только есть windows-приложение, чтобы не ковыряться в консоли.

Условия:
1. Установленные на ПК ADB-драйвера смартфона.
2. Установленная на ПК Java.
3. На смартфоне включена отладка через USB и разрешено подключение с ПК.
4. И, разумеется, смартфон подключен по USB к ПК.

Скачиваем на ПК утилиту MiToolkit 1.5 и распаковываем архив. Запускаем MiToolkit.exe.

Переключаем на английский язык и нажимаем Extract Token.
mitoolkit_1.png
mitoolkit_1.png (12.28 КБ) 6576 просмотров
Появится окно с описанием процесса. В нем снова нажимаем Extract Token.
mitoolkit_2.png
mitoolkit_2.png (22.05 КБ) 6576 просмотров
Через некоторое время на телефоне запустится приложение Mihome, а на ПК появится предупреждение, что ни в коем случае не ставить пароль на резервную копию приложения Mihome. Нажимаем ОК.
mitoolkit_3.png
mitoolkit_3.png (6.28 КБ) 6576 просмотров
Далее на смартфоне появится сообщение о подтверждении создания резервной копии приложения Mihome. Оставляем поле ввода пароля пустым и тапаем Создать резервную копию данных.
mitoolkit_6.png
mitoolkit_6.png (72.29 КБ) 6576 просмотров
После успешной архивации на ПК появится соответствующее сообщение. Нажимаем ОК и ждем результата.
mitoolkit_4.png
mitoolkit_4.png (8.38 КБ) 6576 просмотров
По окончанию экспорта устройств из базы приложения в основном окне будет заполнено соответствующее поле. Если устройство много, то нужно прокрутить список вниз. Полоса прокрутки при этом не отображается, но они там есть. ))
mitoolkit_5.png
mitoolkit_5.png (30.68 КБ) 6576 просмотров
За это сообщение автора skysilver поблагодарили (всего 2):
ysanjok (Чт ноя 02, 2017 1:24 am) • antpino (Пн ноя 20, 2017 12:30 pm)
Рейтинг: 2.33%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
ysanjok
Сообщения: 15
Зарегистрирован: Сб авг 12, 2017 7:16 pm
Благодарил (а): 11 раз
Поблагодарили: 7 раз

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

Сообщение ysanjok » Вт окт 31, 2017 11:19 am

skysilver писал(а):Проверил еще один способ получения токенов устройств из приложения Mihome на андроиде. Суть та же, что и через ADB, только есть windows-приложение, чтобы не ковыряться в консоли.

Условия:
1. Установленные на ПК ADB-драйвера смартфона.
2. Установленная на ПК Java.
3. На смартфоне включена отладка через USB и разрешено подключение с ПК.
4. И, разумеется, смартфон подключен по USB к ПК.

Скачиваем на ПК утилиту MiToolkit 1.5 и распаковываем архив. Запускаем MiToolkit.exe.

Переключаем на английский язык и нажимаем Extract Token.
mitoolkit_1.png
Появится окно с описанием процесса. В нем снова нажимаем Extract Token.
mitoolkit_2.png
Через некоторое время на телефоне запустится приложение Mihome, а на ПК появится предупреждение, что ни в коем случае не ставить пароль на резервную копию приложения Mihome. Нажимаем ОК.
mitoolkit_3.png
Далее на смартфоне появится сообщение о подтверждении создания резервной копии приложения Mihome. Оставляем поле ввода пароля пустым и тапаем Создать резервную копию данных.
mitoolkit_6.png
После успешной архивации на ПК появится соответствующее сообщение. Нажимаем ОК и ждем результата.
mitoolkit_4.png
По окончанию экспорта устройств из базы приложения в основном окне будет заполнено соответствующее поле. Если устройство много, то нужно прокрутить список вниз. Полоса прокрутки при этом не отображается, но они там есть. ))
mitoolkit_5.png
Проверил на своём Redmi Note 4x - всё получилось.
Весьма странно, но я получил токены отличные от тех что Лампы шлют в hello-пакете в режиме сопряжения.
С этими токенами скрипт sample отрабатывает без ошибок.

Есть желание помочь в развитии, но к сожалению не финансами. Говорите чем могу ещё посодействовать?

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

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

Сообщение skysilver » Вт окт 31, 2017 12:00 pm

ysanjok писал(а):Весьма странно, но я получил токены отличные от тех что Лампы шлют в hello-пакете в режиме сопряжения.
В режиме сопряжения это, когда подключался к точке доступа, которую поднимает сама лампочка? Вероятно, при добавлении ламп в Михом токены сменились. Я на такие случаи еще не попадал, но в api есть для этого специальная команда, которая позволяет зная текущий токен сменить его на какой-то другой.
ysanjok писал(а):Есть желание помочь в развитии, но к сожалению не финансами. Говорите чем могу ещё посодействовать?
Программирование (описание в виде классов api-устройств), тестирование, инструкции по добавлению в МЖД, лайки полезных постов. ;)
За это сообщение автора skysilver поблагодарил:
zoto (Ср ноя 01, 2017 6:54 pm)
Рейтинг: 1.16%
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 » Ср ноя 01, 2017 11:58 pm

Новости проекта.

Обновление ядра библиотеки (актуальная версия 0.2.6):
  • В функцию отправки команды устройствам добавлен аргумент для задания уникального идентификатора сообщения.
  • Добавлена функция getMsgID($ip) для формирования и хранения в файле идентификаторов команд для устройств.
  • Добавлены варианты использования автоматического и ручного формирования идентификатора сообщения.
  • Добавлена проверка на валидность json-ответов от устройств.
  • Добавлен класс с базовыми функциями и пример работы с пылесосом Xiaomi Mi Robot Vacuum.
  • Добавлен класс с базовыми функциями для настольных ламп Xiaomi Philips Eyecare Smart Lamp 2.
Функции, реализованные для Xiaomi Philips Eyecare Smart Lamp 2:
  1. Получить текущий статус
    1. power - питание (on или off)
    2. bright - яркость (от 1 до 100)
    3. notifystatus - напоминание об усталости глаз
    4. ambstatus - доп. боковая подсветка (on или off)
    5. ambvalue - яркость доп. боковой подсветки (от 1 до 100)
    6. eyecare - смарт режим безопасный для глаз
    7. scene_num - номер сцены (от 1 до 3, study, reading, phone)
    8. bls - режим смарт-ночника
    9. dvalue - таймер на выключение, макс. 60 минут (в минутах от 1 до 60)
  2. Включить
  3. Выключить
  4. Задать яркость
Функции, реализованные для Xiaomi Mi Robot Vacuum:
  1. Получить текущий статус
    1. state - код состояния
    2. state_text - состояние
      • 'Initiating'
      • 'Sleeping'
      • 'Waiting'
      • 'Unknown'
      • 'Cleaning'
      • 'Back to home'
      • 'Unknown'
      • 'Charging'
      • 'Charging Error'
      • 'Pause'
      • 'Spot Cleaning'
      • 'In Error'
      • 'Shutting down'
      • 'Updating'
      • 'Docking'
      • 'Full'
    3. battery - заряд батареи
    4. fan_power - мощность турбины
    5. error_code - код ошибки
    6. error_text - описание ошибки
      • 'Laser distance sensor error'
      • 'Collision sensor error'
      • 'Wheels on top of void, move robot'
      • 'Clean hovering sensors, move robot'
      • 'Clean main brush'
      • 'Clean side brush'
      • 'Main wheel stuck'
      • 'Device stuck, clean area'
      • 'Dust collector missing'
      • 'Clean filter'
      • 'Stuck in magnetic barrier'
      • 'Low battery'
      • 'Charging fault'
      • 'Battery fault'
      • 'Wall sensors dirty, wipe them'
      • 'Place me on flat surface'
      • 'Side brushes problem, reboot me'
      • 'Suction fan problem'
      • 'Unpowered charging station'
    7. clean_area - площадь уборки, кв. см.
    8. clean_time - время уборки, сек.
    9. dnd_enabled - режим "не беспокоить"
    10. in_cleaning - в процессе уборки или нет
    11. map_present - есть карта или нет
    12. msg_ver - версия команд
    13. msg_seq - счетчик команд
  2. Начать уборку
  3. Завершить уборку
  4. Приостановить уборку
  5. Убрать вокруг себя
  6. Вернуться на базу и встать на зарядку
  7. Поиск пылесоса
За это сообщение автора skysilver поблагодарили (всего 4):
ysanjok (Чт ноя 02, 2017 1:24 am) • webms (Чт ноя 02, 2017 1:49 pm) • VooDooN (Вс ноя 26, 2017 8:24 pm) • antonpoll (Вс июл 15, 2018 11:43 pm)
Рейтинг: 4.65%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
AnT
Сообщения: 7
Зарегистрирован: Вт сен 26, 2017 11:33 am
Благодарил (а): 1 раз
Поблагодарили: 0

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

Сообщение AnT » Чт ноя 02, 2017 7:16 pm

Готов быть подопытным владельцем: Philips/Yeelight bulb, Power Strip2, Vacuum, камера кубик
Ответить