Основы 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) используют это для приоритетной ретрансляции — пакеты от избранных обрабатываются в первую очередь.