Meshtastic. Роли устройств в сети и конфигурация.


Про особенность настройки ролей устройств, лора модулей и прочих тонкостях.

Начало.

Для начала надо бы определится что вообще пытаемся построить. При конфигурации чего либо логично исходить из поставленных задач, а задачи могут быть разные. Настройки по умолчанию лучше подходят туристической или похожей группе людей с устройствами, пользователи которых хотят знать местоположение участников группы на карте и оставаться на связи в случаи нештатных ситуация или оповещать остальных в стиле: «я дошел до привала», «у магазина, стоянка 10 минут».

Децентрализованность сети дает простор для… та сами знаете чего, каждый делает что попало из благих побуждений, благих скорее для себя, «мне кажется так будет лучше, так правильно». Инструкции они конечно не читали, как что работает не понимают, регламентов нет никаких, но есть волшебная нода способная заменить телеграмм, вот прям в комнате и на столе. Другие же, знакомые с радио, посмотрев на всё то, начинают стоить что-то свое по дальше от тех вот. Но об этом в другой раз.

Итак, у нас есть устройство, узел, нода, устройству можно задать роль. Я надеюсь вы уже понимаете как все устроенно и работает?

Представим что понимаете. Что нода (узел в сети) это и приемник, и ретранслятор, и сборщик телеметрии, и запоминает устройства которые услышал, и пытается быть избирательным и не ретранслировать всё подряд.

Вот такому устройству можно задать роль в сети.

Роль устройстваОписаниеспособы применения
CLIENTУстройство для обмена сообщениями, подключённое к чему либо или работающее автономно. Ретранслирует пакеты, если этого не сделал другой узел.Повсеместное использование, для индивидуального пользователя взаимодействующего с сетью Meshtastic через клиентское приложение.
CLIENT_MUTEКлиент сети, который не ретранслирует пакеты от других устройств.Используется когда необходимо участвовать в сети, но не создавать нагрузку на сеть ретрансляцией. (портативная, носимая нода, автомобиль)
CLIENT_HIDDENУстройство которое передает минимум информации, передача по необходимости, для скрытности или экономии батареи.Используется для сокращения времени работы в эфире, ради скрытности или энергоэффективности при сохранении подключения к сети.
CLIENT_BASEПерсональная «базовая станция»: всегда ретранслирует пакеты избранных узлов. В остальном не отличима от CLIENT.Используется на узлах с большим охватом, нода на крыше или чердаке, чтобы ретранслировать сообщения внутренних или менее удачно расположенных узлов.
TRACKERПриоритетно передаёт геопозицию.Носимые устройства, трекеры, где важна оперативная передача координат
LOST_AND_FOUNDРегулярно передаёт свое местоположение в дефолтный канал (для поиска потерянных устройств).Используется для поиска потерянного устройства.
SENSORПриоритетная передача телеметрии.Используется в сценариях где сбор данных об окружающей среде или других датчиков имеет решающее значение. Режим энергосбережения в наличии.
TAKОптимизировано для связи с системой ATAK, сокращает количество рутинных трансляций.Интеграция с системами ATAK (через плагин Meshtastic ATAK) для связи в ходе тактических или скоординированных операций.
TAK_TRACKERВерсия TRACKER с поддержкой автоматических PLI (Position Location Information) для ATAK.Автономная интеграция PLI с системами ATAK для связи в ходе тактических или скоординированных операций.
REPEATERИнфраструктурный узел, всегда ретранслирует один раз. Максимум энергосбережения. Не отображается в списке узлов. Устарела с выходом версии 2.7.11Лучше всего размещать в стратегически важных точках, чтобы максимально увеличить зону покрытия сети. Устройство не отображается в топологии. Ретранслирует что услышит без разбора, в остальное время спит.
ROUTERИнфраструктурный узел для расширения зоны покрытия сети за счёт однократной ретрансляции пакетов. Отображается в списке узлов.Для размещения устройств в стратегически важных местах (места с большим охватом).
ROUTER_LATEИнфраструктурный узел, всегда ретранслирует пакеты, но только после ретрансляций других узлов, в остальных режимах, обеспечивая дополнительное покрытие для локальных кластеров. Отображается в списке узлов.Идеально подходит для устранения «мёртвых зон» или обеспечения надёжности кластера узлов, размещение которых не приносит пользы всей сети. Роутер\реппитер для носимых устройств или устройств с малым радиусом действия

Репетир Роутер. ВАЖНО!

Репитеров два, ROUTER и ROUTER_LATE, Основное и главное отличие, приоритеты: ROUTER ретранслирует пакет первым, ROUTER_LATE последним. Конечно это отличие не единственное, но ключевое. ROUTER уменьшает количество ретрансляций. ROUTER_LATE увеличивает охват, он подхватывает пакет который вероятно не смогли доставить другие, и это очень грубое пояснение. Логично что в нагруженной устройствами сети нужно использовать ROUTER, и ставить его нужно там где его услышат все. ROUTER_LATE логично использовать для покрытия серых зон. Но есть нюанс.

Не используйте роль REPEATER. Это гарантированно приведет к коллизиям (когда несколько нод одновременно отправляют пакет).

Не устанавливайте ROUTER абы где, нода с этой ролью должна иметь максимально возможное покрытие, иначе эффект от него, может быть строго противоположным. Это не просто должен быть приоритетный узел который слышат большинство, он должен соединять эти большинства в стратегическом (идиотский термин из документации) месте. ROUTER вклинивается в очередь ретрансляции до того, как другие узлы получат возможность ретранслировать, ROUTER ретранслирует все пакеты с высоким приоритетом.

Один ROUTER для групп устройств в месте где его слышат все.

ROUTER_LATE, также ретранслирует всё что услышит (почти всё), этим он отличается от CLIENT, но делает это с наименьшим приоритетом. CLIENT может не ретранслировать пакет, если услышал что это делает кто то другой, а ROUTER_LATE оставляет его на потом, когда на это будет время, даже если пакет кто то ретранслировал до него.

В работе сети есть так называемые «Конфликтные окна» или «Окна конкуренции», это время через которое нода начинает ретранслировать пакет после его получения, если посчитает нужным. Приоритета три, у ROUTER первый, у ROUTER_LATE последний, у CLIENT_BASE первый для избранных, второй для остальных. По этому считается что влияние узла ROUTER_LATE на сеть, идентично влиянию CLIENT, в обычных условиях он себя так и ведет.

Поскольку ROUTER_LATE пытается ретранслировать всё, что слышит, он увеличивает объём трафика на единственной общей частоте. Это может привести к перегрузке, коллизиям и потере пакетов. Если общий объём трафика становится слишком высоким, это может существенно повлиять на производительность сети, вплоть до того, что она станет непригодной для использования.

Если вы настаиваете на использовании этой роли в качестве узла на крыше в любом случае, пожалуйста, внимательно следите за показателями ChUtil (использование общего эфирного времени) и AirTXUtil (эфирное время, используемое только этим узлом) на вашем узле. Если показатель ChUtil превышает 25 %, а показатель AirUtilTX — 7–8 %, пожалуйста, прекратите использовать эту роль, чтобы сохранить общую функциональность сети.

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

Еще раз, если не понятно, инфраструктурные роли нужно использовать только там, где это действительно актуально и необходимо. Вреда от них, может быть больше чем пользы. ROUTER_LATE устанавливается только в стратегических местах в серых зонах, там где нет других узлов которые хорошо слышат основной сегмент сети и вам нужно ретранслировать все пакеты на серую зону. Он не для крыши в городской сети ради увеличения охватов. ROUTER служит для соединения разных сегментов сети, например у вас есть два поселка отрезанных горным хребтом, вот для соединения их и нужен ROUTER на хребте.

Классические сценарии:

  • Купили одну ноду для подключения к городской сети, если она в вашем городе есть, развитая, вы не знаете или знаете что делать, но нода у вас одна, носимая или просто со штатной антенной. Ставим CLIENT_MUTE и не отсвечиваем. Суть: Если нет возможности увеличивать охват, не мешайте тем у кого возможность есть, количество ретрансляций ограничена, приоритет в сети отдается нодам с низким уровнем сигнала, а не с большим покрытием.
  • У вас есть внешняя антенна или высокая точка с большим охватом, есть желание и возможность увеличить радиус действия сети и\или нет развитой сети в городе, ставим CLIENT.
  • Тоже если это частная сеть\связь в туристической группе, в лесу, на фестивале, и тд. Суть: CLIENT Это то самое классическое развертывание сети с устройствами одного уровня.
  • Поняли что с одной нодой ничего нормально не работает, купили вторую или еще несколько, первую решили поставить на крышу с антенной. CLIENT_BASE на крышу, на вторую и остальные CLIENT_MUTE. В обоих нодах добавили друг друга в избранное. Суть: CLIENT_BASE помогает увеличить охваты ретранслируя пакеты, автоматически и приоритетно ретранслирует всё с и в избранных CLIENT_MUTE.

В документации крайне рекомендуют использовать роли CLIENT и CLIENT_MUTE, если нет веских причин использовать что то другое.

Режим ретрансляции

В некоторых ролях можно более тонко настроить режим ретрансляций

ЗначениеОписание
ALLВСЕ (по умолчанию). При выборе этого параметра будут ретранслироваться ВСЕ сообщения, а также с других узлов с такими же настройками радиомодуля, в том числе с различными настройками шифрования.
ALL_SKIP_DECODINGALL_SKIP_DECODING — поведение такое же, как у ALL, но пакеты не декодируются, а просто пересылаются. Доступно только для роли Repeater.
LOCAL_ONLYLOCAL_ONLY — игнорирует сообщения от внешних сетей, не зашифрованные или которые не может расшифровать. Пересылает сообщения только по локальным первичным/вторичным каналам узлов.
KNOWN_ONLYKNOWN_ONLY — игнорирует сообщения из внешних сетей, как и LOCAL_ONLY, но идёт дальше и игнорирует сообщения от ноденумов, узлов которых нет в списке известных узлов (NodeDB).
NONENONE — разрешено только для ролей SENSOR, TRACKER и TAK_TRACKER. Это приведет к блокировке всех трансляций, как и в случае с ролью CLIENT_MUTE.
CORE_PORTNUMS_ONLYCORE_PORTNUMS_ONLY — игнорирует пакеты с нестандартными номерами портов, такими как TAK, RangeTest, PaxCounter и т. д. Ретранслирует только пакеты со стандартными номерами портов: NodeInfo, Text, Position, Telemetry и Routing.

Тут нужно смотреть на нагрузку вашей ноды и эфира, если все время отдается на ретрансляцию разного неизвестного мусора, принимайте соответствующие меры.

Сравнение ролей.

Опять табличка из документации.

РольBLE/WiFi/SerialДисплейпотреблениеретрансляцияприоритет ретрансляциивидимость в списке узлов
CLIENTYesYesRegularYesNoYes
CLIENT_MUTEYesYesLowestNoNoYes
CLIENT_HIDDENYesYesLowestLocal OnlyNoNo
CLIENT_BASEYesYesRegularYesFavorites OnlyYes
TRACKERYesNoRegular / LowAwake OnlyNoYes
LOST_AND_FOUNDYesNoRegularYesNoYes
SENSORYesNoRegular / LowAwake OnlyNoYes
TAKYesOptionalRegularYesNoYes
TAK_TRACKERYesOptionalRegularYesNoYes
ROUTERNoNoHighYesYesYes
ROUTER_LATEYesYesHighYesNoYes
REPEATERYesNoHighYesYesNo

Тут стоит обратить внимание на режимы ретрансляций, приоритеты есть только у ROUTER и CLIENT_BASE, роли в чем то очень похожи, но CLIENT_BASE ограничен списком избранное, а ROUTER он для всех. Так как это инфраструктурный узел и он предполагает автономную работу и установку на высоте, у него выключен дисплей и какая либо иная коммуникация со внешним миром, это связано с режимами энергосбережения (только для ESP32), микроконтроллер находится в спячке, и работает только на радиомодуль. Устанавливая этот режим следует предварительно настроить удаленное администрирование.

Особенно стоит обратить внимание на режимы энергопотребления, CLIENT_MUTE и CLIENT_HIDDEN еще более подходит для носимых устройств с батарейным питанием, не только отсутствием лишней нагрузки на эфир.

TRACKER и SENSOR большую часть времени находятся в спячке, будит их таймер, ретрансляцией они почти не занимаются.


Хопы, или количество ретрансляций.

Настоятельно рекомендуется оставить значение
МАКСИМАЛЬНОГО КОЛИЧЕСТВА ПЕРЕХОДОВ равным 3, если только вы не уверены, что для достижения узла назначения вам нужно больше (или меньше) переходов.
Чрезмерно большое количество переходов часто приводит к проблемам в сети.
Если вам нужно увеличить количество переходов, вносите изменения только в узлы на границах сети, а не в те, что находятся ближе к центру.

Что это? В сети есть ограничение на количество ретрансляций. Пакет можно послать указав ему ограничение в три хопа и на четвертой ноде он умрет не достигнув адресата, или достигнув если это четвертая в цепочке нода, а можно поставить ограничение на семь, но тогда есть шансы что пакет вернется вам обратно обойдя весь город, хотя ваш адресат в цепочки четвертый.

Не увеличивайте это число без нужды, это делает сеть неработоспособной отбирая эфирное время на трансляцию того, что транслировать не нужно. Спросите в общем чате с каким количеством ретрансляций Вас принимают, скорее всего 3 или 4 это будет максимальное число, такое+1 и устанавливайте.


Конфигурация радиомодуля

Регион

Тут можно и без таблички, ибо ставить нужно RU и использовать 868.7 — 869.2МГц, а и уменьшать мощность до 25мВт, но в РФ есть еще диапазон LPD на 433МГц. Тут только выбрать KZ_433, он совпадает с Российским LPD. Это если по всем правилам.

Пресеты и кастомы.

По умолчанию используется пресет под названием LONG_FAST, Это относительно медленная передача, подходит для не большего количества устройств на относительно большем расстоянии. Не забывайте, все это изначально было задумано для туристов. Вот что пишут, тут:

Возможно, вам стоит отказаться от LongFast, если в вашей сети есть:

  • Более 60 узлов, особенно если они расположены относительно близко друг к другу
  • Большое количество сообщений от множества пользователей или автоматизированных систем
  • Развертывание в городских/пригородных районах, где максимальная дальность действия менее важна, чем пропускная способность
  • Наблюдаются задержки в отправке сообщений или нестабильная доставка из-за перегрузки

А теперь табличка рекомендуемых пресетов:

ПресетПолоса (кГц)SFСкорость (кбит/с)чувствительностьЛучше Для
LongFast250111.07153 дБПо умолчанию. Используется подавляющим большинством. Стихийный пресет.
MediumSlow250101.95150,5 дБНемного выше скорость
MediumFast25093.52148 дБОтносительно быстрый с хорошей дальностью, можно использовать в сетях из ~100 устройств
ShortSlow25086.25145,5 дББыстрый с умеренной дальностью, подойдет для перегруженных городских сетей.
ShortFast250710.94143 дБОчень быстрый, малый радиус действия. Локальные сети с большим количеством участников или трафика
ShortTurbo500721.88140 дБМаксимальная скорость, минимальный радиус действия. Занимает весь диапазон, использовать с осторожностью

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

Radio PresetAlt Preset NameData-RateSF / SymbolsCoding RateBandwidthLink Budget
Short Range / TurboShort Turbo21.88 kbps7 / 1284/5500 kHz140dB
Short Range / FastShort Fast10.94 kbps7 / 1284/5250 kHz143dB
Short Range / SlowShort Slow6.25 kbps8 / 2564/5250 kHz145.5dB
Medium Range / FastMedium Fast3.52 kbps9 / 5124/5250 kHz148dB
Medium Range / SlowMedium Slow1.95 kbps10 / 10244/5250 kHz150.5dB
Long Range / FastLong Fast1.07 kbps11 / 20484/5250 kHz153dB
Long Range / ModerateLong Moderate0.34 kbps11 / 20484/8125 kHz156dB
Long Range / SlowLong Slow0.18 kbps12 / 40964/8125 kHz158.5dB

Есть пресеты еще медленнее Long Fast, с меньшей шириной полосы и большей избыточностью. Похоже единственное их назначение, фиксировать рекорды дальности связи. Очень специфические, но если вам и этого мало, радиомодуль всегда можно настроить ручками.

Вот еще из документации, примеры зависимости параметров.

Data-rateSF / SymbolsCoding RateBandwidthLink BudgetNote
37.50 kbps6 / 644/5500 kHz129dBМаксимально возможная скорость
3.125 kbps8 / 2564/5125 kHz143dB
1.953 kbps8 / 2564/8125 kHz143dB
1.343 kbps11 / 20484/8500 kHz145dB
1.099 kbps9 / 5124/8125 kHz146dB
0.814 kbps10 / 10244/6125 kHz149dB
0.610 kbps10 / 10244/8125 kHz149dB
0.488 kbps11 / 20484/6125 kHz152dB
0.073 kbps12 / 40964/531 kHz160dBВдвое большая дальность действия и/или зона покрытия «Длинного замедления», низкая помехоустойчивость
0.046 kbps12 / 40964/831 kHz160dBВ два раза больше дальности действия и/или зоны покрытия «Длинного замедления», высокая устойчивость к шуму

Полоса в 31 kHz, на китайских модулях скорее всего не заработает, может заработать 62.5 kHz, но… ниже 125 kHz опускать не стоит. Это то какую полосу частот, полосу частотного спектра, занимает передача пакета.

Coding Rate, это избыточность, сколько подмешивать информации для восстановления. Больше избыточности лучше помехоустойчивость, но меньше и скорость. 4/5 — 1,25 раза, 4/6 — 1,5 раза, 4/7 — 1,75 раза, 4/8 — в 2 раза больше накладных расходов и в два раза ниже скорость. На перегруженном всем диапазоне 433МГц CR 4/5 использовать не стоит, но он стоит по умолчанию почти во всех пресетах, повторю расчет на туристов в лесах и горах, и без помех.

SF, То что на сленге называется «чирки», Это то как кодируется информация по времени, больше чирков надежнее передача, меньше соответственно быстрее. Это параметр скорости передачи пакета.

Стоит ли вообще использовать кастомные настройки? От задач зависит, как обычно. Мне очень не нравится полоса в 250КГц и то как оно используется в городе, занимая половину выделенного частотного диапазона. Для штатов таких проблем нет, там на 915МГц 104 частотных канала по 250КГц. 104 против 2. Для нас разумно уменьшать полосу в ущерб скорости ради лучшей помехоустойчивости и разумного использования эфира.


На этом пока всё, но осталось что дополнить.