Source

Данные летят в Китай? Только ты не допускай!

Большинство “умных” устройств всячески стараются затащить вас в свою постель экосистему и держать там как можно дольше. Всякие “умные” лампочки, розетки, камеры предлагают вам зарегистрировать устройство на собственном сервере, чтобы через приложение удобно им управлять.

Шибко умные!”, — считают продвинутые пользователи, которым не сидится на месте ровно, и всячески пытаются перехватить управление этими устройствами в свои руки. Это отчасти связано с паранойей — “за нами следят”. Им кажется, что “товарищ майор”, либо “хитрый китаец” знают что происходит у них дома, следят за ними через камеру и в любой удобный момент могут отключить свет в туалете, пока они там находятся.

Поэтому, эти пользователи создают “хаки”, прошивки и другие обходные маневры, чтобы остановить слежку и перенаправить “умные” устройства на свой собственный сервер.

Сегодня я поддержу этих пользователей и расскажу как можно отобрать у компании Xiaomi контроль за их датчиками и кнопками, работающими по протоколу Zigbee. Эти датчики и устройства очень популярны среди любителей “этого дела” (домашней автоматизации и “Умных домов”) благодаря своей доступности и внешнему виду.

Пусть в Китай летят журавли, а наши данные останутся при нас.

Узкие места

Стратегически важным “местом утечки данных” считается Zigbee-Wifi-шлюз от Xiaomi, который подключен к сети и может отправлять какие-то данные на внешние сервера. Но это легко исправляется, если на роутере заблокировать внешний доступ этому устройству.

Еще одним “узким местом” является аккаунт в приложении MiHome, где настроено подключение к шлюзу и видны все устройства заведенные в него. Для этого случая уже давно известен способ включения developer-режима на шлюзе и получения управляющего токена. После чего, можно напрямую общаться со шлюзом по сети без приложения MiHome. Именно этим способом пользуются все системы “умного дома”, чтобы работать с датчиками и устройствами Xiaomi.

Но есть и более кардинальный способ — отказ от шлюза Xiaomi и MiHome. Т.е. организация своей собственной Zigbee-сети и подключение датчиков и устройств Xiaomi к ней. Вот об этом чуть более подробно.

Варианты решения

Один из вариантов — использовать иной хаб Zigbee-устройств. Например, Samsung SmartThings, Wink Hub 2, Mixtile Hub или какой-то иной. Но это “менять шило на мыло” и значительного профита никакого — данные как улетали, так и будут улетать, только в другие края.

Второй вариант — спец платы, добавляющие функционал Zigbee нашему серверу “Умного дома”. Это уже более удобный вариант для нашего параноика.

Эти устройства выступают в роли “Координатора” Zigbee-сети (вместо шлюза Xiaomi) и организуют сеть, регистрируют устройства и могут управлять ими. Дополнительно, эти решения позволяют подключать все разнообразные Zigbee-устройства, а не только от Xiaomi.

В Европе есть несколько экземпляров таких устройств.

Dresden Elektronik

ConBee или RaspBee

Для работы требуют установки специального драйвера и приложения. А для возможности интеграции в систему “Умного дома”, требуется REST-плагин, обрабатывающий http-запросы:

Стоимость ~$35

Zigate

Совмещает в себе Zigbee и Wifi — может работать как шлюз.

Стоимость ~49.00 €

Есть готовые наработки по интеграции в системы “Умного дома”:

А вот у российских пользователей есть надежда на другой вариант, правда не сразу готовый для потребления:

Texas Instruments

cc2531 или платы на базе cc2530

Для работы в качестве координатора Zigbee-сети, необходимо прошить специальную прошивку. После этого возможна интеграция с системами “Умного дома”:

Стоимость ~$10

Основная логика находится не в прошивке, а в модуле интеграции с системой “Умного дома”, который работает с устройством. Поэтому, на текущий момент, еще не все zigbee-устройства Xiaomi через такой шлюз поддерживаются в системах “Умного дома”. Но это дело времени.

Чуть подробнее

Этот последний вариант я решил попробовать на себе.

Началось всё с библиотеки zigbee-shepherd для node.js , именно там я обнаружил упоминания о подключении датчиков xiaomi через zigbee-стик cc2531. Там же есть и прошивка и инструкция по прошивке.

Для прошивки, необходимо присоединить стик через DEBUG-разъем на плате. Это 10 пинов (2*5) с шагом 1.27 мм. Поэтому, можно приобрести отдельно контакты для подключения к такому разъему, либо взять такую плату с кабелем.

Существует как минимум 2 варианта прошить USB-стик cc2531:

  1. используя специализированные устройства, типа CCDebugger
  2. используя Arduino-совместимые микроконтроллеры

Приобрести CCDebugger можно например тут, либо чуть иной блок.

Нужно установить прошивальщик и скачать прошивку. Процесс прошивки очень быстрый — несколько секунд. Вот еще один вариант описан.Можно попробовать прошить через Arduino, с использованием проекта , но с небольшими доработками!!! Один из пользователей описал, что смог прошить CC2531 используя CCLib и описал свои замечания.

Этот способ я тоже попробовал — не понравилось. Процесс прошивки длился около 1.5 часа.

После прошивки можно попробовать пример из библиотеки, либо установить проект , работающий на указанной выше библиотеке и попытаться подключить устройства.

Именно так началась разработка драйвера для ioBroker. Не все zigbee-устройства xiaomi подключились сразу — где-то потребовалось доработать библиотеку, но т.к. ее автор пока забросил, то используется отдельный форк с изменениями.

В итоге, удалось подключить все доступные мне устройства и получить все их параметры.

Слева направо: cc2531, cc2530, cc2530+cc2591, cc2530+RFX2401.

Также можно попробовать устройства на базе cc2530 с внешними антеннами — они “бьют” дальше (~50м в пределах прямой видимости), но выглядят чуть хуже и подключаются через UART. Справа устройство с усилителем — оно “бьет” еще дальше, стоит дороже, но толку не больше — сами датчики Xiaomi не могут послать такой же сильный сигнал, поэтому устройство их не слышит на больших расстояниях.

Итого

Для нерешительных параноиков, подготовил сравнительную таблицу плюсов и минусов

Шлюз Xiaomi cc253x (стик)
❌ Нужен аккаунт Xiaomi для начальной настройки в MiHome ✅ Независимость от аккаунта Xiaomi, Китая, наличия интернета
❌ Работает только с устройствами Xiaomi ✅ Возможность работы с другими Zigbee-устройствами (не только Xiaomi, уже проверено в IKEA TRÅDFRI bulb и FLOALT panel)
❌ Ограниченный (~10м) радиус доступности устройств ✅ Варианты с внешней антенной могут «услышать» устройства на достаточно большом расстоянии (~50м)
❌ Стоимость ~ $30 ✅ Стоимость ~ $10
✅ Отличный внешний вид ❌ Голое устройство, с корпусом стоят дороже
✅ Свободная возможность размещения (там где есть розетка) и доступ по Wifi ❌ Вставляется в компьютер (или микрокомпьютер/одноплатник/малина) и зависит от его расположения
✅ Благодаря MiHome может управлять устройствами как со смартфона, так и из сторонней системы «Умного дома» ❌ Требует спец драйвер (софт), чтобы управлять устройствами из системы «Умного дома». Управление с телефона — только через систему «Умного дома».
🌀 Сценарии работы устройств настраиваются в MiHome или в системе «Умного дома» 🌀 Сценарии работы устройств настраиваются в системе «Умного дома»
✅ Можно использовать встроенную лампу, радио и датчик освещенности. Агрегирует также wifi-устройства Xiaomi ❌ Нет функций, кроме Zigbee
✅ Не требует специальной доработки и работает «из коробки» ❌ Требуется специальная прошивка, без нее не работает. Либо приобрести уже прошитый стик (в личку), но это увеличивает стоимость.

И если вы всё-таки решитесь избавиться от шлюза Xiaomi — спрашивайте поддержку описанных устройств у своего поставщика системы “Умного дома”.