Диагностика Meshtastic

Команды диагностики

# Список узлов с SNR и RSSI
meshtastic --port $PORT --nodes
 
# Маршрут пакета + SNR каждого хопа
meshtastic --port $PORT --traceroute '!<nodeId>'
 
# Live мониторинг входящих пакетов
meshtastic --port $PORT --listen
 
# Запрос телеметрии с удалённого узла
meshtastic --port $PORT --request-telemetry --dest '!<nodeId>'

Веб-мониторинг

MeshMonitor — веб-дашборд, подключается к ноде по IP. Показывает статус нод, позиции, телеметрию. Деплой через Docker.

Интерпретация SNR

SNRRSSIКачество
>= -7 дБ>= -115 дБмхорошее
>= -15 дБ>= -126 дБмудовлетворительное
< -15 дБ< -126 дБмслабое, нужны изменения

Если связь слабая — сменить пресет на более медленный (см. LoRa радио Meshtastic), заменить антенну, поднять выше.

Дополнительные модули

  • Range Test — одноразовый замер дальности. Один узел шлёт маячки, другой пишет CSV с SNR и координатами (можно загрузить в Google Maps).
  • Neighbor Info — периодически отправляет список прямых соседей (0 hop) с SNR. Полезно для визуализации топологии.
  • External Notification — мигание встроенного LED при входящих сообщениях. На Heltec V4 два LED рядом:
    • Левый (белый) — GPIO 35, управляемый, используется для уведомлений
    • Правый (красный) — индикатор заряда батареи, неуправляемый (аппаратный)
meshtastic --port $PORT \
  --set external_notification.enabled true \
  --set external_notification.output 35 \
  --set external_notification.active true \
  --set external_notification.alert_message true \
  --set external_notification.output_ms 3000

active true — LED выключен по умолчанию, загорается на 3 секунды при входящем сообщении. Обязательно device.led_heartbeat_disabled true, иначе LED мигает постоянно (heartbeat использует тот же GPIO 35). После настройки перезагрузить ноду (--reboot).

На T114 (nRF52840) LED инвертирован — active false:

meshtastic --port $PORT \\
  --set external_notification.enabled true \\
  --set external_notification.output 35 \\
  --set external_notification.active false \\
  --set external_notification.alert_message true \\
  --set external_notification.output_ms 3000

active false потому что LED_STATE_ON = 0 в variant.h (LED включается низким уровнем). Если поставить active true — LED будет гореть постоянно и гаснуть при сообщении.

  • Store & Forward — хранение сообщений для офлайн-узлов. Работает только на ESP32 с PSRAM.
  • Traceroute — встроен, не требует модуля.

Известные баги с трафиком

NodeInfo не масштабируется (#6369, firmware ≤2.7.15)

nodeInfoBroadcastSecs задаёт базовый интервал, но firmware не масштабирует его по количеству нод в базе. При 200+ нодах в nodeDB каждая нода отправляет NodeInfo каждые 5-7 минут вместо настроенных 3 часов. Исправлено в v2.7.19 (PR #9364 — graduated scaling). В v2.7.18 этого фикса нет.

Broadcast storm (#9162, firmware ≤2.7.15)

Дедупликация пакетов сломана — одинаковые пакеты ретранслируются повторно. Исправлено в v2.7.18.

Рекомендации при высоком chUtil

  • Проверить hopLimit — значение 7 (макс) значительно усиливает трафик. Для большинства сетей достаточно 3-4.
  • Проверить nodeInfoBroadcastSecs — на firmware <2.7.18 значение не масштабируется автоматически.
  • airUtilTx показывает вклад твоей ноды. Если chUtil высокий, а airUtilTx низкий — проблема в чужих нодах.

NodeDB перегрузка WiFi на ESP32

При >100 нодах в nodeDB WiFi на ESP32 деградирует: packet loss до 80%, RTT 2-3 секунды. На Heltec V4 (16MB Flash) firmware автоматически выставляет MAX_NUM_NODES=250, что приводит к crash loop — нода перезагружается каждые 5-6 минут, каждый раз отправляя POSITION + NodeInfo broadcast. Внешне это выглядит как «спам NodeInfo».

Диагностика: в Malla пакеты POSITION и NODEINFO от ноды идут парами с дельтой 10-25 секунд, повторяясь каждые 5-8 минут — признак crash loop (Position отправляется при старте, NodeInfo через ~20 сек по setStartDelay()).

Решение: добавить -D MAX_NUM_NODES=80 в build flags прошивки (variants/esp32s3/heltec_v4/platformio.ini). Это ограничивает NodeDB до 80 записей, экономя ~34KB heap. Старые неактивные ноды вытесняются автоматически. Graduated scaling из v2.7.19 (#9364) при этом продолжает работать.

Workaround (без пересборки): ежедневный ребут по cron.

Борьба со спамом

В каналах нет модерации. Спамеров и токсиков добавлять в игнор — их сообщения не будут отображаться и не будут ретранслироваться через вашу ноду.

Защита от MQTT-утечек

meshtastic --port $PORT \
  --set lora.ignore_mqtt true \
  --set lora.config_ok_to_mqtt false
  • ignore_mqtt true — игнорировать пакеты, пришедшие из интернета через чужой MQTT-шлюз
  • config_ok_to_mqtt false — запретить чужим узлам пересылать твои пакеты в MQTT