Очень часто от пользователей, кто только начинает знакомиться с сетью Zigbee, можно услышать вопросы: "а сколько Zigbee-устройств потянет малина?", "я купил стик с антенной, который бьет на 2 км, но он даже на 20м не работает, как быть?"
Сегодня я попытаюсь приоткрыть завесу тайны ответов на эти вопросы - расскажу свой опыт и знания о масштабировании Zigbee-сети.
Надеюсь, начальные знания о Zigbee-терминах у вас уже есть. Будем много идей и мало конкретики. Поэтому, поехали!
Суть проблемы
Со временем, многие пользователи Zigbee-устройств начинают испытывать зуд в труднодоступных местах от следующих проблем:
Все ближайшие к zigbee-координатору закутки уже забиты датчиками и надо расположить новую кнопку достаточно далеко от координатора, чтобы сосед по даче мог сигнализировать вам, что "стол накрыт, а жена ушла по делам".
После последнего подключенного Zigbee-устройства, начались какие-то заморочки с первыми устройствами. А потянет ли координатор еще одну кнопку?
Т.е. можно выделить потребность масштабирования сети в связи с увеличением зоны, которую надо покрыть Zigbee-сетью и в связи с увеличением количества подключаемых устройств.
Проблемы количественного и территориального масштабирования на самом деле очень похожи и поэтому решаются примерно одинаково.
1. Меш вам в помощь
Как вы знаете, в сети Zigbee кроме координатора, есть 2 вида устройств: роутеры и конечные устройства. Именно благодаря роутерам создаются узлы сети, которые и позволяют наращивать протяженность сети и количество ее элементов.
Роутерами обычно являются устройства, подключенные к постоянному питанию (например к сети 220в). Именно это позволяет таким устройствам не спать, а бодрствовать и осуществлять трансляцию сигналов между участниками сети. И еще это позволяет не экономить на энергии для сигналов - в большинстве случаев, дальность распространения сигнала от роутера гораздо больше.
Но можно сделать роутер с такой антенной, который сможет общаться с координатором на большом расстоянии, а уже датчик привязать к этому роутеру.
Уже есть примеры таких роутеров.
2. Больше устройств, не всегда лучше
Сколько zigbee-устройств можно привязать к одному координатору?
Ответом будет тоже вопрос: а какая у вас структура сети и какой координатор?
Однозначно сказать нельзя, если только производитель не указал это в документации.
Для примера возьмем координатор на чипе TI cc2530/cc2531. Именно на этом чипе работает известный многим "колобок" Athom Homey, "спрутстик" или открытый проект zigbee2mqtt.
Одним из недостатков этого чипа является ограниченный размер оперативной памяти (8Кб). И именно поэтому, обычная прошивка имеет ограничение на 15 напрямую подключенных устройств (соседей). Но если мы подключим любое устройство Zigbee-роутер, то подключая остальные устройства через него сможем увеличить общее количество устройств еще на 15. И так для каждого дополнительного роутера. Тут приходит еще одно ограничение - 6 роутеров. А с ростом количества устройств нужно выделять больше размер буфера данных...
Все подобные ограничения задаются параметрами прошивки, и соответственно разные прошивки имеют разные параметры. Поэтому, в случае необходимости большого количества устройств, можно собрать прошивку с соответствующими параметрами, но пожертвовав каким-либо другим функционалом. Разбираться в хитросплетениях этих параметров то еще "удовольствие". Именно поэтому, нет прошивки с максимальными значениями для этих параметров, а есть разные варианты прошивок.
И это еще сейчас в прошивках для cc253* используется старый стек Zigbee Z-Stack 1.2.2, а уже есть новый Z-Stack 3.0. На нем более эффективно сделано управление памятью (позволит больше устройств подключить). Но пока прошивки с новым стиком не приживаются - надо адаптировать код к работе с ними.
Но это касалось чипа TI cc2530/cc2531. На смену этому чипу уже давно пришел обновленный чип cc2538 (до 32Кб памяти). А на смену этому чипу уже есть cc2650 дополнительно с BLE (до 80К памяти) и его уже заменил CC2652R... Но эти чипы дороже старого проверенного cc2530 и не так доступны.
А еще есть deConz ConBee со своими чипами и прошивками - у них с количеством обслуживаемых устройств всё гораздо лучше (заявлено до 200 устройств).
3. Не сетью единой
И вот когда мы уже не можем применить первые два варианта масштабирования, то мы просто решаем поднять еще одну сеть Zigbee - еще один координатор. Тут единственная сложность - приобрести еще один координатор (привет Homey!).
Zigbee-сети должны отличаться Panid (идентификатором сети). А если они территориально будут располагаться в одном месте, то можно сменить и номер канала.
Остается только объединить данные этих сетей в одной системе. Тут всё зависит от используемого программного обеспечения.
В случае использования zigbee-стика в качестве координатора - достаточно воткнуть еще один стик в сервер и добавить его в используемое ПО (если оно позволяет использовать несколько координаторов).
Если сеть поднимается территориально далеко, то можно использовать небольшой компьютер (аля малина/апельсина) и передавать данные по ethernet/wifi сети используя mqtt протокол (для zigbee2mqtt) или настроив multihost (для ioBroker).
А еще можно собрать шлюз wifi-zigbee на базе esp8266 (или ethernet-шлюз на базе adruino), и координатора на чипе cc2530 подключенным по UART и уже этот шлюз завести через TCP-порт.
Заключение
Как видите, варианты масштабирования Zigbee-сети есть и не надо бояться приближающихся количественных ограничений. Если вы технический специалист и способны применить предложенные подходы, то бояться вам нечего. Можно достаточно гибко комбинировать варианты с роутерами и не торопиться перепрошивать координатор. Или же наплодить несколько сетей без особого труда.
Выход всегда есть и дорогу осилит идущий!
Весьма интересная статья
👍 очень познавательно и доходчиво!
шикарный материал!
Великолепная статья, просто шик!!!!
Отличная идея с кнопкой для соседа :)))) и вот такие потребности рождают классные реализации, кто бы пару лет назад мог подумать, что для этого будет использоваться zigbee )))
За статью огромное спасибо! Знания о зигби более систематизированы стали и появились новые хотелки.
Илья, подскажи, исходя из твоих знаний и опыта по зигби можно самому сделать роутер-ночник, например, так же просто как на базе ESP/Arduino/Z-Uno? Или DIY ZigBee-датчик с питанием от батарейки?
Сделать-то можно всё. Но не просто :)
У меня есть только опыт с чипом cc2530. Для него прошивку можно сделать на основе примеров из Z-Stack. Но в отличие от скетчей Ардуино, примеры для cc2530 - это очень много кода и разобраться в нём лично мне - проблематично. Хотя и возможно.
А еще, среда для разработки
IAR Embedded Workbench for 8051 бесплатная только на 30 дней. Дальше сам думай :)
Дальше можно попробовать с иным чипом - JN5168 от NXP, он чуть дороже, но для него среда разработки бесплатная и тоже есть примеры. Этот чип кажется более перспективным, на нем делают датчики xiaomi например.
Но опыта с ним у меня пока нет.
Dresden elektroniks делает еще и чипы для создания своих устройств. Например чип на котором Raspbee и Conbee имеет 256kB flash and 32kB RAM
Но в этом году вышли новые чипы
Powerful ARM Cortex-M0 + 32-bit microcontrollerdeRFsamR21E-23S00
Storage: 4MBit SPI DataFlash for
firmware updates over the air
Если актуально, то недельки три стабильно работают 8 датчиков температуры/влажности и два выключателя (двухкнопочных) aqara
После прочтения остался вопрос.
Координатор cc2531 - максимально напрямую может подключить 15 устройств.
Подключаю первым роутер, затем хочу 20 датчиков.
14 датчиков подключатся напрямую, остальные 6 через роутер? Как идет распределение?
Может ли быть ситуация, что 14 датчиков подключатся напрямую, а остальные не смогут вообще подключиться, потому что решили подключаться к координатору напрямую, а не через роутер?
устройства обычно сами выбирают через кого будут работать (зависит от качества соединения с роутером/координатором) и со временем могут переходить от одного узла к другому.
распределение будет автоматическим. либо (в последних версиях снова появилась такая возможность) запускать спаривание на конкретном узле (роутере) - устройства должны подключаться к нему. но похоже не все роутеры такое умеют.
Т.е. чтобы повысить шанс работы датчика, через конкретный роутер, при добавлении датчик лучше поднести поближе к роутеру?
да, но это только повысит шанс :)
Zigbee - сеть фортуны )
Очень познавательно и полезно!
Автору респект, огромный информационный вклад, для новичков жаждущих ответов!