Как стать автором
Обновить

Комментарии 12

Я использовал стандартный zigbee2mqtt для автоматизации дачи. Столкнулся с тем, что иногда теряются устройства. Например, после того, как raspberry pi, на котором бегает zigbee2mqtt, выключается на пару часов (из-за отключение электричества) и затем включается обратно, может не подцепиться датчик температуры.

Не знаете, это проблема самого датчика (например, в отсутствии устройства, принимающего его сигнал, он засыпает навсегда) или zigbee2mqtt?

НЛО прилетело и опубликовало эту надпись здесь

Я так не считаю. По моему мнению zigbee - лучший беспроводной протокол для бюджетной домашней автоматизации. Но есть одно но. Дело в том, что zigbee не работает сам по себе, над ним есть более высокоуровневая надстройка Zigbee Cluster Library (ZCL), которая определяет что, как и когда определенный тип устройств должен передавать и эта вещь в теории должна стандартизировать работу всех однотипных устройства разных производителей, что свело бы к минимуму проблемы и привело бы к полной совместимости между оборудованием разных фирм. А на практике в API беспроводных устройств творится полный хаос, причем изменения настолько нелогичные, что они, скорее всего, внесены специально с целью несовместимости с оборудованием других производителей.

Датчики от Xiaomi (возможно и других производителей тоже, но с другими я не работал) действительно засыпают. Дело в том, что устройства с батарейным питанием большую часть времени находятся в выключенном состоянии: радочасть обесточена, а практически весь контроллер спит и просыпается либо по таймеру, либо по сигналу переферии (например при физическом нажатии кнопки) и только после пробуждения происходит передача данных по zigbee. Скорее всего, несколько раз проснувшись, отправив данные на координатор и не получив подтверждение о их получении датчик температуры понимает, что сети больше нет и перестает просыпаться. Конкретно датчики температуры и освещенности Xiaomi обратно подключаются к сети при кратковременном нажатии на кнопку сопряжения (для выключателей работет нажатие на основную кнопку, для датчика открытия - манипуляция с магнитом) и продолжают работать дальше. Но есть нюанс: при повторном подключении на координаторе происходит индикация подключения(ZDO_TC_DEV_IND) устройства как при сопряжении, и вот тут zigbee2mqtt может некорректно обрабатывать этот момент (в моей библиотеке такая ситуация учтена).

Вообще устройства не очень хорошо себя ведут, если пропадает координатор или роутер. Динамическое перестроение не всегда тоже работает, зависит от устройств.

Сложно сравнить с Home Assistant, слишком много различий, проще кратко описать особенности:

  • весь сервер представляет из себя бинарник (собирается под linux и windows) + yaml файл настроек

  • графический интерфейс отсутствует, управление идет через mqtt: предполагается использование готовых mqtt панелей под iOS или Android

  • до запуска сервера в файле настраивается порт для cc2530(2531), учетка mqtt брокера и колличество/тип точек автоматизации (освещение, отопление, сигнализация)

  • используется только протокол zigbee

  • при сопряжении устройства zigbee пользователь выбирает только точку автоматизации для привязки, тип, роль и настройки устройства сервер выбрает сам

Спасибо за статью, давно не читал что-то настолько интересное!

 Минусы такого подхода: во-первых вторично, а во вторых это отдельно сервер, отдельно zigbee2mqtt и отдельно mqtt брокер для объединения, что очевидно надежности не добавляет

Что значит 'вторично'? Почему это минус?

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

Минус потому что не было желания повторять чьё-то решение, а насчет надежности я соглашусь, тем более проект писался после перерыва в кодинге и предназначался изначально для портфолио

У меня такая же идея была для ESP32-H2, если выйдет.

С документацией по zigbee чипам ситуация неоднозначная - она есть, она довольно подробная, многие нюансы хорошо описаны, из нее совершенно не понятно как все работает и что с этим делать.

Абсолютно согласен! По началу совершенно непонятна логика инициализации и переинициализации устройств. Какая-то память, куда надо что-то записывать, потом перезапускать, потом при отключении питания из неё все равно всё теряется. Горячая и холодная инициализации для устройства, сконфигурированного как end_device. Ключи шифрования, мощность передатчика, установка каналов, на которых будет происходить поиск. Какие-то endpoints, applications, clusters.

Дальше, есть три версии Z-Stack, у них есть последние актуальные версии (1.2.2, 2.5.1, 3.0.1), соответственно три набора документации, в одном наборе не хватает чего-то одного, в другом другого. На форуме TI отвечают односложными фразами и отправляют просителей в документацию или в соседние треды, где также ничерта нет и сразу закрывают дискуссию.

Попробуй сходу найти ответ, как отключать при старте ожидание от бутлоадера или как скомпилировать Z-Stack c включением CTS/RTS для UART? Какое значение у ключа шифрования по умолчанию? Как управлять мощностью передатчика? Как зарегистрировать свой endpoint через ZNP команды? Как отправлять и принимать через него сообщения? Каким софтом сниферить сеть и какие прошивки использовать для устройства, которое используется в качестве снифера?

Вообще для себя понял, что единственный способ однозначно разобраться как работать с Z-Stack - это скачать все три версии исходников и докуметации Z-Stack, а затем открывать по три версии соответсвующих документов и лезть разбирать соответствующий исходный код. При этом, в документации, помимо отсутствия описания логики инициализации иногда отсутствуют например целые команды ZNP и/или описания кодов, которые они возвращают (например команды Simple API через ZNP).

Вообще обидно, что так все запущено с документацией для Zigbee. Из-за этого появились и развиваются такие монстры, как zigbee2mqtt (монстр, потому что решает примитивную задачу, но написан на typescript и тянет за собой целый node.js и движок v8). И всё из-за того, что новичкам трудно разобраться как сделать то, что им нужно без подобного софта-посредника. Когда разберешься (потратив кучу времени на реверс инжиниринг исходников и проверку гипотез и догадок, ага), zigbee протокол становится очень простым и понятным =)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории