Как наглядно увидеть свою сеть Meshtastic с помощью MeshSense
Репозиторий давно не обновлялся
Последнее обновление было 10 месяцев назад.
Если вы когда-нибудь собирали автономную сеть на платах вроде Heltec или TTGO T-Beam с прошивкой Meshtastic, то наверняка сталкивались с типичной проблемой наблюдаемости. Ноды разбросаны по крышам, балконам или рюкзакам, а смотреть на крошечный экранчик 0.96 дюйма или тыкать мобильное приложение ради оценки маршрутов быстро надоедает. Хочется нормальный дашборд с картой, графиками уровня сигнала и трассировкой пакетов.
Проект MeshSense как раз решает эту задачу. Это легковесное приложение с открытым исходным кодом, которое подключается к вашей ноде Meshtastic и рисует живую карту со всеми параметрами сети.

Что умеет приложение
Главная фишка MeshSense — сбор статистики в реальном времени без костылей и сложных интеграций. Вы просто подключаете его к базовой ноде через Bluetooth или обычный Wi-Fi, после чего интерфейс начинает аккумулировать данные со всей округи.
Вот основные сценарии, где дашборд экономит время:
- Карта топологии и узлов. Приложение наглядно показывает, какие ноды сейчас в эфире, где они физически находятся по GPS и как давно выходили на связь.
- Трассировка маршрутов. Функция traceroute помогает сразу понять, через сколько промежуточных ретрансляторов прошел пакет и какой путь оказался оптимальным.
- Отчеты о качестве сигнала. Можно отслеживать SNR и уровень приема от каждого узла, чтобы точнее юстировать направленные антенны или искать мертвые зоны в городе.
- Контроль состояния железа. Выводятся данные о заряде аккумулятора, температуре и телеметрии удаленных устройств.
Запуск на сервере и в headless-режиме
Помимо десктопного варианта на Electron, проект отлично чувствует себя на одноплатниках вроде Raspberry Pi, стоящих рядом с базовой радиостанцией.
Для работы без графической оболочки предусмотрен headless-режим. MeshSense запускает локальный веб-сервер, к которому можно подключиться из любого браузера в локальной сети, закрыв доступ секретным ключом:
export ADDRESS=10.0.1.20 # IP-адрес вашей Meshtastic ноды
export PORT=5920 # Порт веб-интерфейса
ACCESS_KEY=mySecretKey ./meshsense-x86_64.AppImage --headless
Если гоняете приложение на ARM64-плате без монитора, разработчики предлагают запускать AppImage через виртуальный фреймбуфер:
dbus-run-session xvfb-run ./meshsense-arm64.AppImage --headless \
--disable-gpu --in-process-gpu --disable-software-rasterizer
Для систем на базе Debian или Ubuntu перед стартом AppImage нужно поставить пару пакетов: libfuse2 для работы самого контейнера и fonts-noto-color-emoji, чтобы корректно отображались иконки в интерфейсе.
Что под капотом
Архитектура проекта разделена на три части: фронтенд на Vite, API-бэкенд на Node.js и обвязка Electron.
В коде есть интересная деталь: для прямого взаимодействия с радиомодулями через Bluetooth ребята собрали собственный модуль webbluetooth, завязанный на системный libdbus-1-dev и cmake. Из-за этого при локальной сборке из исходников сначала придется скомпилировать бинарный биндинг:
git clone --recurse-submodules https://github.com/Affirmatech/MeshSense.git
cd MeshSense
# Сборка нативной зависимости для Bluetooth
cd api/webbluetooth
npm i
npm run build:all
cd ../..
# Установка остальных пакетов
./update.mjs
Для разработки запуск разделен на два независимых процесса. Фронтенд стартует на порту 5921, а бэкенд на порту 5920 автоматически проксирует необработанные маршруты в Vite:
# В первом терминале (UI)
cd ui
PORT=5921 npm run dev
# Во втором терминале (API)
cd api
export DEV_UI_URL=http://localhost:5921
PORT=5920 npm run dev
В README авторы честно предупреждают о баге в дев-режиме: при горячей перезагрузке Vite иногда дублируются подписки на события стейта, из-за чего строки в логах могут двоиться. Лечится обычной перезагрузкой страницы в браузере.
Кому проект пригодится
MeshSense — удобная утилита для радиолюбителей, энтузиастов LoRa и тех, кто строит децентрализованные сети связи для походов, дачи или резервного городского обмена сообщениями. Она избавляет от необходимости вручную парсить логи через serial-порт или гадать, почему пакет не долетает до соседнего холма.
Если у вас уже крутится домашний сервер или Raspberry Pi с подключенной LoRa-нодой, имеет смысл закинуть MeshSense в автозагрузку и получить аккуратную карту эфира перед глазами.
