[Из песочницы] Собираем DIY шлюз для Zigbee устройств
Вступление
Пока крупные производители конечных устройств Zigbee в борьбе за кошельки пользователей имитируют поддержку оборудования сторонних производителей, группы энтузиастов изучают стандарты протоколов и изобретают "альтернативные" всеядные программные и аппаратные решения для работы с устройствами Zigbee.
Наибольший толчок развития DIY шлюзам дал проект zigbee2mqtt. На момент написания заметки в проекте реализована поддержка 785 устройства от 140 производителей.
Поиск показал наличие интересных конкурентных проектов AqaraHub(написан на с, похоже, что развитие приостановлено, последний коммит был 5 месяцев назад), нативная поддержка в ioBroker (проект ведет наш соотечественник Киров Илья), нативная поддержка в Home-assistant (поддержка появилась после появления библиотеки zigpy, активно развивается, но пока далека от совершенства). Обзор программных шлюзов хорошо разобран в интернете, имеется множество статей, желающий найдет информацию по тэгам в конце статьи.
После того, как zigbee2mqtt набрал достаточную популярность, пользователи ощутили и недостатки "программных" шлюзов. Среди наиболее заметных можно выделить следующие:
- необходимость использования отдельного сервера или одноплатного компьютера raspberry или аналога;
- на одноплатном компьютере для работы USB устройств нужен хороший блок питания, необходимо предусмотреть охлаждение одноплатного компьютера, также требуется карта памяти хорошего качества с достаточным свободным местом. При использовании одного мини-компьютера для "программного" шлюза и системы управления умным домом, необходимо следить за наличием свободного места на карте памяти, которое может внезапно заполниться логами или другими файлами;
- загрузка и поддержка актуальности версий интерпретатора и библиотек Node.JS. Обновление версий zigbee2mqtt производится из консоли, при обновлении есть необходимость в создании резервной копии конфигурации и последующего обновления;
- отсутствие визуального интерфейса из коробки.
Все указанные недостатки были отмечены группой энтузиастов, которые постарались на базе доступных для заказа на Aliexpress комплектующих разработать альтернативный DIY Zigbee шлюз. Использование аппаратного шлюза должно уменьшить количество сбоев, связанных с работой операционной системы и сделать более надежное решение, которое можно использовать из коробки. Для поддержки оборудования была написана прошивка SLS Zigbee Gateway, которая распространятся бесплатно. В настоящее время полноценно поддерживается работа более 100 видов устройств, список постоянно расширяется.
Ведется работа по наполнению и актуализации руководства по использованию шлюза. Уже сейчас реализована возможность использования сценариев на языке lua (доступны функции работы с сервером MQTT, вызов url методом POST или GET, изменение состояний устройств в зависимости от состояний устройств). Для интеграции с системами умного дома доступен поддерживаемыми почти всеми системами протокол MQTT. Для ускорения интеграции устройств шлюза в системы умного дома, структура топиков полностью соответствует структуре zigbee2mqtt.
Для интеграции с MajorDoMo разработано дополнение. Интеграция с Home-assistant описана в инструкции. В скором времени будет реализован механизм discovery для home-assistant. Также доступен вариант управления устройствами шлюза через HTTP API. В среднесрочной перспективе будет реализована работа с оборудованием BLE.
Стоит отметить, что имеются альтернативные прошивки и решения, имеющие в основе похожее причины для создания DIY шлюза. Ведется аналогичный проект на том же оборудовании по названием ZESP. К сожалению, обновления проекта Zesp для ESP32 свободно не распространяются, поэтому оценить текущую функциональность не представляется возможным.
Также команда авторов прошивки Tasmota запустила проект реализации подобного шлюза на базе микроконтроллера ESP8266 и трансивера сс2530.
Самостоятельная сборка шлюза
В качестве аппаратной начинки шлюза используется современный микроконтроллер ESP32-WROVER-B от Espressif, который согласно даташиту с сайта производителя может одновременно работать с WiFi и BLE, имеет достаточный для работы шлюза объем оперативной памяти и хорошую производительность. Еще одной полезной особенностью данного чипа является доступность написания кода в Arduino IDE или PlatformIO, а также его цена.
Работоспособность протокола Zigbee обеспечивает трансивер от Texas Instruments сс2538 с усилителем сс2592. Пользователем @Jager_f было проведено тестирование дальности связи беспроводной кнопки от компании Xiaomi, которое показа показало до 800 метров уверенного приема на открытой местности.
Главным преимуществом трансивера является многофункциональность. Он может работать как через встроенную эмуляцию USB, так и через UART. Для использования UART была написана прошивка.
Более подробно информация по перепрошивке разобрана в статье Прошиваем СС2538 с помощью J-Link на сайте modkam.ru.
Также существуют готовые модификации плат для Raspberry через UART.
Схема подключения ESP32 и сс2538 сс2592 указана на рисунке:
Готовые герберы и файлы для заказа плат можно взять на сайте modkam.ru
Имеется "альтернативный" (прямоугольный) вариант платы от @vofkindt
Также SLS Zigbee шлюз можно собрать на базе ESP32 и устаревшего модуля сс2530. Производительность старого чипа от TI сильно отстает от сс2538, поэтому рекомендуется их использовать только для ознакомления. Более подробная информация представлена в начале обсуждения темы по ссылке.
Готовые шлюзы, собранные энтузиастами, можно приобрести в группе в telegram
Начало работы
После прошивки zigbee модуля и ESP32, при включении шлюза создается точка доступа zgwABCD, где ABCD — последние символы MAC-адреса ESP32. Далее необходимо с помощью телефона подключиться к новой точке доступа и ввести реквизиты вашей сети Wi-Fi.
После того, как шлюз подключился к сети, в настройках вашего маршрутизатора можно уточнить его ip адрес. Интерфейс управления может быть доступен на 80 порту по адресу, который выдал маршрутизатор, например http://192.168.1.93.
После того, как вы подключитесь к шлюзу SLS Zigbee Gateway, вам необходимо зайти на страницу настроек GPIO микроконтроллера (из меню основной страницы Settings -> HW Setup) и выставить настройки портов GPIO. Ниже приведены настройки для круглой платы:
Если шлюз собран и прошит правильно, то на главной странице в разделе Zigbee вы должны увидеть Zigbee DeviceState: 9 [OK]
Сопряжение устройств
Добавление устройств zigbee осуществляется при включении режима сопряжения. Его можно осуществлять через меню Zigbee -> Join, либо командами mqtt или http (информацию можете найти в документации). Новые сопряженные устройства будут появляться нарастающим итогом, пока включен режим сопряжения.
Список всех сопряженных устройств можно открыть через меню Zigbee -> Devices
Можно посмотреть карту сети Zigbee -> Map
Интеграция с системами умного дома
Интеграция с системами умного дома доступна по mqtt или http. Структура топиков mqtt соответствует описанию zigbee2mqtt. Настроить адрес вашего mqtt брокера можно на странице Settings -> Link Setup -> MQTT SETUP
Дальнейшие шаги по интеграции с системами умного дома описаны в соответствующих инструкциях (Majordomo, home-assistant)
Настройка автоматизаций
В шлюзе SLS Zigbee Gateway доступны следующие виды автоматизаций:
- SimpleBind
- Скрипты Lua
- Binding средствами протокола Zigbee
Примеры использования
Оборудование самого популярного в СНГ китайского брэнда Xiaomi поддерживается шлюзом почти в полном объеме. К сожалению почти все оборудование этого брэнда (за исключением оборудования новой серии на zigbee 3) не поддерживает Binding согласно стандарта, т.е. не может работать автономно, без координатора. Как раз для таких случаев был создан вариант автоматизации на шлюзе SLS — SimpleBind. Он позволяет настроить автоматизацию внутри одной сети Zigbee, где решение об изменении состояния будет принимать шлюз SLS на основе простейших инструкций.
Ниже на скрине указан пример правила управления устройством (реле KS-SM001 от Ksentry Electronics) в зависимости от нажатия правой кнопки двухкнопочного пульта WXKG02LM от Xiaomi.
Датчики движения, дыма, открытия двери и другие можно настроить аналогичным образом. Более подробные сведения об использовании функции SimpleBind можно прочесть в описании функционала.
Оборудование компании Ikea, Philips, Nue, Gledopto, Trust и др. производителей имеют прошивки с поддержкой необходимых кластеров. Это позволяет настроить прямые автоматизации. Например круглый магнитный пульт IKEA ICTC-G-1 может самостоятельно без использования шлюза управлять почти всеми видами доступных ламп zigbee. Такая автоматизация на основе прописанных в прошивке устройств кластеров называется Binding. Обычно шлюз (координатор) настраивает связи устройств, далее устройства общаются между собой без использования координатора. Описание методов настройки связей устройств указаны в руководстве. С помощью Binding удалось настроить управление всеми лампами Ikea, Trust, Philips и даже лампочку Aqara ZNLDP12LM. Ниже на скрине пример привязки круглого пульта-диммера икея (беспроводной реостат) к имеющимся лампочкам zigbee.
После нажатия Bind каждая из ламп может менять яркость при вращении пульта-реостата.
Дальнейшие перспективы
- разработка облачного личного кабинета, где можно будет управлять своими устройствами;
- интеграция шлюза с голосовыми ассистентами Google Home, Яндекс Алиса и др.;
- реализация возможности считывания информации устройств BLE средствами ESP32;
- разработка шлюза для проводных интерфейсов с поддержкой протоколов MODBUS, DALI, DMX, DI-DO, 1-wire, I2C, счетчиком импульсов;
- разработка второй версии шлюза для Zigbee с поддержкой Ethernet и ИК портов;
- добавление поддержки групп.
Руководство по использованию шлюза
Группа в Telegram
Канал новостей в Telegram
Список поддерживаемых устройств
Обзор от Alex Kvazis
Где купить
Обсуждение на форуме Majordomo