Существует, как минимум, две проблемы, которые не решаются в лоб с помощью стандартного приложения Meshtastic.
Когда вы отправляете пакет в сеть — неважно, это личное сообщение (direct message, DM) или сообщение в общий чат (broadcast), — его ретранслируют другие участники сети. И делают это отнюдь не все, кто его услышал — иначе сеть была бы просто наводнена такими пересылаемыми сообщениями и захлебнулась бы в потоке ретрансляций. Ваше сообщение отправляют дальше в сеть отдельно взятые ноды. И взятые не с потолка..
Для максимальной дальности передачи мы заинтересованы в том, чтобы таким ретранслятором была бы наиболее удаленная от нас нода. Именно она должна отправить наше сообщение дальше в сеть — и опять же, закинула бы его как можно подальше. То есть очередным новым ретранслятором среди всех прочих тоже должна стать наиболее удаленная нода, а все, кто поближе, должны помалкивать.
Технически это очень нетривиальная задача. Ведь ноды друг о друге практически ничего не знают. Они не могут «договориться», они не мыслят друг о друге в терминах расстояний и не знают, насколько далеко от вас находятся. И все же инженеры решили эту задачу, насколько это в таких условиях было возможно, и решили ее весьма остроумно.
Поскольку этот оркестр нод вокруг вас не может принимать коллективного решения, кому единственному отдавать право первой ночи приоритет на ретрансляцию, они используют уровень ВАШЕГО сигнала (точнее, его SNR — соотношение сигнал/шум) как критерий своей от вас удаленности, а саму передачу пакета — в качестве канала связи. Чем хуже нода вас слышит, тем, предположительно, дальше она от вас находятся и тем выше ее приоритет в передаче.
Такое преимущество в ретрансляции реализовано до гениальности просто: эта передача для каждой ноды начинается со своей задержкой — тем большей, чем лучше эта нода вас слышит. Так происходит эта своего рода неявная конкуренция шиворот на выворот: минимальная задержка (rebroadcast delay) — то есть максимальный приоритет — будет у тех, кто вас слышит хуже всего. Ближние же к вам ноды с хорошей слышимостью стоят под паром и ждут, не сделал ли эту работу за них уже кто-то другой. Они при этом ничего не знают про этих других! Но если они услышали, что за время их ожидания пакет кто-то уже ретранслировал, они умывают руки — дельце обделано: кто-то с меньшей задержкой и, вероятно, более далекий тебя опередил. Если же за время своей задержки они такую передачу не услышали, сталоть, они и есть те самые далекие и ретранслировать пора им.
Другая причина, почему такая нода может не услышать чужую ретрансляцию, это положение такого ретранслятора по другую сторону от источника, то есть от вас.
Этот нехитрый механизм, который называется «управляемым наводнением» (managed flooding), обеспечивает расхождение ретрансляций кругами вокруг ноды-источника с максимально возможным расстоянием между такими волнами. И если те, кто на гребне, услышали и ретранслировали, то и те, кто в промежутках, заведомо услышали тоже.
Но есть один нюанс (с). Все это работает безупречно в условиях сферического коня в вакууме. Отсюда все эти «вероятно» и «предположительно». И самый большой подвох кроется в предположении, что чем хуже ретранслятор принимает сигнал, тем он якобы находится дальше. В реальности же причины, почему он вас слышит с низким SNR, могут быть связаны не с удаленностью, а с плохим расположением и плохой антенной. Далекая нода с хорошей антенной на крыше, которая могла бы закинуть ваше сообщение в другой район города, проиграет в таком соревновании ноде, которая стоит на подоконнике первого этажа в соседнем дворе-колодце.
И хуже всего, если такая соседская нода в радиотени двора имеет роль CLIENT, пытается ретранслировать, но ее никто не слышит, кроме вас.
Она услышит ваш пакет и радостно его прокричит в никуда. Ваша нода его услышит и пометит ваше сообщение как «отправлено» — у него появится облачко с галкой. В действительности же кроме ноды из соседнего двора и тех, кто мог бы его передать, но отдал это право этому тупичку, его никто уже не увидит. И вы сможете узнать об этом только по полному отсутствию реакции на ваше сообщение в общем чате или по его отсутствию в зеркале.

Такие ноды — это глухие тупики. И если у вас до этого была отличная связь со всем городом, появление такого соседа, который будет выигрывать конкуренцию у всех старых отличных ретрансляторов, вы в один момент можете оказаться отрезанным от сети. Это, скорее всего, случится не абсолютно — часть сообщений будет по-прежнему уходить. Но часть — безвозвратно теряться. И все это будет непредсказуемо с той или иной долей потерь. И в такой ситуации очень важно знать, кто ретранслирует ваши пакеты, чтобы если они теряются, определить этот тупиковый ретранслятор и попытаться договориться с его владельцем.
Определить ретрансляторов всех ваших пактов и помогает это приложение.
Даже небольшое смещение антенны может дать заметное улучшение приема, особенно когда речь идет о направленных антеннах. Вы незначительно меняете ее положение и смотрите на изменение качества приема — и так итеративным путем находите оптимальную позицию.
Загвоздка тут в том, что, как правило, информация об уровне сигнала появляется в родном приложении с такими большими интервалами, что подобная подстройка растягивается до бесконечности. А поскольку день ото дня условия меняются куда значительнее, чем способно внести новое положение антенны, такой подход теряет всякий смысл. А другого-то и нет!
Любая нода, если ее подключить к компьютеру по USB — ровно так, как вы это делали при прошивке, — выдает в порт подключения подробный журнал всех событий, что происходят у нее под капотом. В мельчайших деталях она сообщает о каждом своем чихе. В том числе она выплевывает туда информацию обо всех пакетах, которые пролетают мимо нее, и, что самое для нас главное, все детали о тех нодах, которых она слышит, И в первую очередь — об их уровнях сигнала. А поскольку такие события происходят с довольно высокой частотой — раз в несколько десятков секунд, — из этого лога можно выуживать такую информацию и представлять ее в виде, чтобы было удобно крутить и двигать свои антенны и наблюдать, как это влияет на качество приема.
И это еще одно полезное свойство приложения — показывать в реальном времени уровни сигнала нод, которые вы слышите.

Meshtastic Relay Finder — это веб-приложение (meshtastic-relay-finder.web.app). Оно читает из порта USB, к которому вы подключили ноду, лог всех событий, что в ней происходят.
Нужно отметить — это важно! — что подключенная таким образом нода сможет спокойно продолжать работать с телефоном по Blietooth или по WiFi. То есть вы можете параллельно подключиться к ней обычным образом, инициировать трафик (писать сообщения, запрашивать Node Info, выполнять Trace Route) и наблюдать за тем, кто ваши сообщения ретранслирует дальше в сеть.
Весь входящий поток событий анализируется и фильтруется. В окно терминала попадают только строки, имеющие отношение к вашим сообщениям. У каждого отправленного сообщения есть свой ID, по нему все строки, относящиеся не этому сообщению, связываются и в сгруппированном виде выводятся в терминал. Если ваше сообщение было кем-то ретранслировано, приложение выведет в левый сайдбар последний байт Node ID этой обнаруженной ноды, В сформированную таким образом карточку ноды-ретранслятора будет добавляться информация обо всех новых пакетах, которые она переслала в сеть — вкупе с ее SNR и RSSI.
В левой части большого скриншота выше — так выглядит сайдбар с пакетами, сгруппированными по нодам. У приложения есть вторая вкладка, где эта же история уже сгруппирована по услышанным или отправленным пакетам — в каждую карточку пакета попадают ноды, которые его ретранслировали (скриншот слева). Если этот пакет был отправлен вами, он в списках появится с голубым номером пакета, а если это сообщение в общий чат или трейсрут / node info, содержимое пакета можно посмотреть по наведению курсора мыши на его номер.
Для меня это загадка. Вероятно, разработчики предпочли по возможности скрыть информацию о ретранслирующей ноде. В общем и целом, такая скупая информация действительно не позволяет однозначно идентифицировать одну конкретную ноду во всей сети, Но поскольку у каждого пользователя список его директов весьма ограничен — а ретранслировать нас могут только директы, и это единицы, редко десятки нод, Вероятность, что среди этого короткого списка окажутся две ноды с одинаковым последним байтом (и именно они будут активно работать в сети), хоть и не является исключительно маленькой, но вот среди это пары выбрать ту, у которой совпадут еще и уровни сигнала — такая будет точно одна. Таким образом, даже имея всего один последний байт из номера ноды, мы можем однозначно ее идентифицировать.
Если включить режим трекинга абсолютно всех пакетов, которые оказываются в зоне слышимости вашей ноды (Collect All), можно с довольно большой частотой наблюдать за изменением уровня сигнала соседних нод в реальном времени. Пакеты пролетают с такой частотой, что это уже позволяет вносить изменения в расположение антенны и наблюдать вживую, как это сказывается на качестве приема.
На скриншоте справа — пример из жизни. Получив в руки такой инструмент, я тут же попробовал поднять повыше свою панельную антенну, которая стоит на подоконнике — читал утверждения, что даже подъем на 30 см в моих условиях может позитивно сказаться на качестве приема. Выше — это значит ближе к горизонтальной перекладине окна и металлической рольставне. Результат тут же отразился в логе.
Я подождал немного, чтобы убедиться, что это не флуктуация, и вернул антенну в прежнее положение. Результаты тут же вернулись к прежним значениям. Работает!
Убедитесь, что у вас правильно выставлены настройки в приложении. Они делаются в двух разделах.
