interactive-sim
Скрипт Python interactiveSim.py использует нативное Linux-приложение Meshtastic для симуляции нескольких экземпляров программного обеспечения устройства. Эти экземпляры общаются через TCP с помощью скрипта, имитируя чип LoRa. Симулятор пересылает сообщения от отправителя всем узлам в пределах досягаемости на основе их симулированных позиций и выбранной модели затухания (см. Модель затухания). Примечание: Столкновения пакетов пока не симулируются.
Использование
- Клонируйте или скачайте репозиторий и перейдите в папку Meshtasticator.
- (Необязательно) Создайте виртуальную среду.
- Установите зависимости:
bash
pip install -r requirements.txt
Симулятор запускает нативное Linux-приложение прошивки Meshtastic. Вы можете использовать либо PlatformIO, либо Docker для запуска прошивки:
Использование PlatformIO
Выберите 'native' и нажмите 'build'. Найдите сгенерированный бинарный файл, вероятно, в firmware/.pio/build/native/.
Скопируйте файл program в директорию, где вы будете запускать скрипт Python, или укажите путь как аргумент с -p:
python3 interactiveSim.py 3 -p /home/User/Meshtastic-device/.pio/build/native/program
Использование Docker
Симулятор загружает Docker-образ, который собирает последнюю прошивку Meshtastic.
Убедитесь, что установлен Docker SDK для Python:
pip3 install docker
Убедитесь, что демон Docker или приложение Desktop запущено. Используйте аргумент -d для запуска симулятора:
python3 interactiveSim.py 3 -d
Запуск симулятора
Для запуска интерактивного симулятора:
python3 interactiveSim.py [nrNodes] [-p <full-path-to-program>]
nrNodes(необязательно): Количество экземпляров для запуска. Каждый экземпляр открывает терминал и TCP-порт (начиная с 4403).- Если вы укажете количество узлов, они будут размещены случайно; в противном случае вы можете вручную разместить узлы на графике.
- После размещения узлов вы можете настроить их роль,
hopLimit, высоту (эlevation) и коэффициент усиления антенны. Конфигурации сохраняются автоматически.

Команды во время симуляции
После запуска симуляции вы можете выдавать команды (или использовать предопределённый скрипт) для отправки сообщений между узлами. Используйте plot для визуализации маршрутов сообщений и статистики времени в эфире:
- Введите ID сообщения, чтобы увидеть его маршрут.
- Наведите курсор на дуги для получения информации и кликните, чтобы удалить наложение.
- Два графика отображают использование канала (окно в одну минуту) и использование времени в эфире (окно в час) для каждого узла.

Список команд
broadcast <fromNode> <txt>: Отправить широковещательное сообщение от узла fromNode с текстом txt.DM <fromNode> <toNode> <txt>: Отправить прямое сообщение от узла fromNode узлу toNode с текстом txt.traceroute <fromNode> <toNode>: Отправить запрос traceroute от узла fromNode узлу toNode.reqPos <fromNode> <toNode>: Отправить запрос позиции от узла fromNode узлу toNode.ping <fromNode> <toNode>: Отправить пинг от узла fromNode узлу toNode.remove <id>: Удалить узел id из текущей симуляции.nodes <id0> [id1, etc.]: Показать список узлов, видимый узлом(ами) id0, id1 и т.д.plot: Построить маршруты отправленных сообщений и статистику времени в эфире.exit: Выйти из симулятора без построения маршрутов.
Использование со скриптом
Измените секцию try в interactiveSim.py, чтобы предопределить сообщения. Запустите симулятор с аргументом -s:
python3 interactiveSim.py 3 -s
- После обмена NodeInfo узлами они начнут отправлять сообщения.
- Закройте симуляцию вручную с помощью
Ctrl+Cили дождитесь тайм-аута.
Советы и хитрости
-
Ускорение обмена NodeInfo:
Отключите определённые модули, удаливnew NodeInfoModule()изsrc/modules/Modules.cppв прошивке. -
Сохранение и перезагрузка конфигураций:
После симуляции конфигурации узлов сохраняются. Вы можете перезапустить тот же сценарий с помощью:
bash
python3 interactiveSim.py --from-file
Измените файл out/nodeConfig.yaml, чтобы скорректировать конфигурации перед перезагрузкой.
- Использование Python CLI:
Вы можете вызывать функции из класса Node черезsim.getNodeById(<id>)вinteractiveSim.py. Пример:
python
node.setURL('<YOUR_URL>')
Модель затухания
Симулятор оценивает распространение сигнала с использованием модели затухания. Это приближение физической среды, поэтому оно может быть не на 100% точным. Доступные модели:
- 0: Модель логарифмического расстояния
- 1: Модель Окумура-Хата (малые/средние города)
- 2: Модель Окумура-Хата (метрополитены)
- 3: Модель Окумура-Хата (пригородные районы)
- 4: Модель Окумура-Хата (сельские районы)
- 5: Модель 3GPP (пригородная макроячейка)
- 6: Модель 3GPP (метрополитеновая макроячейка)
Вы можете изменить модель затухания и конфигурацию области в lib/config.py. Настройки LoRa остаются по умолчанию Meshtastic, если не изменены во время размещения узлов.