Задача модуля - реализация взаимодействия с wifi-устройствами Xiaomi с помощью отправки и приема пакетов по протоколу miIO.
miIO - проприетарный сетевой протокол Xiaomi с шифрованием, по которому взаимодействуют wifi-устройства из экосистемы Xiaomi и приложение Mihome на смартфоне. В качестве транспорта используется UDP и порт 54321. Содержимое пакетов шифруется. Ключи шифрования формируются на основе уникальных токенов. Для контроля корректности принимаемых пакетов используется контрольная сумма на основе алгоритма MD5.
Использование этого протокола позволяет управлять теми устройствами, которые не имеют открытого API (режима разработчика). Например, Xiaomi Mi Robot Vacuum, Xiaomi Mi Smart WiFi Socket, Xiaomi Philips LED Ceiling Lamp и многие другие. Также позволяет расширить имеющиеся возможности открытого api у xiaomi-шлюза, в частности переводить его в режим сопряжения, привязывать и отвязывать к нему датчики, управлять радио и др.
В основе модуля лежит библиотека php-miio из проекта http://connect.smartliving.ru/tasks/40.html
Модуль на Github - https://github.com/skysilver-lab/majordomo-xiaomimiio
Модуль в Connect - https://connect.smartliving.ru/tasks/51.html
Требования:
- Необходима более-менее свежая версия MajorDoMo, в которой присутствует функционал управления запуском и остановом циклов, а также есть функция getURLBackground().
- Сервер MajorDoMo и miIO-устройства должны находиться в одном сегменте локальной сети, в котором разрешен широковещательный UDP-трафик с портом назначения 54321.
- На сервере должен быть отключен, либо корректно настроен межсетевой экран для пропуска сетевых пакетов UDP/54321.
- Важно! Для всех устройств должны быть получены их уникальные токены!
В большинстве случаев устройства не сообщают свой токен в ответных сообщениях, поэтому выяснять токены придется вручную. Без токенов будет работать только поиск устройств в сети и определение статуса онлайн/оффлайн. Способы получения токенов описаны здесь
Предвижу, что это будет один из наиболее частых вопросов, поэтому сразу привожу возможные варианты. Выбирайте наиболее подходящий для себя. Отсортировал в порядке увеличения объема трудозатрат (исследования, программирования) с вашей стороны.
- Смиренно ждать, когда у меня появится интерес и возможность купить то или иное устройство, поддержку которого я добавлю сам в своих интересах. Ускорить этот процесс можно с помощью лайков моих сообщений на форуме, переводом "копеечки" на электронные кошелки (см. ниже) и на баланс проекта в Connect.
- Вы отправляете мне устройство, я добавляю его в модуль и оставляю устройство себе в качестве вознаграждения.
- Вы переводите мне сумму денег, необходимую для покупки устройства. Я покупаю его, добавляю в модуль и оставляю устройство себе в качестве вознаграждения.
- Вы предоставляете удаленный доступ к MajorDoMo и устройству, создаете задачу в Connect с определенным бюджетом (по договоренности). Я добавляю устройство в модуль, закрываю задачу, и средства перечисляются на мой внутренний счет Connect.
- Вы самостоятельно исследуете API-взаимодействия с устройством по источниками в интернете или через перехват и расшифровку трафика в локальной сети. Подробно описываете полученные функции API, а я по мере возможности и наличия времени добавляю устройство в модуль с сопутствующим тестированием всех этапов с вашей стороны.
- Вы делаете форк проекта на Github, вносите в него поддержку нужного устройства самостоятельно и делаете пул-реквест в мой репозиторий.
Поддержать разработку, развитие модуля и добавление новых устройств:
- Yandex: 410011205062626
- PayPal: paypal.me/skysilver
- Внутренний счет в Connect
- и другие способы по договоренности (Сбербанк, Тинькофф).