NEWS
Xiaomi Remote 360
-
Продолжая традицию "узнал сам - поделись с другими" опишу свои наработки с устройством 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 из консоли. А дальше объекты, скрипты и только ваша фантазия может ограничить вас. Удачи!
-
Говорю же "мир не без добрых людей".
Вот мануал как "достать json файл с кодами кнопок пультов для владельцев iOS устройств.
Без джейлбрейка
- Setup your iOS device with the Mi Home app
- Create an unencrypted backup of your iOS device on your computer using iTunes. In case you are unable to disable encryption you probably have a profile preventing this that enforces certain security policies (like work related accounts). Delete these profiles or use another iOS device to continu.
- Install iBackup Viewer from http://www.imactools.com/iphonebackupviewer/
- Navigate to your BACKUPS and find the name of your iOS device in the list. Open this backup by clicking the triangle in front of it and then click on raw data.
- Sort the view by name and find the folder com.xiaomi.mihome and highlight it (it's somewhere at the end). After highlighting it click on the cockwheel above the results and select "Save selected files" from here and choose a location to save the files.
- Navigate to the com.xiaomi.mihome folder which you just saved somewhere and inside this folder navigate to the /Documents/ subfolder. In this folder there is a file named _mihome.sqlite where your userid is specific for your account.
- Open this file with a SQLite browser (for instance http://sqlitebrowser.org/%29
- Execute the query "select ZTOKEN from ZDEVICE where ZLOCALIP is '192.168.0.1'" where you replace the IP address with the IP address of the Mi Home device you want to get the token from. It will show you the 32 character device token for your Mi Home device.
С джейлбрейком
- Setup your iOS device with the Mi Home app
- Use something like Forklift sFTP to connect to your iOS device and copy this file to your computer: /var/mobile/Containers/Data/Application/514106F3-C854-45E9-A45C-119CB4FFC235/Documents/USERID_mihome.sqlite ** username: root ** IP address: your phones IP address ** password: alpine (unless you changed it something else)
- Open this file with a SQLite browser (for instance http://sqlitebrowser.org/)
- Execute the query "select ZTOKEN from ZDEVICE where ZLOCALIP is '192.168.0.1'" where you replace the IP address with the IP address of the Mi Home device you want to get the token from. It will show you the 32 character device token for your Mi Home device.
Источник: https://github.com/jghaanstra/com.xiaom … #ios-users
P.S. Лишний повод выпить пива самому и не звать соседа, хотя … с соседом(кой) веселее ))
-
У меня так не прокатывает:
miio --discover
так работает:
miio discover
у нас разный софт?
miio --version 0.15.5