Основы mesh-сети Meshtastic

Как передаются сообщения

В mesh-сети нет центрального сервера. Пакет летит от ноды к ноде, пока не достигнет адресата. Каждая такая передача — хоп (hop). Максимальное число хопов задаётся в настройках радио — по умолчанию 3.

Ретрансляция — когда нода, получив чужой пакет, передаёт его дальше в эфир. Не все ноды ретранслируют — это зависит от роли.

Эфир и коллизии

LoRa — это радио, и эфир у всех общий. Когда две ноды передают одновременно, происходит коллизия — оба пакета теряются. Чем больше нод ретранслирует, тем выше вероятность коллизий.

Channel utilization — процент времени, когда эфир занят передачами. Нода измеряет это, слушая всё вокруг. Если значение превышает 25%, сеть перегружена и пакеты начинают теряться. Посмотреть можно через диагностику.

Телеметрия

Ноды периодически рассылают служебные данные о себе: уровень заряда, напряжение, температуру, channel utilization. Это и есть телеметрия. Инфраструктурные роли (ROUTER, REPEATER) шлют её реже или не шлют вовсе, чтобы не забивать эфир.

NodeDB

Каждая нода хранит таблицу всех известных ей узлов — NodeDB. Туда попадают данные из NodeInfo-пакетов: имя, координаты, роль, hardware. NodeDB помогает отслеживать дубликаты пакетов и принимать решения о ретрансляции.

Идентификация ноды

Каждая нода имеет уникальный Node ID — последние 8 символов MAC-адреса в hex (например !698573a0). Из последних 6 символов Node ID вычисляется RGB-цвет ноды в приложении — он привязан к MAC и не меняется. Последние 4 символа используются как короткое имя по умолчанию (и отображаются как суффикс после смены имени).

MQTT

MQTT позволяет подключить mesh-сеть к интернету. Нода-шлюз отправляет пакеты из эфира на MQTT-брокер, откуда их получают другие шлюзы и веб-клиенты. Подробнее — в заметке про MQTT.

Избранные узлы (Favorites)

В настройках можно отметить узлы как избранные (favorites). Некоторые роли (CLIENT_BASE) используют это для приоритетной ретрансляции — пакеты от избранных обрабатываются в первую очередь.