NEWS


  • Продолжая традицию "узнал сам - поделись с другими" опишу свои наработки с устройством Xiaomi Remote 360 (или IR 360). Здесь обзор на устройство https://www.ixbt.com/live/kvazis/obzor- … narii.html

    5177_ir360.jpeg

    Данное устройство работает как самостоятельное устройство или как часть экосистемы 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
    

Suggested Topics

  • 16
  • 4
  • 4
  • 2
  • 5
  • 1
  • 25
  • 12

2.7k
Online

35.1k
Users

41.1k
Topics

564.4k
Posts