Ble шлюз своими руками

Bluetooth шлюзы Xiaomi

Bluetooth протокол

В системе умного дома Xiaomi используются 3 протокола беспроводной связи Wi-Fi, ZigBee и Bluetooth. И если с принципом работы первого знакомы все, второй разобран в отдельной статье, то по блютус протоколу могут возникнуть вопросы. Например, из-за его небольшого радиуса действия устройства с Bluetooth видятся только в непосредственной близости со смартфоном.

Чтобы решить эту проблему, в 2017 году было введено понятие Bluetooth-шлюз.

Принцип работы аналогичен ZigBee шлюзам, датчик с модулем Bluetooth подключается к одному из устройств, которое имеет одновременно 2 беспроводных интерфейса, по блютусу держит связь с датчиком, а по Wi-Fi обменивается данными с облаком. Схематично это выглядит так:

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

Устройства с протоколом Bluetooth можно разделить на 2 категории: подключаемые устройства и Bluetooth шлюзы. Посмотреть полный список устройств, которые могут выполнять роль шлюза, можно в приложении Mi Home, во вкладке «Profile» > «BLE Gateway».

Если у вас уже есть устройства, которые могут выполнять роль шлюза, они отобразятся в списке. А если зайти в Bluetooth шлюз, то отобразится список устройств которые можно к нему подключить. В приложении присутствует небольшая инструкция:

А вот если подходящих устройств нету, то приложение предложит их купить:

На данный момент (январь 2020 года), 10 устройств поддерживают функцию шлюза:

1. Камера видеонаблюдения Mijia Smart Home Camera

Одно из первых устройство с функцией Bluetooth шлюза. Вполне неплохая камера с FullHD разрешением и углом обзора в 130 градусов. Сейчас уже снята с продажи и найти её затруднительно , но если вдруг вам попадется, её код продукта S XJ01ZM .

Источник

BLE шлюз из Xiaomi Gateway DGNWG05LM *без BLE

(eu version — lumi.gateway.mieu01)

В этом посте я расскажу как можно собирать данные BLE и передавать через MQTT в системы умного дома, например в HomeAssistant.

Как все начиналось?

Эта история началась в прошлом году: у меня появился несколько таких шлюзов. В то время было несколько статей по получению root доступа, интеграции miio в HA и по прошивке чистого openwrt на шлюз. Толчком к развитию стал сезон распродаж в разных магазинах, где стоимость шлюза стремилась к нулю , и многие энтузиасты получили интересную железку.

Первым большим делом для меня было заставить работать zigbee2mqtt с чипом и прошивкой находящимся в шлюзе. И пока я допиливал интеграцию в zigbee-herdsman, ребята в чатике @xiaomi_gw_hack занимались добавлением поддержки в openwrt периферии, которая была в шлюзе (светодиоды RGB, динамик, датчик света, wi-fi модуль).

Было обнаружено, что в wifi модуле rtl8723bs европейской версии шлюза есть встроенный bluetooth с поддержкой BLE.

Но в стоковой системе на шлюзе нет никаких следов bluetooth. И лишних uart, по которому можно было бы с ним работать — тоже. @lenz1986 провел раскопки

Несколько плат очень помогли разобраться в внутреннем мире шлюза Вот как плата выглядит без процессора )

Читайте также:  Ворота своими руками варианты ворот

Он вызвонил контакты, и обнаружил что на плате разведены все 4 UART от процессора. Один из которых вел на uart от bluetooth части модуля wifi rtl8723bs. Потом он добавил поддержку этого uart в DTB , где описываются вся периферия устройства для openwrt и нашел подходящие драйвера. За что @lenz1986 огромное спасибо!

Внимание! Все действия я описываю и делаю на базе openwrt прошивки для шлюза. Установить ее можно по воздуху просто подключившись по uart к шлюзу. (спасибо @divanikus)

Bluetooth инициализируется через rtk_hciattach при запуске шлюза. После загрузки мы получаем такую картину hciconfig

Я знаю 2 пути, как можно включить bluetooth адаптер.

Руками hciconfig hci0 up

изменив параметр AutoEnable конфиге /etc/bluetooth/main.conf на true

Я выбираю второй. Интерфейс запущен. Для проверки можно запустить скан hcitool lescan

Работа с BLE

Мои знания по BLE были на нуле, и чтобы было проще разобраться я искал что-то готовое по типу zigbee2mqtt. Перепробовал несколько решений на Node.Js, в том числе пакеты для node-red. Остановился на проекте EspruinoHub. (хоть и код там не супер современен и технологичен, но зато работает)

После запуска с отсылкой данных в локальный mqtt сервер, в CLI и web интерфейсе уже показались распарсенные данные с части датчиков LYWSDCGQ (круглые гигротермографы) .

Раньше я их слушал на esp32 через esphome. Небольшое сравнение получаемых данных с одного термометра.

Это меня порадовало, но у меня было еще несколько устройств, данные от которых я увидел почти в raw виде. И я решил использовать эту программу и немного улучшить ее.

пример cli интерфейса с статусом доступных устройств

Многие устройства Xiaomi с bluetooth шлет BLE Advertising Packet, в большинстве случаев в нем содержится полезная нагрузка в виде измерений, которые производит устройство. Часто данные отправляются открыто, но используется шифрование с ключом.

Например для браслета MiBand данные выглядят вот так. Если есть данные о пульсе то они добавляются в конец

В устройствах xiaomi, часто используется BLE сервис fe95. В интернете есть небольшая документация по нему .На github есть множество проектов которые умеют парсить эти данные. На основе этих данных и существующей реализации espruino я немного улучшил парсинг открытых данных, но потом я нашел более красивое решение из hannseman/homebridge-mi-hygrothermograph. Мне особенно понравилась стандартизация разных событий и расшифровка исходя из данных заголовка.

Этот парсер закрыл вопрос с большинством устройств Xiaomi, отправляющих данные в fe95. Можно еще попробовать добавить некоторые типы событий (движение, дым, нажатие на кнопку), но у меня нет таких устройств под рукой.

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

MQTT Discovery — Home Assistant

Данных стало больше, но хотелось чтобы они автоматически появлялись в HomeAssistant. EspruinoHub отправляет данные которые и слышит в эфире, и не имеет на данный момент привязки к конкретным устройствам. Поэтому в момент появления данных, если они из списка поддерживаемых отправляется config устройства в топик homeassistant в mqtt и устройства появляются в системе умного дома

Добавленные и протестированные устройства.

В результате изучения разных решений и raw сообщений от устройств удалось добавить или улучшить интеграцию следующих устройств в пассивном режиме (только слушаем эфир не подключаемся к устройствам и не тратим батарейку).

LYWSDCGQ — работал «из коробки». Добавил только mqtt discovery в HA

Читайте также:  Как изменить старую мебель своими руками

показания пере

LYWSD02 — температура, влажность и батарейка

Самый бюджетный датчик температуры и влажности с экраном LYWSD03MMC — температура, влажность и батарейка (нужен bindKey). Существует 2 альтернативные прошивки, они очень крутые и продвинутые. Особенно от Виктора pvvx. Рекомендую использовать именно ее. Помимо лучшего потребления она шлет данные в одном пакете, а не в трёх и имеет множество настроек.

MI SCALE181d v1 По крупицам из разных источников допилена реализация в которой показываются данные о — стабилизации веса (весы моргают) — убрали вес (встали с весов) — дата и время измерения. 181b v2 Работает, но не тестировал лично. Возможно нужно что-то допилить

Mi band 3 fee0 Шаги и Пульс в режиме тренировки. Чтобы браслет отправлял данные необходимо включить обнаружение в MiFit.

Как оказалось шлюз очень хорошо и далеко слышит, а эта функция включена у многих людей. Работает это и для других моделей и даже на некоторых часах например Amazfit GTS

HHCCJCY01 MiFlora, Huahuacaocao — temperature, moisture, illuminance, conductivity, battery_level

Другие устройства тоже можно попробовать подключить. Если они шлют в кодированном виде, то в mqtt об этом будет ошибка с просьбой указать bindKey в конфиг.

YEERC — я обнаружил что прошивка для esp32 tasmota сообщает, что поддерживает данный пульт. Он идет в комплекте с многими люстрами YEELIGHT, но к сожалению у меня не получилось нигде найти как получить 32 символьный bindKey для него. Сообщения нажатий я вижу, но не могу расшифровать. (Значение event закодировано и зависит от counter который увеличивается с каждым нажатием) Возможно кто-то из читателей подскажет как добыть данный ключик. Пульт можно привязать к нескольким люстрам в разное время и они будут вместе расшифровывать и отрабатывать нажатия. Скорей всего ключ там не изменяется со временем или привязкой.

Как установить EspruinoHub на шлюз Xiaomi с OpenWrt ?

Можно установить и на другие устройства с помощью git / npm, инструкция на странице проекта EspruinoHub

Установка

Мои последние наработки собраны в пакет и ставятся с помощью opkg

Дальше установить собранный пакет.

Конфигурирование

По-умолчанию он будет пытаться подключиться к локальному mqtt без авторизации. Если вы хотите подключить к внешнему брокеру mqtt, то нужно изменить конфиг в /etc/espruinohub/config.json

Внимание! у некоторых настроек в начале стоят слеши чтобы они не применялись. (конфиг в этом проекте частично сделан как пример и я не стал ничего менять)

Пример конфига можно посмотреть тут. Если вы знаете мак адреса своих устройств то рекомендую их прописать и установить «only_known_devices»: true , чтобы не отправлялись данные с чужих устройств из эфира.

Для работы с HomeAssistant достаточно отправлять данные в json формате, а остальное можно выключить. По умолчанию будет отправлять в топики с группировкой по типу данных.

Планы

Отслеживание носимых устройств по rssi между комнатами. Для этого в конфиг я добавил возможность указать минимальный rssi в разрезе устройства и таймаут присутствия.

данные с устройств летят достаточно часто если они в зоне прямой видимости.

Активные подключения: хочу попробовать управлять некоторыми устройствами по BLE, но для одновременного подключения и сканирования Bluetooth модуль и ПО могут работать нестабильно. Поэтому я пока только изучаю этот вопрос.

Альтернативные opensource проекты работающие с BLE на шлюзе

devbis/ble2mqtt — своя реализация на python через bleak, умеет подключаться к чайникам, но сильно грузит процессор.

Читайте также:  Как правильно убрать ржавчину автомобиля своими руками

Beetle-II/lumi — тот же парсер из hannseman/homebridge-mi-hygrothermograph, но без возможности задать индивидуальный ключ bindKey для устройства. Нет raw данных и управление через mqtt. + Умеет работать не только с BLE.

Заключение

Спасибо, что дочитали до конца!

Если у Вас есть вопросы, то можете задавать их в комментариях.

Источник

SLS gateway. Или сказ о том как из китайского сделать шлюз здорового человека.

Обзор и личное мнение о реализации самодостаточного Zigbee шлюза. Переделка Xiaomi шлюза.

Когда речь заходит о строительстве умного дома многие без лишних сомнений выбирают решения от Китайского бренда Xiaomi и его суббрендов. Замыкаются в его экосистему и упираются в ее ограничения. А ограничений, к слову сказать, предостаточно. И назвать Xiaomi дом по-настоящему умным, честно говоря, язык не поворачивается. Особенно в сравнении с такими монстрами автоматизации как nodered или homeassistant.

Но вот незадача, как только умный дом Xiaomi исчерпает себя (у меня это случилось менее чем через 3 недели), начинаются поиски альтернативного решения. Есть Xiaomi оборудование, в лице неплохих датчиков и исполнителей. Есть шлюз, как качественное законченное решение со своим блоком питания, RGB подсветкой, но бездарной подсистемой автоматизации, построения логических зависимостей. Да еще и с китайским облаком (потому как жить в RU сегменте теоретически можно, но дико ограниченно, в виду отсутствия большого количества устройств).

Первое с чем сталкивается, как вариант решения, любой такой человек — использовать в качестве шлюза стик TI CC2531. Дешево и сердито. Прошивается не только через специализированные платы для прошивки, но даже через «малину» и arduino. Что делает его автоматически самым доступным из открытых zigbee шлюзов. Но…

Но у устройства есть куча ограничений, начиная от собственной мощности сигнала и заканчивая количеством устройств, которые будут подключены к нему одновременно (даже неактивные). И эти факторы делают из него прекрасную первую ступеньку, но никак не продуктивное решения для настоящего умного дома.

Следом идет, пожалуй, крайне популярный V3 стик. Который уже самому так просто не прошить (требуется доп. оборудование — прошивальщик), да и собирать придется самостоятельно, в отличии от предыдущего коллеги по цеху сс2531. Можно купить собранным силами увлеченных людей, но заводской реализации нет. Стик V3 основан на двух чипах от все той же TI — CC2538 с усилителем CC2592. Что решает обе основные проблемы cc2531, в лице дальности и количества устройств соединенных с шлюзом.

Но, к сожалению, нет предела совершенству и у V3 стика тоже есть свои минусы. Например то, что необходимо устройство держать рядом с вашим центром умного дома (малина, NAS, компьютер/сервер). Устройство является лишь аппаратным радиомодулем и вся логика, ровно, как и набор устройств, реализованы в программном решении zigbee2mqtt (и аналогичных).

Для решения этих и некоторых других проблем и появился SLS шлюз.

SLS шлюз. Характеристики

Шлюз построен так же, на наборе чипов TI CC2538 с усилителем CC2592 (однако есть интенции поддержки других Zigbee микромодулей). На борту у него помимо zigbee части есть чип ESP32 с 2.4ГГц wifi и Bluetooth (но пока не используется в прошивке, будет поддерживать BLE). Существует несколько типов исполнения печатных плат. На мой взгляд вариант с адаптированной для Xiaomi шлюзов платой является наиболее удачным и по-настоящему пользовательским. Лаконичный внешний вид, использование светодиодной ленты самого шлюза, помимо собственно блока питания, превращают решение использовать SLS в теле Xiaomi шлюза самым лучшим.

Источник

Оцените статью