Инструкция для получения доступа к устройству в целях получения и хранения данных с него удобным образом. Зачем? Чтобы в перспективе настроить свой Умный Дом без ограничений приложений, которые предоставляют производители.  Приветствую! Меня зовут Андрей Степанов, я CTO во fuse8. Для этой статьи мы с фронтенд-разработчиком Дмитрием Симоновым обсудили его опыт настройки техники Xiaomi. Вот, что он рассказал. Купил очиститель воздуха Xiaomi Mi Air Purifier 3H и занялся настройкой. Оказалось, что у устройств Xiaomi  есть привязка к региону продажи или экспорта. Это значит, что  нельзя просто так взять и подключить любое устройство к одному приложению miHome. Например у меня получилось так, что робот-пылесос был привязан к Китаю, а очиститель воздуха – к Сингапуру, и запускать их в одном miHome не получается. Причем эта привязка реализована вроде как в самом miHome, но это не точно.Погуглив, выяснил, что есть 2 популярных решения. Первое – поставить какое-то приложение от отечественных умельцев, которые вырезали это ограничение на подключение к приложению. Это решение я не пробовал, поэтому рекомендовать не буду. Второе решение – сделать клонирование приложения с теми же логином и паролем, но с другим регионом. Им я и воспользовался. Реализуется в 2 клика: вот подробная инструкция для  xiaomi.  Каково было мое удивление, когда я узнал, что приложение не отображает динамику. В нем просто дублировалась информация с устройства, например: сейчас 27 градусов и 43% влажности. Еще были доступны кнопки управления устройством: включить, выключить и изменить скорость. А ведь хотелось следить за тем, как меняется влажность в зависимости от температуры, просматривать динамику влажности по дням, ну хоть что-то такое… Я подумал, что было бы здорово получать информацию с устройства на компьютер сейчас и на raspberry pi в перспективе. На локальной машине уже можно хранить данные, обрабатывать и выводить их по своему желанию. И да, я видел, что есть готовые решения типа home-assistant, но я хочу свой велосипед. Мой  Mi Air Purifier 3H использует miIO протокол для передачи данных по wi-fi. Чтобы реализовать наблюдение на локальной машине, нужен инструмент, который будет парсить отправляемые устройством пакеты и декодировать их. Скажу сразу – на питоне сделать это было бы быстрее, так как библиотека python-miio обновляется чаще. Но я просто фронт, а значит все будет javascript 🙂 Для node.js тоже есть решение. Это miIO Device Library, но последнее обновление было сделано 6 лет назад. Но это не беда: помимо декларативного управления описанных устройств есть управление напрямую. Ставим библиотеку. С помощью команды npm install miio. Пишем маленький сервер Теперь перейдем к библиотеке. В общих чертах управление  будет выглядеть так: вызываем метод device, в качестве параметра передаем объект с полями: address - ip адрес Mi Air Purifier 3H в локальной сети и token -  токен авторизации. Здесь можно посмотреть, как получить токен. Метод device возвращает объект устройства (промис, если точнее). У него есть метод call, который принимает уже непосредственно команды. Конструкция   требует пояснения. С ее помощью задаем, с какого датчика нам нужно  получить показания. Вот как эта конструкция формируется: Ищем спецификацию на ваше устройство по ссылке вот такого формата: https://miot-spec.org/miot-spec-v2/instance?type= + ваше устройство (поможет Google). В моем случае получилось вот так: https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:air-purifier:0000A007:zhimi-mb3:1 Спецификация по ссылке отдается  в формате json. Далее методом пристального взгляда ищем нужные нам свойства. Мне нужны были температура и влажность. «Вот так, с помощью нехитрых приспособлений буханку белого (или черного) хлеба можно превратить в троллейбус… Но зачем?» (с) После вышеописанных манипуляций удается получить доступ к устройству. Можно хранить и выводить информацию с датчиков, как вашей душе угодно. Можно пилить свой Умный Дом с полной автоматикой, блекджеком и Алисой, и все это  без ограничений приложений, которые предоставляют производители.  У меня по плану: жду малинку, запущу там Node, добавлю какую-нибудь базу и буду пилить фронт с графиками и прочей живностью...  СТО — fuse8