Бэкап и восстановление Meshtastic

Экспорт конфигурации (бэкап)

meshtastic --port <PORT> --export-config > backup.yaml

Сохраняет в YAML:

  • owner, owner_short
  • channel_url (все каналы с PSK)
  • config (bluetooth, device, display, lora, network, position, power, security)
  • module_config (canned_message, external_notification, mqtt, telemetry и др.)
  • ringtone, canned_messages

Восстановление

Способ 1: —configure (быстрый, но ненадёжный)

meshtastic --port <PORT> --configure backup.yaml

Применяет все настройки из YAML за один раз. Проблема: устройство перезагружается посреди применения, и часть настроек может не записаться. Нужно проверять через --info и при необходимости повторять.

Способ 2: поэтапно (надёжный)

Применять настройки группами, ожидая перезагрузку между ними (15-20 секунд):

Шаг 1 — каналы:

meshtastic --port <PORT> --seturl "<CHANNEL_URL>"

Шаг 2 — bluetooth (после паузы 15 сек):

meshtastic --port <PORT> \
  --set bluetooth.fixed_pin <PIN> \
  --set bluetooth.mode FIXED_PIN

Шаг 3 — security (после паузы 15 сек):

meshtastic --port <PORT> \
  --set security.serial_enabled true \
  --set security.admin_key "base64:..." \
  --set security.private_key "base64:..." \
  --set security.public_key "base64:..."

Шаг 4 — модули (после паузы 15 сек):

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

Шаг 5 — device и остальное (после паузы 15 сек):

meshtastic --port <PORT> \
  --set device.led_heartbeat_disabled true \
  --set device.node_info_broadcast_secs 43200 \
  --set device.tzdef "GMT-3" \
  --set canned_message.allow_input_source scanAndSelect \
  --set canned_message.send_bell true \
  --set mqtt.root "msh/RU" \
  --set telemetry.device_update_interval 3600

Шаг 6 — перезагрузка:

meshtastic --port <PORT> --reboot

Проверка

meshtastic --port <PORT> --info

Убедиться что критичные параметры применились:

  • region — регион LoRa
  • fixedPin — PIN Bluetooth
  • adminKey — ключ удалённого администрирования
  • Channels — PRIMARY + все дополнительные каналы
  • external_notification — LED уведомления

Важные нюансы

  • Пауза между командами: после записи настроек устройство перезагружается. Ждать 15-20 секунд перед следующей командой, иначе Timed out waiting for connection
  • LED heartbeat: при восстановлении device.led_heartbeat_disabled должен быть true, иначе LED на GPIO 35 мигает постоянно (heartbeat совпадает с пином external_notification)
  • Порядок: сначала каналы (--seturl), потом остальные настройки — каналы меняют LoRa-частоту и вызывают перезагрузку
  • Проверка после восстановления: всегда проверять --info--configure может молча не применить часть настроек
  • Не использовать 2>&1 при экспорте — если устройство не отвечает, traceback Python перезапишет YAML-файл

PKC ключи после erase-flash

После erase-flash PKC ключи (privateKey, publicKey) генерируются заново. adminKey (ключ remote admin) нужно восстановить из бэкапа вручную. Старые DM-ключи теряются, но другие ноды обновят publicKey автоматически через следующий NodeInfo broadcast. Node ID (привязан к MAC) не меняется.

Экспорт через WiFi

--export-config может зависать как по USB, так и по WiFi (TCP). Надёжнее экспортировать через USB на маленьких NodeDB (<30 нод). При зависании — прервать и использовать --get для проверки отдельных параметров.

См. также