Xiaomi Remote 360

Antworten
Maryan
Beiträge: 4
Registriert: 13.01.2018, 23:37

Xiaomi Remote 360

Beitrag von Maryan » 18.01.2018, 21:57

Продолжая традицию "узнал сам - поделись с другими" опишу свои наработки с устройством Xiaomi Remote 360 (или IR 360). Здесь обзор на устройство https://www.ixbt.com/live/kvazis/obzor- ... narii.html
IR360.jpeg
IR360.jpeg (11.7 KiB) 683 mal betrachtet
Данное устройство работает как самостоятельное устройство или как часть экосистемы 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 у вас в любом случае установлен. Проверить можно командой

Code: Alles auswählen

node -v

в ответ получаем версию. Если не установлен, то что вы тут делаете? )) или установить командой в консоли

Code: Alles auswählen

sudo apt install nodejs
2. Устанавливаем модуль miIO

Code: Alles auswählen

npm install -g miio
3. Скандируем сеть на предмет наличия совместных устройств

Code: Alles auswählen

miio --discover
в ответ получаем (хуже если нет) список обнаруженных устройств. Сохраняем Device ID, Address, Тoken. Наша цель IR 360, поэтому ищем в списке именно его. Советую присваивать устройству статический IP по MAC адресу. В перспективе нам к нему будет проще обращаться по постоянному IP.
4. Опрос выявленного IR360

Code: Alles auswählen

miio --inspect IP_устройства --token токен_устройства
5. Получает JSON IR 360

Code: Alles auswählen

miio --control IP_устройства --token  токен_устройства --method miIO.info
На выходе должна быть информация вида (перс.данные устройства скрываю за ХХХХХХХХХ - ФЗ 152 :D ):

Code: Alles auswählen

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. Открываем полученный файл любым текстовым редактором. В нем структура такова: вначале перечень пультов устройств, например:

Code: Alles auswählen

{"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 устройства к которому ниже в файле будут указаны коды кнопок. Ниже, под перечнем устройств, начинается секция с описанием кодов кнопок. Выглядит примерно так:

Code: Alles auswählen

{"key":"9","value":"Z6WfAKYBAADRAQAAYAMAAIcDAACnAwAAdAoAAJBGAQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAlIQEBIQMBAQEBAQEBAQEBASQBYyUhAQEhAwEBAQEBAQEBAQEBIwFjJSEBASE
DAQEBAQEBAQEBAQEjAWMlIQEBIQMBAQEBAQEBAQEBASMBAw==","freq":38400},
{"key":"power","value":"Z6V9AIsBAADqAQAAUQMAAKADAAB0CgAAmwoAAJxEAQAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAlIQEBIQMBAQEBAQEBAQEBAQMhAWElIQEBIQMBAQEBAQEBAQEBAQMhA
WEkIQEBIQMBAQEBAQEBAQEBAQMhAQE=","freq":38400}
Обратите внимание, параметр key это "название кнопки", так как вы ее обозвали, когда "обучали" IR360 кнопкам на физическом пульте. Длинная цепочка символов (параметр value - код кнопки на "пульте" и в моем случае для выключения ТВ это будет "Z6V9AIsBAADqAQAAUQMAAKADAAB0CgAAmwoAAJxEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAlIQEBIQMBAQEBAQEBAQEBAQMhAWElIQEBIQMBAQEBAQEBAQEBAQMhAWEkIQEBIQMBAQE
BAQEBAQEBAQMhAQE="


3. Возвращаемся в консоль и с трепетом даем команду

Code: Alles auswählen

miio --control IP_устройства --token токен_устройства --method miIO.ir_play --params '{"freq":38400,"code":"код_кнопки"}
И в этот момент ваш ТВ (или на что вы там рассчитывали) делает магический щелчок и получает статус "ВКЛ или ВЫКЛ" или что-либо иное.

Поздравляю! Вы научились управлять IR360 из консоли. А дальше объекты, скрипты и только ваша фантазия может ограничить вас. Удачи!
Zuletzt geändert von Maryan am 18.01.2018, 22:31, insgesamt 1-mal geändert.

Maryan
Beiträge: 4
Registriert: 13.01.2018, 23:37

Re: Xiaomi Remote 360

Beitrag von Maryan » 18.01.2018, 22:17

Говорю же "мир не без добрых людей".
Вот мануал как "достать 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.
  • 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.
  • 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)
  • 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. Лишний повод выпить пива самому и не звать соседа, хотя ... с соседом(кой) веселее ))

Pooh
professional
Beiträge: 126
Registriert: 11.05.2017, 05:15
Wohnort: Самара
Kontaktdaten:

Re: Xiaomi Remote 360

Beitrag von Pooh » 02.02.2018, 04:45

У меня так не прокатывает:

Code: Alles auswählen

miio --discover
так работает:

Code: Alles auswählen

miio discover
у нас разный софт?

Code: Alles auswählen

miio --version
0.15.5

Antworten