Роли нод Meshtastic
Каждая нода может иметь одну из ролей, определяющую её поведение в mesh-сети. Если термины вроде ретрансляции, хопов или channel utilization незнакомы — начни с основ mesh-сети.
Сравнение основных ролей
| CLIENT | CLIENT_MUTE | CLIENT_BASE | ROUTER | REPEATER | ROUTER_LATE | |
|---|---|---|---|---|---|---|
| Ретрансляция | умная | нет | ROUTER_LATE для избранных | всегда, первым | всегда, первым | всегда, последним |
| Виден в сети | да | да | да | да | нет | да |
| Телеметрия | нормально | нормально | нормально | реже | нет | реже |
| Подключение к приложению | да | да | да | да | нет | да |
| Спит | настраиваемо | настраиваемо | настраиваемо | агрессивно | агрессивно | агрессивно |
| Отправляет свои данные | да | да | да | минимально | нет | минимально |
Основные роли
CLIENT (по умолчанию)
Рекомендуется для большинства устройств. Умно ретранслирует пакеты — может пропустить ретрансляцию, если услышал что сосед уже передал. Это снижает коллизии.
CLIENT_MUTE
Получает сообщения, но не ретранслирует их. Для перегруженных сетей или дополнительных личных устройств — минимизирует использование эфира.
CLIENT_BASE
Личная базовая станция с приоритетной ретрансляцией на [избранные узлы](Основы%20mesh-сети%20Meshtastic.md#Избранные узлы (Favorites)). Подходит для хорошо расположенных стационарных устройств (крыша, чердак).
С v2.7.18 использует ROUTER_LATE семантику для избранных узлов (раньше была ROUTER). Это мягче — базовая станция больше не перехватывает маршрутизацию у более подходящих промежуточных нод.
CLIENT_HIDDEN
Передаёт только при необходимости. Для скрытых развёртываний или максимальной экономии батареи.
ROUTER
Только для стационарных нод на высоте. Всегда ретранслирует и делает это первым — приоритет перед CLIENT. Сеть предпочитает этот узел для маршрутизации.
- Экономит энергию: реже шлёт телеметрию, агрессивнее спит
- Виден в списке нод, можно подключиться
- Для MQTT-шлюзов предпочтительнее CLIENT или CLIENT_BASE — приём пакетов не зависит от роли, а обязательная ретрансляция ROUTER добавляет лишний airtime
REPEATER
“Поставил и забыл”. Чисто ретранслятор — невидим в сети, не шлёт свои данные. Минимальный трафик, максимальная автономность. Нельзя подключиться приложением.
ROUTER_LATE (с firmware 2.5.18)
Всегда ретранслирует, но после всех остальных — использует позднее contention window. Механизм: сначала пытается в стандартном окне, но если слышит что другая нода уже ретранслировала пакет — откладывает в позднее окно. Задержка внутри окна рандомная + SNR-bias (слабый сигнал = короче задержка, чтобы дальние ноды передавали первыми).
Не предназначен для: крышных нод расширения покрытия, мобильных устройств, MQTT-шлюзов. Подходит для заполнения инфраструктурных пробелов — кластер нод за холмом, в каньоне, без видимости на существующие роутеры.
Специализированные роли
SENSOR
Приоритизирует отправку телеметрии (температура, влажность). Сохраняет маршрутизацию, но снижает частоту собственной телеметрии. Для метеостанций и мониторинга окружения.
TRACKER
Периодически отправляет GPS-координаты с высоким приоритетом. Для отслеживания транспорта, людей, активов.
LOST_AND_FOUND
Регулярно передаёт данные о местоположении для помощи в поиске потерянного устройства.
TAK / TAK_TRACKER
Интеграция с ATAK (Android Team Awareness Kit — тактическое приложение для координации на местности). TAK_TRACKER дополнительно отправляет PLI (Position Location Information) и снижает частоту трансляций.
Устаревшие роли
ROUTER_CLIENT (удалена в firmware 2.3.15)
Комбинация ROUTER + CLIENT. Заменена на CLIENT с rebroadcastMode: LOCAL_ONLY для стационарных шлюзов. Не использовать.
Опасности неправильного использования
- Много роутеров рядом → коллизии пакетов, потери сообщений
- Broadcast storm — в плотной сети каждый роутер ретранслирует каждый пакет, нагрузка растёт лавинообразно
- [Channel utilization](Основы%20mesh-сети%20Meshtastic.md#Эфир и коллизии) >25% — коллизии растут нелинейно: больше ретрансляций → больше коллизий → больше повторных отправок → ещё больше загрузки
- Расход батареи — TX самый энергозатратный режим, постоянная ретрансляция быстро разряжает ноду
- Роутер на земле/в низине → съедает hop’ы, пакет не доходит до высокого узла
- Асимметричные связи — роутеры в низине могут съедать хопы в одном направлении, но обратный путь уже не проходит. Часть сети отправляет сообщения, но не получает ответов. Повышение hop limit лишь усугубляет перегрузку
- ROUTER на мобильном устройстве → ломает маршрутизацию при перемещении
- Ложный hop count через MQTT — пакет приходит через MQTT-роутер с hops=0, другие ноды считают источник прямым соседом
- REPEATER и эхо-эффект — не ведёт NodeDB, хуже отслеживает дубликаты; при плохом размещении пакет может летать между ретрансляторами до исчерпания hop limit
Правило: мало роутеров на высоте лучше, чем много роутеров на земле.
Рекомендация для сети
| Сценарий | Роль |
|---|---|
| Мобильный девайс | CLIENT |
| Второе личное устройство / перегруженная сеть | CLIENT_MUTE |
| Стационарная нода дома (крыша, чердак) | CLIENT_BASE |
| MQTT-шлюз (стационарный, Wi-Fi) | CLIENT_BASE |
| Стратегическая точка на высоте | ROUTER |
| Заполнение мёртвых зон | ROUTER_LATE |
| Автономный ретранслятор без обслуживания | REPEATER |
| Метеостанция | SENSOR |
| GPS-трекер | TRACKER |
Стационарная нода — зачем
Стоит если:
- Хочешь, чтобы mesh работал при перемещении по городу/лесу — роутер на крыше “держит” сеть
- Хочешь MQTT-шлюз для мониторинга нод из дома
- Между нодами часто большое расстояние или здания
- Планируешь расширять сеть — новые участники сразу получат связь через роутер
Не стоит если:
- Все ноды и так слышат друг друга напрямую
- Ноды всегда ходят вместе
- Нет высокой точки (балкон 5+ этаж, крыша)