Драйвер zigbee устройств в ioBroker

Работа экосистемы умного дома Xiaomi Smart Home построена таким образом, что все данные об управлении устройствами передаются не напрямую, а через китайские сервера. Кроме того, крайне неудобно, что добавление новых девайсов и последующая их настройка осуществляется только через родное приложение MiHome.

Теория

В ioBroker эта проблема решаема. Есть в интернете библиотека zigbee-shepherd на node.js, в которой упоминается о подключении устройств Xiaomi. На её базе был написан драйвер для ioBroker, причем автор этого драйвера не ограничился только устройствами Xiaomi, список поддерживаемых устройств постоянно дополняется и доступен на github странице проекта.

В качестве координатора сети предполагается использовать недорогие готовые устройства на базе чипов CC25хх от TI. Можно купить готовые ZigBee-модули как с подключением по USB и встроенной антенной, так и модели подороже-посерьезнее: с внешней антенной, усилителем, подключением через UART.

Для работы с драйвером, надо только сменить прошивку. Таким образом получается, что для работы этого драйвера не нужен дорогостоящий шлюз, не нужны сети Wi-Fi. «Точкой входа» является координатор — устройство на базе чипа СС25хх со специальной прошивкой. Через координатор происходит непосредственное общение zigbee-устройств и системы «Умный дом», а также привязка новых устройств.

Установка

В качестве координатора будем использовать готовую плату на базе чипа СС2530 с внешней антенной, которую подключим к серверу через UART.

Для прошивки устройства нужен специальный дебагер. Например, SmartRF04EB, порт microUSB которого подключим к компьютеру, а модуль ZigBee необходимо подключить с помощью проводков для отладки по схеме:

СС2530Плата SmartRF04EB
P22DC
P21DD
RSTRESET
GNDGND
VCC3.3V

В итоге,должно получиться примерно так:

На странице github проекта качаем прошивку (именно для этого устройства файл называется CC2530ZNP-Pro-Secure_LinkKeyJoin.hex) и программу для прошивки (flash-programmer), после установки которой в систему добавляются нужные драйвера.
При подключении платы-дебагера в USB-порт компьютера в программе сразу отобразится подключенное устройство. Нужно только указать путь к файлу-прошивке и нажать кнопку “Perform Actions”:

Для примера мы будем использовать ОС Armbian на ARM-плате Cubietruck с внешнем жестким диском. Система Armbian установлена на диск с переносом корневого раздела, на карте памяти microSD остался только загрузчик. ZigBee-модуль портами P03 (Rx) и Р02 (Tx) подключен в UART4 (в ОС как ttyS4) платы cubietruck, питание 3V3, GND взято на соседних pin. Для устойчивой работы еще надо порты P20, P4, P5 самого координатора подтянуть к земле. Порт UART активируется очень просто, с помощью команды armbian-config в разделе System — Hardware нужно активировать нужный порт и перезагрузить систему.

Драйвер zigbee добавляется из админки одним кликом:

В настройках указываем порт, куда подключен координатор. В нашем случае это /dev/ttyS4:

Остальные настройки можно оставить по-умолчанию. После первого запуска драйвера, нужно провести сопряжение (добавление) устройств. Полная инструкция на github, сопряжение через этот драйвер немного сложнее чем через родное приложение, но у вас не должно возникнуть проблем.

Подключение

Итак, для примера добавим кнопку Xiaomi. Для этого нажимаем зеленую кнопку в настройках драйвера и, следуя инструкции, сначала зажимаем кнопку сопряжения на тыльной стороне скрепкой, пока не начнет мигать светодиод, затем кликаем этой кнопкой примерно раз в 2 секунды, видим прогресс сопряжения.

После этого устройство появляется в дереве объектов и с ним можно спокойно взаимодействовать, как и с другими объектами. Кроме того, после добавления устройства, вы можете в настройках драйвера перейти на вкладку «Карта сети» и увидеть как теперь организована ваша сеть zigbee устройств:

Проблемы и их решение

Одна из основных проблем всех систем, построенных на zigbee, заключается в слабости передаваемого сигнала. Удаленность датчика от приемника или наличие на пути сигнала железобетонных препятствий серьезно влияют на стабильность системы. Решить эту проблему можно просто — надо добавить роутер в состав сети ZigBee и расположить его ближе к датчику. Некоторые беспроводные устройства, к примеру, розетка Xiaomi или некоторые умные лампочки могут работать в качестве роутера. Кроме того, устройства на базе чипа СС25хх имеют специальную прошивку, которая позволяет их использовать как роутер в системе.

Процесс добавления роутера в систему прост: нажимаем кнопку сопряжения в драйвере и на включенном роутере на базе чипа СС25хх несколько раз нажимаем кнопку S2, пока устройства не соединятся.

Добавим для примера датчик температуры/влажности, который должен работать через роутер. Можно просто сделать сопряжение через драйвер и датчик должен подключиться через роутер, если он ближе. Но можно принудительно указать чтобы сопряжение шло через конкретный роутер. Для этого в списке устройств на иконке роутера надо нажать зеленую кнопку сопряжения.

Убедимся что датчик правильно подключился — посмотрим карту сети. На карте показаны линии сопряжения устройств с указанием качества сигнала между сегментами сети.

Оцените статью
46 - столько SQL запросов к базе.
1,202150 - за столько сгенерировалась страница.