Skip to content
suinlyPublic

About

Симулятор Mesh-сетей

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Симулятор Mesh-сети

Интерактивный симулятор mesh-сети, визуализирующий принципы работы mesh-networking с реалистичной моделью распространения радиосигнала.

🌐 Попробуйте онлайн-демо

Возможности

  • 🗺️ Интерактивная карта - добавляйте узлы кликом по карте
  • 📡 Реалистичная симуляция - распространение пакетов с учетом SNR (Signal-to-Noise Ratio)
  • 🔄 Автоматическая ретрансляция - узлы автоматически переотправляют пакеты
  • 🚫 Обнаружение коллизий - реализация CSMA (Carrier Sense Multiple Access)
  • 📊 Визуальная индикация - анимация передачи и приема пакетов
  • 🎯 Drag & Drop - перемещайте узлы для изменения топологии сети
  • 📈 Статистика в реальном времени - покрытие сети, среднее количество хопов
  • 📝 Панель логов - детальная информация о всех событиях симуляции
  • ⚙️ Настройки симуляции - регулируйте hop limit и выбирайте типы узлов
  • ⚙️ Настройка узлов - изменяйте мощность передатчика, высоту и лимит прыжков через контекстное меню
  • 📱 Мобильная поддержка - долгое нажатие на узел для открытия меню на смартфонах
  • 🪟 Многооконный интерфейс - перетаскиваемые информационные окна с управлением слоями

Как работает

Симулятор реализует следующие механизмы mesh-networking:

1. Carrier Sense Multiple Access (CSMA)

Узлы проверяют, не занят ли канал перед передачей (Channel Activity Detection). Если канал занят, передача откладывается со случайной задержкой (backoff), после чего выполняется повторная попытка (до 5 попыток).

2. SNR-based Reception

Вероятность успешного приема пакета зависит от отношения сигнал/шум:

  • SNR > -7 dB: высокая вероятность приема (~98%)
  • SNR ~ -11 dB: 50% вероятность
  • SNR < -15 dB: низкая вероятность (~2%)

3. Path Loss Model

Уровень сигнала уменьшается с расстоянием по логарифмической модели:

  • Влияние мощности на дальность: базовая дальность 600м на уровне земли при 20 дБм, рассчитывается по формуле Friis Range = 600м × 10^((Power - 20дБм) / 20)
    • При мощности 20 дБм (на земле): 600 м
    • При мощности 10 дБм (на земле): ~190 м
    • При мощности 30 дБм (на земле): ~1.9 км
  • Влияние высоты на дальность: линейная модель от 600м до 50км
    • На высоте 0м: 600м (первые этажи)
    • На высоте 20м: ~5.5 км (7-этажка)
    • На высоте 50м: ~13 км (высотка)
    • На высоте 100м: ~25 км (вышка)
    • На высоте 200м: 50 км (максимум)
    • Каждый метр высоты добавляет ~247 метров дальности
  • Влияние высоты на затухание: средняя высота двух узлов снижает path loss exponent от 2.5 (земля) до 2.0 (высота 200м)
    • Чем выше узлы, тем меньше влияние застройки на качество сигнала
  • Влияние мощности на SNR: каждый дБм мощности добавляет 1 дБ к максимальному SNR
  • Модель затухания: PL(d) = 10 * n * log10(d/d0) где n зависит от высоты (2.0-2.5)
  • Случайный фединг: ±2 dB (log-normal shadowing)
  • Диапазон SNR: от +15 dB (1 метр) до -10 dB (максимальная дальность) при базовой мощности 20 дБм

4. Hop Limiting

Пакеты имеют ограничение на количество переходов (по умолчанию 3 хопа), чтобы предотвратить бесконечное распространение.

5. Duplicate Suppression

Узлы отслеживают уже полученные пакеты и подавляют повторную ретрансляцию дубликатов:

  • ClientNode: проверяет, слышал ли пакет повторно от других узлов
  • RouterNode: проверяет, передавал ли уже этот пакет ранее
  • Это предотвращает бесконечные циклы и снижает загрузку сети

6. Умная стратегия ретрансляции

Узлы с худшим SNR (дальше от источника) ретранслируют раньше, узлы с лучшим SNR (ближе) ждут дольше. Это вдохновлено протоколом Meshtastic.

Примечание: Алгоритм симуляции не полностью соответствует протоколу Meshtastic, но стремится к реалистичному моделированию основных принципов mesh-networking.

7. Типы узлов

Симулятор поддерживает три типа узлов с разным поведением:

  • ClientNode (по умолчанию):

    • Задержка ретрансляции зависит от SNR (0-2000 мс)
    • Не ретранслирует повторно услышанные пакеты
    • Уменьшает hopLimit при каждой ретрансляции
  • RouterNode:

    • Мгновенная ретрансляция (0 мс задержка)
    • Не ретранслирует уже переданные пакеты
    • Особая логика hopLimit: не уменьшает счетчик для пакетов от "избранных" узлов
  • ClientMuteNode:

    • Только принимает пакеты, никогда не ретранслирует
    • Используется для моделирования конечных устройств без mesh-функционала

Технологии

  • Nuxt 4 - фреймворк для Vue.js
  • TypeScript - типизация
  • Nuxt UI - компоненты интерфейса + Tailwind CSS v4
  • Leaflet - интерактивная карта

Установка

npm install

Разработка

Запуск dev-сервера:

npm run dev

Приложение будет доступно по адресу http://localhost:3000

Использование

Основные действия

  1. Добавление узлов:

    • Нажмите кнопку с иконкой + (режим добавления)
    • Выберите тип узла: CLIENT (оранжевый), CLIENT_MUTE (синий) или ROUTER (красный)
    • Кликните на карте в нужном месте
  2. Перемещение узлов:

    • Включите режим просмотра (иконка руки)
    • Перетаскивайте маркеры на карте
  3. Передача пакета:

    • Кликните левой кнопкой мыши по любому узлу для начала передачи пакета от него
    • Или используйте кнопку "Передать пакет" в контекстном меню узла
  4. Открытие меню узла:

    • На компьютере: клик правой кнопкой мыши по узлу
    • На смартфоне: долгое нажатие на узел (500 мс)
  5. Управление окнами контекстного меню:

    • Перетаскивайте окна за заголовок с иконкой ⋮⋮
    • Клик по окну выдвигает его на передний план
    • Повторный клик на узел с открытым окном подсвечивает окно
  6. Настройка узла (через контекстное меню):

    • Лимит прыжков: от 1 до 7 (по умолчанию 3)
    • Мощность: от 1 до 30 дБм (по умолчанию 20 дБм)
    • Высота: от 0 до 200 метров (по умолчанию 0м)
    • Дальность передачи обновляется в реальном времени при изменении мощности или высоты
    • Просмотр статистики: количество переданных и принятых пакетов
    • Удаление узла кнопкой с иконкой корзины
  7. Глобальные настройки (в боковой панели):

    • Hop Limit: количество разрешенных ретрансляций (по умолчанию 3)
    • Тип узла по умолчанию: выбирается при добавлении узлов
  8. Просмотр логов:

    • Нажмите "Показать панель логов" в левом нижнем углу
    • Следите за событиями передачи, приема, коллизий и потерь пакетов в реальном времени
  9. Статистика сети:

    • В правой панели отображается:
      • Номер последнего отправленного пакета
      • Количество узлов, получивших пакет
      • Процент покрытия сети

Визуальные эффекты

  • Передача пакета: от узла расходится большой круг, визуализирующий распространение радиосигнала
  • Прием пакета: вокруг узла появляется небольшой круг, быстро исчезающий - индикация успешного приема
  • Цветовая кодировка узлов:
    • 🟠 Оранжевый - CLIENT (клиентский узел с ретрансляцией)
    • 🔵 Синий - CLIENT_MUTE (только прием, без ретрансляции)
    • 🔴 Красный - ROUTER (маршрутизатор с быстрой ретрансляцией)

Логирование событий

Симулятор использует централизованную систему логирования, которая выводит события в панель логов (в нижней части экрана) и в консоль браузера:

  • Передача пакетов: информация о попытках передачи и успешных отправках
  • Прием пакетов: детали о полученных пакетах с SNR и количеством хопов
  • Потери пакетов: уведомления о потерянных пакетах из-за низкого SNR
  • CAD операции: информация о проверках занятости канала и повторных попытках
  • Ретрансляция: запланированные и выполненные ретрансляции с задержками
  • Дубликаты: обнаружение и подавление повторных передач

Все сообщения логов включают:

  • Тип события (info/warning/error)
  • Текст сообщения
  • Информацию об узле (ID, роль, состояние)
  • Временную метку

Остальные команды

# Проверка типов
npm run typecheck

# Линтер
npm run lint

# Сборка для production (SSR режим)
npm run build

# Генерация статического сайта (для GitHub Pages)
npm run generate

# Просмотр production сборки
npm run preview

Деплой на GitHub Pages

Проект настроен для автоматического деплоя на GitHub Pages через GitHub Actions.

Настройка

  1. Запушьте код в репозиторий на GitHub
  2. Перейдите в Settings → Pages
  3. В разделе "Build and deployment" выберите:
    • Source: GitHub Actions
  4. После пуша в ветку main автоматически запустится workflow деплоя

Приложение будет доступно по адресу: https://<username>.github.io/<repository-name>/

Ручной запуск

Деплой можно запустить вручную:

  1. Перейдите в Actions → Deploy to GitHub Pages
  2. Нажмите "Run workflow"

Локальная настройка baseURL

Для локальной разработки с кастомным baseURL:

NUXT_APP_BASE_URL=/my-custom-path/ npm run dev

Сообщество

Присоединяйтесь к Telegram-группе для:

  • Обсуждения симулятора и mesh-сетей
  • Обмена опытом моделирования
  • Вопросов по проекту
  • Участия в развитии проекта

Нашли баг или несоответствие? Создайте issue на GitHub - любая обратная связь приветствуется!

Лицензия

MIT

About

Симулятор Mesh-сетей

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages