Этот скрипт (meshtastic_monkey.py) представляет собой интерактивный терминальный клиент для Meshtastic, предназначенный для работы с радиоустройством (нодой), подключённым к Linux-ПК. Он позволяет отправлять и получать текстовые сообщения через mesh-сеть Meshtastic, отслеживать подтверждения доставки (ACK), автоматически отвечать на тестовые запросы и использовать удобные функции командной строки: автодополнение имён узлов, историю ввода, подсчёт длины сообщения.
Проект изначально создавался как вынужденная мера — когда использование портативного Meshtastic-устройства в зоне плохой радиосвязи невозможно, но есть возможность разместить ноду на возвышенности и управлять ею удалённо по SSH с другого компьютера. Это превращает стационарную ноду в «шлюз» или «ретранслятор» с удобным CLI-интерфейсом.
-
Основной поток ввода
Используетprompt_toolkitдля интерактивного ввода команд. Поддерживает:- Автодополнение имён узлов по Tab (
@NodeName) - Историю сообщений (
~/.meshtastic_history) - Отображение количества символов и байтов в реальном времени
- Автодополнение имён узлов по Tab (
-
Очередь отправки (
send_queue)
Все исходящие сообщения помещаются в очередь, чтобы не блокировать UI и избежать перегрузки радиоинтерфейса. -
Поток отправки (
sender_thread)
Обрабатывает очередь с задержкойSEND_DELAY = 1.5 секмежду сообщениями (для стабильности). При желании (wantAck=True) сохраняет ID пакета вpending_acksдля отслеживания подтверждений. -
Обработчик входящих сообщений (
on_receive)
Подписан черезpubsubна событияmeshtastic.receive. Различает:- Публичные сообщения (
PUB) - Приватные сообщения (
PM) - Подтверждения доставки (
ROUTING_APP→ ACK) - Автоматически отвечает на ключевые слова:
ping,test,тест,testa
- Публичные сообщения (
-
Наблюдатель за тайм-аутами (
ack_watcher)
Каждую секунду проверяет, не истекло ли время ожидания ACK (ACK_TIMEOUT = 30 сек). Если да — выводит предупреждение. -
Кэш имён узлов (
name_cache)
Кэширует короткие имена (shortName) узлов для быстрого отображения и разрешения псевдонимов.
-
Публичное сообщение: просто введите текст
Привет всем! -
Приватное сообщение: начните с
@ИмяУзла@ALFA Привет, как связь?
Имя может быть:
shortName(например,ALFA)- шестнадцатеричным ID (например,
!1234abcd)
Если имя не найдено — выводится ошибка.
Установите через pip:
pip install meshtastic prompt_toolkit pubsubИли используйте requirements.txt:
meshtastic>=2.5.0
prompt_toolkit>=3.0
pubsub>=0.1.2Убедитесь, что у вас установлены права на доступ к последовательному порту (обычно через группу
dialout).
- Подключите Meshtastic-устройство к Linux-ПК (по USB).
- Убедитесь, что устройство определяется (например, как
/dev/ttyACM0). - Запустите скрипт:
python3 meshtastic_monkey_0.8fl.py
- Работайте в терминале:
- Вводите сообщения
- Используйте Tab для автодополнения имён
- Наблюдайте за входящими сообщениями и ACK
- Для выхода: нажмите
Ctrl+C
💡 При использовании по SSH рекомендуется запускать скрипт внутри
tmuxилиscreen, чтобы сессия не прерывалась при разрыве соединения.
- Скрипт не требует GUI — идеален для headless-сервера на возвышенности.
- Благодаря задержке между отправками и очереди, он минимизирует риск перегрузки эфира.
- Автоматический ответ на
pingпомогает оперативно оценить качество канала. - Все метаданные (RSSI, SNR, hops) отображаются — полезно для диагностики.
Такой подход превращает обычную Meshtastic-ноду в удалённо управляемый ретранслятор с человеко-читаемым интерфейсом, что особенно ценно в полевых условиях или при развёртывании сети в труднодоступных районах.