- SLS gateway. Или сказ о том как из китайского сделать шлюз здорового человека.
- SLS шлюз. Характеристики
- Bluetooth шлюзы Xiaomi
- Bluetooth протокол
- 1. Камера видеонаблюдения Mijia Smart Home Camera
- Как я данные с BLE-градусника от Xiaomi забирал
- Первый подход к снаряду
- Как же всё-таки получить данные?
- Подписка на уведомления
- Отделяем зёрна от плевел
- Разбор данных
- На пути к успеху
- Эпилог
- Обновленный Xiaomi Gateway 3 ZNDMWG03LM с Bluetooth и Zigbee 3.0: обзор и возможности
- Содержание
- Где купить ?
- Параметры
- Поставка
- Внешний вид
- Mihome
- Настройка
- Zigbee
- Видео версия
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 шлюза самым лучшим.
Источник
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 забирал
Предыстория: в качестве одного из хобби у меня случился «Умный дом». Хочется красивых устройств, но при этом ещё хочется свободы и приватности. Поэтому занимаюсь скрещиванием ужика Xiaomi с ёжиком Home Assistant.
Для поддержания комфортных условий нам нужно знать, а что вообще у нас дома происходит. Короче говоря, нужны сенсоры. Их у Xiaomi есть много разных, но больше всего мне понравился квадратный градусник на электронных чернилах. Вот только он совсем не умный, в том смысле, что не предоставляет вообще никаких интерфейсов, кроме графического – ни тебе WiFi, ни BLE, ни ZigBee. Зато батарейки CR2032 хватает на несколько лет. Есть ещё версия с блютусом, но она чуть менее изящная – эдакий толстый блинчик.
И вот в начале весны был анонсирован новый датчик температуры/влажности, на электронных чернилах, с BLE, да ещё и с часами. Часы мне не особенно-то и нужны, а вот всё остальное немедленно подавило все рациональные доводы и градусник был заказан на одном из популярных интернет-магазинов, по предзаказу. Ехало оно ехало, и наконец приехало.
В приложение MiHome датчик добавился без проблем (у меня англоязычный интерфейс везде, с русской версией MiHome, говорят, были трудности перевода). Показывает текущие значения и историю изменения показаний.
А вот с интеграцией в Home Assistant приключились сложности. Имеющийся компонент для датчика температуры ни в какую не хотел забирать данные с устройства и жаловался на неверный формат данных. Ну, делать нечего, достаём лопату и начинаем копать.
Первой мыслью было ознакомиться с устройством протокола BLE, но оценив размер документации, было принято решение переходить к методу народного тыка.
Первый подход к снаряду
Для начала, открываем терминал на убунте и запускаем bluetoothctl. Видим следующее:
MJ_HT_V1 – это старый датчик температуры, LYWSD02 – новый. Разница в формате именования модели несколько настораживает.
Дальше надо как-то почитать, а какие данные вообще у нас могут быть получены. Открыл исходники библиотеки mitemp, которая используется в Home Assistant для получения данных со старого датчика. Там нашёл, что используется библиотека blewrap, которая, в свою очередь, является обёрткой над двумя питоновскими библиотеками для работы с BLE. Столько много слоёв мне ни к чему, будем использовать bluepy. Документация есть, её не много и не мало, читаем и пишем скрипт, который проходит по всем полям данных, которые есть на устройстве.
В целом, всё просто – BLE-устройство предоставляет набор сервисов, каждый из которых состоит из набора характеристик. Каждая характеристика может быть одного из 8 типов, для одной характеристики можно указать несколько типов одновременно. Сервисы и характеристики идентифицируются двумя способами – адресом в виде HEX-значения и UUID. С UUID мне работать как-то привычнее.
Итак я считал все характеристики для обоих датчиков, посмотрел на них и понял, что снова под маркой Xiaomi продаются устройства от совершенно разных производителей. Среди значений старого датчика было найдено «Cleargrass Inc», а в новом – «miaomiaoce.com». Структура сервисов и характеристик у этих двух датчиков также абсолютно разные, да и список характеристик у нового датчика длиннее в два раза. Тут стало понятно, что нужно писать свою собственную библиотеку для интеграции с датчиком (нет, я конечно сначала погуглил, может есть чего полезного по запросу LYWSD02, но ничего толкового гугл не выдал).
Как же всё-таки получить данные?
Среди имеющихся типов характеристик, кроме READ, есть ещё WRITE и NOTIFY. WRITE – для отправки данных на устройство, а NOTIFY – для получения данных. Есть ещё одновременно WRITE NOTIFY – устройство будет отправлять данные только после того, как на них подпишутся, отправив нужный байт командой WRITE.
Попытки сделать что-то руками не принесли никакого результата, был достигнут первый рубеж отчаяния, но в этот момент я обчитался статей про поделки на базе чипов от Nordic Semiconductors и поставил на смартфон программу nRF Connect. С её помощью я смог подписаться на все сервисы, которые предоставляло устройство, сохранил логи ответов и стал пытаться понять, что в них лежит.
Вот эти тройные стрелки активируют подписку.
Особенностью старого датчика было то, что данные о температуре и влажности приходили в виде UTF-строки, новый же всё отдавал в бинарном виде.
Подписка на уведомления
Чтобы получать данные с датчика, нужно отправить запрос на подписку. В библиотеке mitemp для этого отправлялись два байта на характеристику, но непонятно, откуда брать её Тут я посмотрел на то, как выглядит структура данных для старого датчика в nRF Connect и заметил, что нужный адрес указан для характеристики с данными, как некий дескриптор. Тогда я снова стал читать документацию к bluepy и понял, что адрес дескриптора легко можно получить из объекта характеристики. Осталось только написать класс с методом-колбеком, в который будут поступать данные из уведомления.
Отделяем зёрна от плевел
К счастью, только три характеристики были помечены как WRITE NOTIFY, при этом данные приходили с различной частотой и, эм. визуальными особенностями.
Первый запрос присылал сразу большую портянку данных, а потом залипал. При этом первый байт представлял собой монотонно возрастающее число. Похоже, что это накопленная история средних значений.
Второй и третий присылались периодически, но приглядевшись, я увидел, что один из них не меняется, а в данных второго меняется только один байт. Ну, значит, это текущее время (напомню, в этом градуснике есть часы. В любом уважающем себя устройстве для умного дома должны быть часы).
Предположим, то третья характеристика – это полезные данные о температуре и влажности. Для подтверждения гипотезы был проведён физический эксперимент – подошёл к датчику и грубо надышал на него. На дисплее резко увеличились значения данных, а в терминале – поменялись байтики. Ура, данные где-то рядом.
Разбор данных
Я обычно работаю с текстовыми данными (получи данные по HTTP в виде JSON/xml, положи их в файл или в базу), поэтому не очень понимал, как подступиться к задаче. Поэтому начал пытаться трансформировать данные разными способами, которые можно сделать из питона. Написал вот такую функцию-конвертилку и стал смотреть, как это соотносится с данными на экране датчика.
В консоль посыпались строчки разной степени непонятности, однако третий байт всегда был числом, и это число совпадало со значением влажности. Для верности я ещё раз подышал на датчик – и значения влажности на экране и в третьем байте изменились одинаково!
Тут я предположил, что в первых двух байтах хранится температура. Для того, чтобы данные менялись – перенёс датчик на полотенцесушитель в ванной. Но, сколько я ни пытался трансформировать результаты – нужных чисел не получалось.
На пути к успеху
В этот момент я ещё раз посмотрел на описание датчика и увидел, что внутри стоит датчик от Swiss Sensirion. Наверно, стоило с этого начинать, но это же не наш метод. На сайте Swiss Sensirion была найдена пачка датчиков, и даташиты к ним. В даташите, кроме всего прочего была найдена формула для конвертации байт, передаваемых по шине I2C в число.
Но… Получались очень странные значения. Что-то типа -34.66, а у меня было явно теплее. От грусти и печали я даже вскрыл датчик и проверил, а правда ли там сенсор от Swiss Sensirion. Выяснилось, что правда, но с индексом SHTC3, и для него нужна чуть-чуть другая формула.
Однако, всё равно данные после преобразования даже близко не были похожи на реальные. Тут я ещё больше загрустил, открыл исходники библиотеки для SHTC3 от Adafruit и стал пытаться адаптировать код трансформации из C++ в питон. Вывел всё в табличку – сырые данные, преобразованную сишную структуру и результат.
Получил что-то такое:
Да… как-то холодно… Но, стоп, подождите, а что это за 2604? Это же оно, 26.0 градусов на экране! Для подтверждения гипотезы снова унёс датчик на батарею, проверил – значения совпадают.
В итоге, получаем такой код преобразования данных:
Эпилог
На операции по подключению к датчику и поиски правильного алгоритма трансформации ушла пара вечеров. Несколько раз хотелось всё бросить, но одновременно с этим приходили новые идеи и я продолжал попытки.
Сейчас данные передаются в Home Assistant, дальше нужно допилить код интеграции и, возможно, переписать её с bluepy на bleak, поскольку bleak использует async/await и лучше подойдёт для Home Assistant, написанного aiohttp.
Источник
Обновленный Xiaomi Gateway 3 ZNDMWG03LM с Bluetooth и Zigbee 3.0: обзор и возможности
В этом обзоре я расскажу про обновление в системе умного дома Xiaomi — Zigbee шлюз третьей версии. Посмотрим на него и на его возможности в приложении. Забегая вперед скажу — что для тех кто выбрал путь альтернативных систем управления, покупка этого гаджета не имеет никакого смысла, он интересен только тем, кому достаточно штатных возможностей mihome.
Содержание
Где купить ?
- Gearbest — цена на момент написания обзора $ 26,99
- Banggood — цена на момент написания обзора $ 26,99
- Aliexpress — цена на момент написания обзора $ 22,88
- Румиком — цена на момент написания обзора 2690 руб
Параметры
- Модель: ZNDMWG03LM
- Интерфейсы: Wi-Fi 2,4 Ггц, Zigbee 3.0 и Bluetooth Mesh 5.0
- Питание — micro USB
- Заявленная дальность действия — 200 метров
- Диапазон рабочих температур -5 +50 С, влажность 0-95%
- Размер — 90 x 25 мм
Поставка
Поставляется новинка в классической для экосистемы белой коробке, на которой изображен сам шлюз и указана совместимость с экосистемой mijia и apple homekit
Перейдем к содержимому — упаковано все плотно, внутри коробки имеется дополнительный защитный слой.
В комплект, кроме шлюза, идет кабель питания USB — micro USB и блок питания с плоской американской вилкой. Он рассчитан на максимальную мощность 5 Ватт, но можно использовать любой источник питания с USB портом, что значительно удобнее чем во второй версии шлюза
Внешний вид
Шлюз имеет круглую форму, корпус сделан из матового пластика, на передней панели — универсальная кнопка. LED подсветку в третьей версии убрали, как и радио
На противоположной стороне — находится стандартный micro USB разъем питания, так что подключать можно даже к powerbank
На нижней части — по кругу, резиновая противоскользящая насадка, тут же указана модель устройства и интерфейсы — wi-fi, zigbee, bluetooth
Сравнительно с вторым шлюзом — диаметр новинки немного больше, ввиду отсутствия радио — верхняя крышка монолитная
Мое мнение, что питание micro USB на новом шлюзе организовано удобнее, — для старого нужна отдельная розетка, переходник, да и еще он частенько перекрывал соседние розетки.
Толщина второй версии больше, но у нее по окружности расположен светодиодный ночник
Подключим шлюз к источнику питания и посмотрим что же он умеет
Mihome
Процесс подключения стандартный и привычный. После включения — гаджет активирует свою вай фай сеть, приложение видит ее и по названию определяет тип устройства. Запускается мастер подключения, в котором указываем параметры своей сети и ждем
После того как устройство подключится к сети — проходим три финальных шага, выбор локации, имени устройства и при необходимости доступ для других аккаунтов.
Теперь новое устройство появилось в общем списке устройств. Плагин — своеобразный, на предшественника не похож. Большую часть окна занимает что-то вроде радара, ниже идут опции настроек сигнализации, лог срабатываний и меню добавления zigbee устройств.
В отличии от второй версии, новинка поддерживает 4 режима сигнализации — Basic — это круглосуточный неотключаемый режим, он предназначен для датчиков утечки воды, дыма, газа. Остальные режимы — индивидуально настраиваемые — режим Дома, Вне дома
И режим — сон, имеется в виду ночной режим работы. Журнал сработки будет содержать список событий сигнализации, и меню добавления zigbee датчиков — позволит добавлять все датчики mijia и aqara
Перечень поддерживаемых устройств занимает три экрана, — у меня установлен регион Китай. Не хватает только специальных версий предназначенных для европейского рынка, например розетки с Schuko разъемом
Настройка
Рассмотрим меню основных настроек. На момент создания обзора актуальная версия прошивки имела номер 1.4.5_0005
Как я уже сказал каждый из четырех режимов сигнализации имеет собственные настройки, у режима Basic — их две, громкость сигнала, от самой громкой до бесшумной.
Вторая настройка — это длительность сигнала, постоянный или на протяжении заданного интервала времени. В трех остальных режимах имеется дополнительная настройка — это задержка до включения сигнализации.
В режиме Bluetooth шлюза — никаких настроек делать не надо, он сам подтягивает устройства в радиусе действия, так-же заявлена поддержка mesh — например для светильников Yeelight. В автоматизациях шлюз имеет один вариант условия — тревога, и 6 вариантов действий — включение выключение режимов сигнализации кроме Basic
Zigbee
Все режимы сигнализации могут работать только с напрямую подключенными к шлюзу датчиками. Добавлять zigbee устройства можно двумя методами — через приложение, нажав на + в меню добавления устройств и следуя указаниям мастера подключения
Или напрямую, нажав трижды на кнопку шлюза тем самым переведя его в режим сопряжения, после чего перевести в этот режим подключаемый датчик. см в видео версии обзора
Добавленный датчик — на примере кнопка, появится во всех режимах сигнализации и может быть выбрана для одного из них в качестве устройства — триггера. Изменение статуса датчика будет условием для сработки сигнализации
Проверить связь с шлюзом можно коротким нажатием на кнопку сопряжения датчика, шлюз пискнет подтверждая наличие соединения — см в видео версии обзора
При наличии подключенного датчика — режим сигнализации может быть включен и сработает если датчик изменит свой статус. Это отобразится в виде пуш уведомления на смартфоне и останется в журнале тревог
Работа сигнализации показана в видео версии.
Отключение писка сигнализации — однократным нажатием на кнопку шлюза.
Отключение режима постановки на охрану — двойное нажатие на кнопку шлюза.
Включение задержки включения — работает только при постановке, при срабатывании — никакой паузы нет.
Кроме этого режим сигнализации можно применить в сценариях — например включив более громкий и страшный звук полицейской сирены на втором шлюзе, если он есть в системе. А включение и отключение режима сигнализации — по разным видам нажатия на беспроводную кнопку, которую можно установить в удобном но скрытном месте.
Видео версия
Итак, в первом приближении мы выяснили основные отличия от предыдущей версии:
Физически это более удобное питание через micro USB, но при этом отсутствие радио, и ночника.
Программно — это намного больший список поддерживаемых устройств, целых четыре варианта сигнализаций, что весьма удобно и это плюс, но все перечеркивает жирный минус — отсутствие режима разработчика. Шлюз может работать только в mihome, правда существует возможность пробросить в Apple Home Kit. К покупке рассмотреть можно только пользователям, которым достаточно этого, штатного функционала.
Источник