Статья

Zigbee. Когда раZмер имеет Zначение

Очень часто от пользователей, кто только начинает знакомиться с сетью Zigbee, можно услышать вопросы: "а сколько Zigbee-устройств потянет малина?", "я купил стик с антенной, который бьет на 2 км, но он даже на 20м не работает, как быть?"

Сегодня я попытаюсь приоткрыть завесу тайны ответов на эти вопросы - расскажу свой опыт и знания о масштабировании Zigbee-сети.

Надеюсь, начальные знания о Zigbee-терминах у вас уже есть. Будем много идей и мало конкретики. Поэтому, поехали!

Суть проблемы

Со временем, многие пользователи Zigbee-устройств начинают испытывать зуд в труднодоступных местах от следующих проблем:

Все ближайшие к zigbee-координатору закутки уже забиты датчиками и надо расположить новую кнопку достаточно далеко от координатора, чтобы сосед по даче мог сигнализировать вам, что "стол накрыт, а жена ушла по делам".

После последнего подключенного Zigbee-устройства, начались какие-то заморочки с первыми устройствами. А потянет ли координатор еще одну кнопку?

Т.е. можно выделить потребность масштабирования сети в связи с увеличением зоны, которую надо покрыть Zigbee-сетью и в связи с увеличением количества подключаемых устройств.

Проблемы количественного и территориального масштабирования на самом деле очень похожи и поэтому решаются примерно одинаково.

1. Меш вам в помощь

Как вы знаете, в сети Zigbee кроме координатора, есть 2 вида устройств: роутеры и конечные устройства. Именно благодаря роутерам создаются узлы сети, которые и позволяют наращивать протяженность сети и количество ее элементов.

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

Благодаря роутерам, конечные устройства (датчики, кнопки) можно располагать рядом с ними в радиусе их действия. Для работы датчиков через роутер, они должны быть сопряжены с роутером, а не с координатором.

Роутеры способны образовывать цепочки из нескольких роутеров и меш (сети узлов), позволяя расширять покрытие Zigbee-сети.

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

Имейте ввиду, что датчики на батарейках имеют очень ограниченную дальность распространения сигнала (например, у датчиков xiaomi радиус примерно 10-15м в помещении), т.к. он у них слабый. И какая бы мощная антенна не стояла на координаторе или роутере, датчик не сможет "докричаться" до него на больших расстояниях.

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

Уже есть примеры таких роутеров.

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

Но в этом году вышли новые чипы 
deRFsamR21E-23S00  
Storage: 4MBit SPI DataFlash for
firmware updates over the air

Powerful ARM Cortex-M0 + 32-bit microcontroller

Support the latest ZigBee standard (ZigBee 3.0)
Спасибо за статью.На https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator">https://github.com/Koenkk/Z-St... есть прошивки для СС2531 под новый Z-Stack 3.0. Кто-нибудь пробовал, стабильно работают? У меня стоит задача связать Zigbee2mqtt ->СС2531 ->датчики от Xiaomi (движения, температуры,влажности).

Если актуально, то недельки три стабильно работают 8 датчиков температуры/влажности и два выключателя (двухкнопочных) aqara

После прочтения остался вопрос.


Координатор cc2531 - максимально напрямую может подключить 15 устройств.


Подключаю первым роутер, затем хочу 20 датчиков. 
14 датчиков подключатся напрямую, остальные 6 через роутер? Как идет распределение?


Может ли быть ситуация, что 14 датчиков подключатся напрямую, а остальные не смогут вообще подключиться, потому что решили подключаться к координатору напрямую, а не через роутер?

устройства обычно сами выбирают через кого будут работать (зависит от качества соединения с роутером/координатором) и со временем могут переходить от одного узла к другому.

распределение будет автоматическим. либо (в последних версиях снова появилась такая возможность) запускать спаривание на конкретном узле (роутере) - устройства должны подключаться к нему. но похоже не все роутеры такое умеют.

Т.е. чтобы повысить шанс работы датчика, через конкретный роутер, при добавлении датчик лучше поднести поближе к роутеру?

да, но это только повысит шанс :)

Zigbee - сеть фортуны )

Очень познавательно и полезно!

Автору респект, огромный информационный вклад, для новичков жаждущих ответов!


Вернуться назад

Устройства


Xiaomi

Door and Window Sensor

(25 отзывов)

Athom Homey

Homey

(6 отзывов)

Texas Instruments

ZigBee Stick CC2530


Texas Instruments

USB Stick CC2531

(14 отзывов)

Texas Instruments

USB Stick CC2538

(1 отзыв)

Texas Instruments

USB Stick CC2650


Phoscon

deCONZ Conbee

(3 отзыва)

Raspberry Pi

Raspberry Pi 4

(16 отзывов)

Espressif Systems

ESP8266

(1 отзыв)

Вернуться назад