Роботы-пылесосы Xiaomi и Roborock хранят карты помещений в облачном сервисе Mi Home, что позволяет управлять уборкой удалённо. Однако многие пользователи сталкиваются с необходимостью экспортировать эти карты для анализа, резервного копирования или переноса на другое устройство. Официальных инструментов для этого нет, но существуют обходные пути — от легальных API-запросов до сторонних утилит вроде Xiaomi Cloud Map Extractor.

В этой статье разберём, как работают такие инструменты, какие риски связаны с неофициальным доступом к данным Xiaomi, и предоставим пошаговые инструкции для популярных моделей пылесосов. Особое внимание уделим вопросам безопасности — неправильные действия могут привести к блокировке аккаунта или потере доступа к картам.

Что такое Xiaomi Cloud Map Extractor и зачем он нужен

Термин Xiaomi Cloud Map Extractor обозначает набор инструментов (скрипты, программы, API-запросы), которые позволяют извлечь данные картографирования из облака Mi Home. Эти данные включают:

  • 🗺️ Растровые карты — изображение помещения с разметкой стен, мебели и зон уборки.
  • 📊 JSON-данные — координаты объектов, маршруты уборки, истории перемещений.
  • 🔄 Мультикарты — сохранённые конфигурации для нескольких этажей (для моделей с поддержкой multi_floor_map).

Основные причины для извлечения карт:

  • 🔄 Перенос настроек на новый пылесос (например, при замене Roborock S7 на S8 Pro Ultra).
  • 📱 Резервное копирование перед сбросом устройства или перепрошивкой.
  • 🔍 Анализ эффективности уборки (например, поиск "мёртвых зон").
  • 🛠️ Интеграция с системами умного дома (Home Assistant, Node-RED).

Важно понимать, что Xiaomi не предоставляет официального API для экспорта карт. Все существующие решения используют обратную разработку протоколов или уязвимости в авторизации. Это означает, что:

⚠️ Внимание: Использование неофициальных инструментов может нарушать политику конфиденциальности Xiaomi. В крайних случаях аккаунт могут временно заблокировать за "подозрительную активность".
📊 Для чего вам нужны карты пылесоса?
  • Перенос на новое устройство
  • Резервное копирование
  • Интеграция с Home Assistant
  • Анализ уборки
  • Другое

Как устроено хранение карт в облаке Mi Home

Карты роботов-пылесосов Xiaomi/Roborock хранятся в облаке по следующему принципу:

  1. Локальное кэширование: Пылесос отправляет данные на серверы Mi Home в зашифрованном виде (протокол MIOT).
  2. Облачная обработка: Серверы преобразуют сырые данные в растровые изображения и JSON-структуры.
  3. Синхронизация с приложением: Приложение Mi Home загружает карты по запросу пользователя.

Ключевые технические детали:

Параметр Описание Пример значения
map_id Уникальный идентификатор карты 1234567890abcdef
room_id ID комнаты (если разметка выполнена) living_room_1
token Токен устройства для API-запросов 64-char-hex-string
did Идентификатор устройства 123456789

Для извлечения карт необходимо:

  1. Получить token и did вашего пылесоса (см. раздел ниже).
  2. Отправить авторизованный запрос на сервер Mi Home (например, https://api.io.mi.com/app/home/device_list).
  3. Распаковать ответ, содержащий ссылки на карты в формате .png или .json.
Как Xiaomi обнаруживает неофициальные запросы?

Серверы анализируют User-Agent, частоту запросов и геолокацию. Например, если запрос идёт не из официального приложения (User-Agent не совпадает с MiHome/6.0.100), система может заблокировать токен.

Пошаговая инструкция: как получить token и did пылесоса

Без token и did извлечение карт невозможно. Эти данные можно получить несколькими способами:

Способ 1: Через приложение Mi Home (Android)

Для этого потребуется:

  • 📱 Смартфон на Android с root-правами или возможностью перехвата трафика.
  • 🛠️ Утилита Packet Capture или Fiddler.
  • 🔍 Приложение Mi Home с привязанным пылесосом.

Инструкция:

  1. Установите Packet Capture и настройте перехват HTTPS (установите сертификат).
  2. Запустите захват трафика и откройте Mi Home.
  3. Перейдите на страницу управления пылесосом и дождитесь загрузки карты.
  4. В логах найдите запрос к api.io.mi.com с параметром did.
  5. Скопируйте значения token (из заголовка x-xiaomi-protocal-flag-client) и did.

☑️ Подготовка к перехвату токена

Выполнено: 0 / 5

Способ 2: Через скрипт Python (для продвинутых)

Если у вас есть опыт работы с Python, можно использовать библиотеку python-miio:

from miio import ChunmiVacuum

# Подключение к пылесосу (замените на свои данные)

vacuum = ChunmiVacuum(ip="192.168.1.100", token="YOUR_TOKEN_HERE")

# Получение информации об устройстве

print(vacuum.info())

print("Device ID:", vacuum.id) # Это ваш did

Для получения token без root-прав можно использовать утилиту Mi Home Token Extractor (доступна на GitHub).

⚠️ Внимание: Не делитесь своим token и did с третьими лицами! Эти данные дают полный контроль над вашим пылесосом, включая возможность запуска уборки или изменения настроек.

Инструменты для извлечения карт: обзор решений

Существует несколько способов экспорта карт из облака Xiaomi. Рассмотрим самые надёжные:

1. Xiaomi Cloud Tokens Extractor (браузерное расширение)

Расширение для Chrome/Firefox, которое автоматизирует извлечение token и did:

  • ✅ Не требует root-прав.
  • ✅ Работает с большинством моделей (Roborock S5/S6/S7, Xiaomi Vacuum G1).
  • ❌ Может не работать после обновлений Mi Home.

Ссылка на репозиторий: GitHub.

2. Valetudo (альтернативная прошивка)

Valetudo — это открытая прошивка для роботов-пылесосов, которая позволяет управлять устройством без облака Xiaomi. Преимущества:

  • 🔒 Полный контроль над данными (карты хранятся локально).
  • 📤 Встроенный экспорт карт в формате .svg или .png.
  • ⚠️ Требует разблокировки загрузчика и прошивки через ADB.

Поддерживаемые модели: Roborock S5/S6/S7, Xiaomi Vacuum 1S.

3. Home Assistant с интеграцией Xiaomi Miio

Если вы используете Home Assistant, можно настроить автоматический экспорт карт:

  1. Установите интеграцию Xiaomi Miio.
  2. Добавьте в конфиг configuration.yaml:
vacuum:

- platform: xiaomi_miio

host: 192.168.1.100

token: YOUR_TOKEN_HERE

map_path: /config/vacuum_maps

Карты будут сохраняться в указанную папку в формате .png.

💡

Если после обновления Mi Home перестал работать Xiaomi Cloud Tokens Extractor, попробуйте очистить кэш приложения или использовать версию Mi Home 5.6.42 (стабильная для извлечения токенов).

Риски и ограничения при извлечении карт

Несмотря на удобство, неофициальные методы сопряжены с рисками:

Риск Последствия Как минимизировать
Блокировка аккаунта Временная приостановка доступа к Mi Home (от 24 часов до недели). Не отправляйте более 10 запросов в минуту.
Потеря карт При некорректном экспорте облако может сбросить сохранённые данные. Создайте резервную копию через Valetudo перед экспериментами.
Утечка токена Злоумышленники могут управлять вашим пылесосом. Храните токен в зашифрованном виде (например, в KeePass).

Дополнительные ограничения:

  • 🚫 Новые модели (Roborock S8 Pro Ultra, Xiaomi Vacuum X20) могут использовать усиленное шифрование, которое пока не поддерживается сторонними инструментами.
  • 🔄 Мультикарты (несколько этажей) извлекаются не всегда корректно — возможны наложения слоёв.
  • 📡 Для работы большинства скриптов требуется стабильное подключение к серверам Xiaomi (в Китае доступ может быть ограничен).
💡

Если ваша модель пылесоса выпущена после 2023 года, проверьте совместимость инструментов на форумах (например, Valetudo Cloud). Новые устройства часто требуют обновлённых методов извлечения.

Альтернативные методы: если облако недоступно

Если доступ к облаку Mi Home заблокирован (например, из-за геоограничений) или вы не хотите рисковать аккаунтом, можно попробовать локальные методы:

1. Извлечение карт через ADB (для Android)

Если пылесос подключён к телефону через Mi Home, карты могут кэшироваться в папке:

/data/data/com.xiaomi.smarthome/files/map/

Чтобы получить доступ:

  1. Подключите телефон к ПК и запустите adb shell.
  2. Выполните команду:
adb pull /data/data/com.xiaomi.smarthome/files/map/ ./vacuum_maps

⚠️ Требуются root-права.

2. Использование SDK от Roborock

Roborock предоставляет ограниченный SDK для разработчиков. С его помощью можно легально получать:

  • 📏 Данные о комнатах (площадь, тип покрытия).
  • 📍 Координаты зон уборки.
  • ❌ Но не растровые карты (только векторные данные).

3. Ручной обмер помещения

Если цифровые методы недоступны, можно восстановить карту вручную:

  1. Сфотографируйте план помещения (например, через Google Maps).
  2. Нанесите разметку в Sweet Home 3D или Floorplanner.
  3. Экспортируйте в формат .svg и загрузите в пылесос через Valetudo.

FAQ: Частые вопросы по извлечению карт

Можно ли извлечь карты без root-прав на телефоне?

Да, но с ограничениями:

  • Используйте Xiaomi Cloud Tokens Extractor (браузерное расширение).
  • Для Home Assistant root не нужен — достаточно токена устройства.
  • Если пылесос поддерживает Valetudo, прошейте его без облака.

Однако для перехвата трафика (token/did) на нерутованном телефоне потребуется MITM-прокси (например, Fiddler с сертификатом).

Почему после извлечения карта отображается некорректно?

Частые причины:

  • 🔄 Карта сохранена в мультиэтажном режиме — попробуйте экспортировать каждый этаж отдельно.
  • 📏 Разрешение изображения искажено — проверьте параметры scale и pixel_ratio в JSON-данных.
  • 🔒 Сервер вернул устаревшую версию карты — обновите данные в приложении Mi Home.

Для диагностики откройте JSON-файл карты и проверьте поля "frames" и "segments".

Как перенести карту с Roborock S5 на S7?

Порядок действий:

  1. Экспортируйте карту с S5 через Valetudo или Home Assistant (формат .svg).
  2. Подключите S7 к Valetudo и загрузите карту через веб-интерфейс (Map Management → Upload).
  3. При необходимости откорректируйте зоны уборки вручную.

⚠️ Убедитесь, что масштаб карт совпадает (проверьте реальные размеры комнат).

Законно ли использовать Xiaomi Cloud Map Extractor?

Юридический статус неоднозначен:

  • ✅ Вы имеете право на личное использование данных своего устройства.
  • ⚠️ Нарушаются условия обслуживания Xiaomi (раздел 5.3 о "несанкционированном доступе").
  • ❌ Запрещено распространять токены или карты третьим лицам.

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

Можно ли автоматизировать экспорт карт?

Да, с помощью:

  • 🤖 Home Assistant + Python-скрипт с планировщиком (cron).
  • 📥 Valetudo + модуль map_saver (сохраняет карты при каждом обновлении).
  • 🌐 Облачных сервисов вроде IFTTT (ограниченная функциональность).

Пример скрипта для автоматического экспорта:

#!/bin/bash

# Экспорт карты раз в день (требуется miio-cli)

miio --ip 192.168.1.100 --token YOUR_TOKEN vacuum map > /maps/$(date +%Y-%m-%d).json