Продолжая традицию "узнал сам - поделись с другими" опишу свои наработки с устройством Xiaomi Remote 360 (или IR 360). Здесь обзор на устройство https://www.ixbt.com/live/kvazis/obzor- … narii.html
Данное устройство работает как самостоятельное устройство или как часть экосистемы Xiaomi через WiFi. Открытый API отсутствует. Но как говориться "мир не без добрых людей". Один написал модуль miIO, второй портировал на другие системы УД, третьи просто помогли дельными советами. За последние два действия отдельная благодарность skysilver. Это прелюдия, перейдем к действиям.
Задача: получить доступ к мозгам устройства и возможность его управления из iOBroker. Начнем:
Этап 1: Получаем токен устройства. Тема большая, развернутая и о ней много написано здесь https://majordomo.smartliving.ru/forum/ … 208#p61208 и здесь https://majordomo.smartliving.ru/forum/ … 809#p65809, первоисточник здесь https://github.com/aholstenson/miio. Но мы с вами немного ленивые, читаем по диагонали, а сделать хотим быстро. Поэтому мануал:
1. Если вы активный пользователь iOBroker, можете пропускать. NodeJS у вас в любом случае установлен. Проверить можно командой
node -v
в ответ получаем версию. Если не установлен, то что вы тут делаете? )) или установить командой в консоли
sudo apt install nodejs
2. Устанавливаем модуль miIO
npm install -g miio
3. Скандируем сеть на предмет наличия совместных устройств
miio --discover
в ответ получаем (хуже если нет) список обнаруженных устройств. Сохраняем Device ID, Address, Тoken. Наша цель IR 360, поэтому ищем в списке именно его. Советую присваивать устройству статический IP по MAC адресу. В перспективе нам к нему будет проще обращаться по постоянному IP.
4. Опрос выявленного IR360
miio --inspect IP_устройства --token токен_устройства
5. Получает JSON IR 360
miio --control IP_устройства --token токен_устройства --method miIO.info
На выходе должна быть информация вида (перс.данные устройства скрываю за ХХХХХХХХХ - ФЗ 152
INFO Attempting to control 10.0.1.39
INFO Got result:
{
"life": 1930612,
"cfg_time": 0,
"token": "ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ",
"mac": "ХХ:ХХ:ХХ:ХХ:ХХ:ХХ",
"fw_ver": "1.2.4_38",
"hw_ver": "MC200",
"model": "chuangmi.ir.v2",
"wifi_fw_ver": "SD878x-14.76.36.p79-702.1.0-WM",
"ap": {
"rssi": -44,
"ssid": "MySSID",
"bssid": "14:D6:XX:XX:XX:XX"
},
"netif": {
"localIp": "10.0.1.39",
"mask": "255.255.255.0",
"gw": "10.0.1.1"
},
"mmfree": 45216,
"ot": "ott",
"otu_stat": [
272,
251,
176,
0,
173,
800
],
"ott_stat": [
46,
6,
260,
3867
]
}
Поздравляю, вы прошли половину пути и надеюсь все у вас получилось!
Этап 2: Подключение к IR360 с конкретной целью - вкл/выкл скажем ТВ. Для этого изначально IR360 должен знать о существовании вашего ТВ и пульт должен быть выбран не из базы Xiaomi, а обучен каждой кнопкой на пульте. Как обучить IR360 кнопкам на ваших пультах смотрите в обзоре самого устройства в начале этого поста. Итак:
1. IR360 знает о нашем пульте, обучен всем кнопкам и где-то в недрах своих хранит эти коды. Нам нужно получить их. Есть самый простой способ и несколько других. Я поищу самый простой. С помощью андроид телефона, с правами рута, на котором вы и проводили обучение кнопкам пультов. Если же так получилось, что у вас андроида нет (беда еще та), то делайте как я )). Находим жертву с таким чудо телефоном, устанавливаем ему MiHome из PlayMarket, регистрируем его как пользователя в сети Xiaomi (через приложение) и на своем айфоне делимся устройством (Share) с лучшим другом и его телефоном. Отправили ему приглашение, он его получил. Видит ваше устройство. Дальше внимание! Друг должен своим телефоном включить и выключить, переключить каналы, громкость и т.д. И только после этого вся база с кодами кнопок будет в его телефоне и он ее заберет по адресу /data/data/com.xiaomi.smarthome/files/IR_REMOTE_DID_device.json и отдаст вам. После этого он удалит ваше устройство из своего MiHome, или это сделайте вы, удалив расширенное другу устройство. Во всем этом есть одна плохая новость, если вы будете обучать IR360 новым пультам или новым кнопкам на них, эту процедуру придется делать неоднократно. Друг будет несказанно рад вашему приглашению "выпить пива", прихватив с собой телефон ))
2. Открываем полученный файл любым текстовым редактором. В нем структура такова: вначале перечень пультов устройств, например:
{"ParentID":"55301223","Timestamp":1507920713,"DeviceID":"1EjyJLNAXsiPQYxbTZQOdYcmDwhr29hr",
"DeviceType":2,"BrandName":"Xiaomi","State":0,"DeviceTitle":"TV Philips","Location":0,"DeviceData":"",
"DataProvider":"MiDataProvider","MatchedMonitorID":"","StudyMonitorID":"yCti97QS6yS8NEHJEc7j7PNVLABYIe
Nq", "StudyMonitorSectionCount":4},{"ParentID":"55301223","Timestamp":1507925284,
выделенное в тексте это ID устройства к которому ниже в файле будут указаны коды кнопок. Ниже, под перечнем устройств, начинается секция с описанием кодов кнопок. Выглядит примерно так:
{"key":"9","value":"Z6WfAKYBAADRAQAAYAMAAIcDAACnAwAAdAoAAJBGAQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAlIQEBIQMBAQEBAQEBAQEBASQBYyUhAQEhAwEBAQEBAQEBAQEBIwFjJSEBASE
DAQEBAQEBAQEBAQEjAWMlIQEBIQMBAQEBAQEBAQEBASMBAw==","freq":38400},
{"key":"power","value":"Z6V9AIsBAADqAQAAUQMAAKADAAB0CgAAmwoAAJxEAQAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAlIQEBIQMBAQEBAQEBAQEBAQMhAWElIQEBIQMBAQEBAQEBAQEBAQMhA
WEkIQEBIQMBAQEBAQEBAQEBAQMhAQE=","freq":38400}
Обратите внимание, параметр key это "название кнопки", так как вы ее обозвали, когда "обучали" IR360 кнопкам на физическом пульте. Длинная цепочка символов (параметр value - код кнопки на "пульте" и в моем случае для выключения ТВ это будет ****"Z6V9AIsBAADqAQAAUQMAAKADAAB0CgAAmwoAAJxEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAlIQEBIQMBAQEBAQEBAQEBAQMhAWElIQEBIQMBAQEBAQEBAQEBAQMhAWEkIQEBIQMBAQE
BAQEBAQEBAQMhAQE="****
3. Возвращаемся в консоль и с трепетом даем команду
miio --control IP_устройства --token токен_устройства --method miIO.ir_play --params '{"freq":38400,"code":"код_кнопки"}
И в этот момент ваш ТВ (или на что вы там рассчитывали) делает магический щелчок и получает статус "ВКЛ или ВЫКЛ" или что-либо иное.
Поздравляю! Вы научились управлять IR360 из консоли. А дальше объекты, скрипты и только ваша фантазия может ограничить вас. Удачи!