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 шлюза самым лучшим.

Читайте также:  Защита днища лодок пвх своими руками

Источник

Добавляем ZigBee устройства в Homebridge используя CC2531

На Хабре уже встречались статьи о том, как подружить ZigBee устройства различных производителей с системами управления умным домом, без использования фирменных хабов, вроде Xiaomi Gateway. Однако, инструкции для homebridge, я не нашел не только на Хабре, но и на других просторах интернета. Поэтому хочу поделиться опытом добавления ZigBee устройств в homebridge. Огромную благодарность надо выразить создателю ресурса zigbee2mqtt.io, там уже расписаны способы прошивки модема CC2531 и подключения к таким системам управления умным домом как Home Assistant, Domoticz и Majordomo. Статья рассчитана на пользователей, у которых уже установлен и настроен homebridge.

Все действия в статье будут проводиться со следующим набором оборудования:

  • Raspberry Pi 3 B+ (OS Raspbian)
  • CC2531 Dongle (Прошитый)
  • Устройства Xiaomi (wireless switch, temperature & humidity sensor. )
  • MacBook Pro (OSX 10.14)

Инструкции по прошивке CC2531 на русском языке есть тут (через Pi) и тут (через CCDebuger).

Схематично всю цепочку работы можно изобразить так:

Теперь по порядку.

После прошивки модема необходимо установить MQTT брокер (если еще не установлен).

Я использую Mosquitto, устанавливается так:

Более подробную инструкцию по настройке можно посмотреть тут.

Теперь необходимо установить сервис zigbee2mqtt, который взаимодействует с модемом CC2531 и передает данные в Mosquitto:

Для того чтобы запускать zigbee2mqtt как сервис, необходимо создать файл:
/etc/systemd/system/zigbee2mqtt.service

Если у вас уже был установлен MQTT брокер то прописать правильные параметры подключения к нему нужно в файле:

Запускаем сервис и добавляем его в автозапуск:

Можно приступать к интеграции с homebridge. На ресурсе zigbee2mqtt.io есть список поддерживаемых устройств и инструкции по созданию пары. Для примера рассмотрим добавление Xiaomi Wireless Switch.

Для просмотра событий в Mosquitto воспользуемся программой MQTT Explorer. Запускаем, вводим адрес MQTT сервера, в моем случае он расположен по адресу 192.168.1.104 . Если все установлено правильно, то в дереве увидим ветку zigbee2mqtt. Переходим в нее. Теперь на Xiaomi Wireless Switch зажимаем кнопку Reset до появления мигания диода (около 5 секунд). Примерно через 10 секунд в ветке zigbee2mqtt мы увидим наше устройство и данные которое оно передает.

Если этого не происходит, то после появления мигания диода, попробуйте однократно нажимать Reset с периодичностью в секунду. Должно получиться так:

Поле Click содержит тип нажатия, их может быть пять:
Click, double click, triple click, long, long_release

Данные получать научились, теперь добавим Xiaomi Wireless Switch в homebrdige. Для взаимодействия с MQTT воспользуемся модулем homebridge-mqttthing. Устанавливается так же, как и другие:

Модуль поддерживает большое количество классов устройств начиная с выключателей и заканчивая термостатами. Для Xiaomi Wireless Switch больше всего подходит класс StatelessProgramableSwitch . Для добавления нужно знать Topic (0x00158d00022c85ea) и названия команд. Получается вот такой конфиг:

По аналогии я добавил:

Раньше я использовал модуль homebridge-mi-aqara, который добавляет ZigBee устройства, взаимодействуя с Xiaomi Gateway. При отказе от Gateway уменьшилось время отклика устройств, вдобавок я избавился от устройства которое сидит на моем WiFi и постоянно лезет в интернет.

Дополнение 07.11.2020 спасибо за комментарий @dalamber_sign, если у кого то есть подобные проблемы, возможно поможет:

Столкнулся с проблемой что периодически отваливается xiaomi розетка и не ищутся новые устройства.CC2531 у меня работает в Raspberry Pi 4 и как оказалось проблема была в том, что CC2531 включен прямо в USB порт, без usb-удлинителя. Официальный FAQ так и пишет «There can be too much interference, try connecting the coordinator USB through an USB extension cable. This problem occurs a lot when used in combination with a Raspberry Pi 4.», а казалось что слишком глупо чтобы быть правдой.

Источник

Читайте также:  Замена опорного подшипника джетта 6 своими руками

Подключить все! Делаем экстремально дешевый хаб для устройств ZigBee и Z-Wave

Содержание статьи

Поводом для того, чтобы смешать дома умные устройства разных производителей, может быть желание сэкономить, выбирая наиболее выгодные варианты, или наоборот — стремление взять все самое лучшее. Но чаще всего ответ более прозаичный: «так вышло». Сначала ты покупаешь лампочки и датчики движения Philips, а потом обнаруживаешь, что, к примеру, умных розеток эта компания не делает вовсе, а тебе позарез нужна одна из них.

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

В этой статье я покажу, как сконструировать универсальный хаб на основе Raspberry Pi Zero W и экстремально дешевого контроллера. А поможет мне в этом программа под названием zigbee-shepherd. Она поддерживает множество устройств ZigBee, в том числе и выключатели Xiaomi на батарейках серии Aqara, и позволяет писать скрипты на JavaScript.

Выбираем и прошиваем железо

Сначала нужно определиться, на каком железе собирать хаб. В принципе, ты можешь взять что угодно (хоть свой основной компьютер, если ты его не выключаешь), но Raspberry Pi Zero W — это сверхкомпактный, дешевый и достаточно производительный вариант.

Микрокомпьютер Raspberry Pi Zero W

Xakep #235. Возрождение эксплоит-китов

Zigbee-shepherd совместим с чипами ZigBee производства Texas Instrument CC2530 и CC2531. У TI есть референсный USB-стик CC2531 USB Evaluation Module Kit за 49 долларов, но есть и полная документация и схемы по сборке такого стика, поэтому будет несложно найти в Поднебесной такой же стик, но за 7 долларов.

Фирменный стик Texas Instrument на чипе CC2531

Для работы стика с zigbee-shepherd потребуется файл прошивки с GitHub, а чтобы ее зашить, понадобится программатор CC Debugger за 49 долларов или его китайская копия за 12.

Texas Instrument CC Debugger

Прошивают USB-стик с помощью официальной утилиты TI SmartRF Flash Programmer. Чтобы все заработало, нужно подключить CC Debugger в один порт компьютера, стик ZigBee — в другой и шлейфом соединить их между собой.

Подключение CC Debugger к стику ZigBee для прошивки

В настройках программатора выбираем прошиваемое устройство (1), прошивку (2), задаем нужные действия (3) и прошиваем (4).

SmartRF Flash Programmer для прошивки стика ZigBee

Проверить, что USB-стик удачно прошился и работает, можно, подключив его к Raspberry Pi Zero W и выполнив команду

Устройство будет отображаться в системе как ttyACM0.

При подключении стика появляется устройство ttyACM0

Ставим сервер zigbee-shepherd на Raspberry Pi Zero W

Установка zigbee-shepherd и сопутствующих пакетов будет проводиться на последней версии ОС Raspbian для Raspberry Pi Zero W — Stretch.

Zigbee-shepherd написан на JavaScript и работает на Node.js. Для начала ставим Node.js:

Для установки расширений из npm нужно установить утилиты для сборки:

И сама установка zigbee-shepherd:

Проверить, правильно ли работает zigbee-shepherd, можно, запустив скрипт zigbee-server.js . Во время работы скрипт выводит информацию о каждом этапе добавления устройства и время выполнения операции.

Запускаем zigbee-shepherd в режиме отладки:

Debug-вывод при добавлении устройства ZigBee

На этапе разработки скрипта для Node.js всегда используй отладочный режим. Вывод при этом более подробный, легче отловить ошибки, а zigbee-shepherd показывает все данные, которые он отправляет и получает.

Работаем с выключателями Xiaomi из zigbee-shepherd

Первым делом следует добавить устройство ZigBee в сеть. Для этого сначала нужно сбросить его настройки на заводские и тем самым удалить информацию о предыдущей сети, если оно было добавлено прежде. Комбинация сброса и добавления устройства для выключателей Xiaomi Aqara следующая: зажать кнопку на пять секунд, пока светодиоды не начнут мигать, после чего отпустить и ждать, когда закончится процесс добавления. Если включен дебаг, то при добавлении устройства выводится подробный лог. Добавление устройства может занять до одной минуты.

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

После добавления устройства важно еще правильно с ним работать. Zigbee-shepherd не предоставляет веб-интерфейса для добавления устройств и управления ими, вместо этого мощный JS API позволяет получить полный контроль над любым устройством и написать собственную систему автоматизации.

В вики есть полное описание всех функций. Но чтобы быстрее разобраться с ними, нужно понимать программную структуру устройства.

IEEE address. Каждое устройство ZigBee имеет уникальный 48-битный MAC-адрес, он зашит в девайс, и сбросить его невозможно. По MAC-адресу можно обращаться к устройству и получать информацию о нем.

Endpoint. В устройстве может быть несколько функций, например датчик температуры и влажности или выключатель с двумя кнопками. Для каждой функции устройства создается отдельный Endpoint.

Clusters. Группа команд, которые можно отправлять устройству. Например, команда genOnOff включает или выключает устройство, а если это лампа с диммером, то команда genLevelCtrl позволит задать уровень яркости.

Attributes. У устройства можно запросить его текущее состояние, обратившись в интересующий Cluster. Например, командой genOnOff можно узнать состояние атрибута onOff — оно может быть 0 или 1.

Выключатель Xiaomi Aqara с одной кнопкой имеет следующую структуру:

Чтобы обрабатывать нажатие кнопки, нужно отловить сообщение от выключателя. Делается это с помощью события ind . Изменим код следующим образом:

При нажатии кнопки придет сообщение:

  • msg.endpoints[0].device.ieeeAddr — MAC-адрес устройства;
  • msg.endpoints[0].epId — канал (endpoint) устройства;
  • msg.data — ID кластера и атрибут, в данном случае выключатель прислал команду genOnOff:0 .

Если проверять эти данные, то, нажимая на кнопку выключателя, можно будет управлять другими устройствами ZigBee по определенному алгоритму. Например, при каждом нажатии включать-выключать или только выключать группу устройств.

Zigbee-shepherd полностью поддерживает работу с диммируемыми лампами Ikea Trådfri и Philips Hue, поэтому для примера можно настроить простой алгоритм включения лампы с помощью выключателя Xiaomi Aqara. Добавляем в код обработчик нажатия кнопки и включение лампы Ikea Trådfri на максимальную яркость:

Увязываем наше решение с другими

Zigbee-shepherd использует инфраструктуру Node.js, поэтому можно реализовать управление любыми объектами, для которых есть соответствующие библиотеки. Например, протокол MQTT дает возможность интеграции со многими системами домашней автоматизации, такими как OpenHub и Home Assistant. Для последней существует готовый проект на GitHub.

Многие хабы и самостоятельные устройства Wi-Fi вроде розеток поддерживают управление через запросы HTTP. Команды можно узнать из документации, либо подглядеть в веб-интерфейсе хаба умного дома, либо проанализировать трафик от мобильного приложения.

Z-Wave-контроллер RaZberry имеет хорошо документированный HTTP API, поэтому не составит труда написать запрос на выключение света. Для отправки HTTP-запросов требуется установить библиотеку request:

Добавляем в код поддержку HTTP-запросов и сам запрос на выключение света:

Минимальная домашняя автоматизации готова! В 26 строках кода запускается сервер ZigBee, отслеживается нажатие кнопки и исполняется команда управления светодиодной лампой или команда HTTP. Если подключить фреймворк веб-приложений для Node.js (например, express), то можно реализовать полноценный HTTP API для работы с устройствами ZigBee.

Zigbee-shepherd позволяет добавить к уже существующей домашней автоматизации на KNX, Z-Wave или Wi-Fi недорогие устройства ZigBee, которых с каждым годом выпускается все больше.

Источник

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