Skip to content

Modern web interface for Meshtastic mesh network nodes. Supports Serial/TCP connection, real-time messaging, channels, DM, traceroute, telemetry.

License

Notifications You must be signed in to change notification settings

curlysasha/MeshRadar

Repository files navigation

πŸ“‘ MeshRadar

Modern web interface for Meshtastic mesh network management

English Русский

hero

Python React FastAPI License

πŸ“₯ Download Latest Release for Windows

Download MeshRadar

Features β€’ Quick Start β€’ API β€’ Technologies


πŸ“Έ Interface

interface

Traceroute Visualization

traceroute


✨ Features

Feature Description
πŸ”Œ Connection Serial (USB), TCP (WiFi), and BLE (Bluetooth) to Meshtastic nodes
πŸ’¬ Chat Channels and direct messages with delivery confirmation (βœ“ βœ“βœ“)
πŸ“Š Node List All mesh nodes with telemetry (battery, SNR, position)
πŸ—ΊοΈ Network Map Interactive map visualization of all nodes
πŸ›€οΈ Traceroute Message route visualization between nodes
πŸ’Ύ History Messages stored in SQLite database
⚑ Real-time WebSocket for instant updates
🌍 Multilingual Russian and English with switcher

πŸš€ Quick Start

Requirements

  • Python 3.10+
  • Node.js 18+
  • Meshtastic node (optional for UI testing)

Backend

cd backend
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt
python main.py

Backend will start at http://localhost:8000

Frontend

cd frontend
npm install
npm run dev

Frontend will start at http://localhost:5173


πŸ“¦ Portable Version

To build a standalone .exe file:

# Run in project root
build.bat

Output file: dist/MeshRadar.exe


🐳 Docker Deployment

For complete Docker setup and configuration guide, see DOCKER.md

Quick start:

docker-compose up -d

Then open http://localhost:5173 and connect to your Meshtastic device through the UI.

Note: USB connection is optional. By default, Docker runs without USB device mapping. To enable USB, uncomment the devices section in docker-compose.yml.


πŸ”Œ API

REST Endpoints

Method Endpoint Description
POST /api/connect Connect to node
POST /api/disconnect Disconnect
GET /api/status Connection status
GET /api/ble-scan Scan BLE devices
GET /api/nodes List of nodes
GET /api/node/{id} Node information
GET /api/channels List of channels
POST /api/message Send message
POST /api/traceroute/{id} Traceroute to node
GET /api/messages Message history

WebSocket Events

// Connection
ws://localhost:8000/ws

// Events (server β†’ client)
{ type: "connection_status", data: { connected: boolean, ... } }
{ type: "message", data: { sender, text, channel, ... } }
{ type: "ack", data: { packet_id, status: "ack"|"nak" } }
{ type: "node_update", data: { id, user, position, ... } }
{ type: "traceroute", data: { route: [...], snr_towards: [...] } }
πŸ“ API Usage Examples

TCP Connection:

curl -X POST http://localhost:8000/api/connect \
  -H "Content-Type: application/json" \
  -d '{"type": "tcp", "address": "192.168.1.100:4403"}'

Serial Connection:

curl -X POST http://localhost:8000/api/connect \
  -H "Content-Type: application/json" \
  -d '{"type": "serial", "address": "/dev/ttyUSB0"}'

BLE Connection (scan first):

# Scan for available BLE devices
curl http://localhost:8000/api/ble-scan

# Connect to BLE device
curl -X POST http://localhost:8000/api/connect \
  -H "Content-Type: application/json" \
  -d '{"type": "ble", "address": "F4:12:FA:D0:45:AB"}'

Note: BLE scanning may not work with all firmware versions. Known working versions: up to v2.7.14. If you experience issues with BLE scanning on firmware v2.7.15 or newer, consider downgrading to v2.7.14.

Send Message:

curl -X POST http://localhost:8000/api/message \
  -H "Content-Type: application/json" \
  -d '{"text": "Hello mesh!", "channel_index": 0}'

πŸ›  Technologies

Backend

  • FastAPI β€” async web framework
  • meshtastic β€” Python library
  • aiosqlite β€” async SQLite
  • websockets β€” real-time

Frontend

  • React 18 + TypeScript
  • Tailwind CSS β€” styling
  • Zustand β€” state management
  • Radix UI β€” accessible components

πŸ“ Project Structure

meshradar/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ main.py              # FastAPI application
β”‚   β”œβ”€β”€ meshtastic_manager.py # Connection management
β”‚   β”œβ”€β”€ websocket_manager.py  # WebSocket broadcast
β”‚   β”œβ”€β”€ database.py          # SQLite operations
β”‚   └── schemas.py           # Pydantic models
β”‚
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/      # React components
β”‚   β”‚   β”œβ”€β”€ hooks/           # React hooks
β”‚   β”‚   β”œβ”€β”€ store/           # Zustand state
β”‚   β”‚   └── locales/         # i18n translations
β”‚   └── package.json
β”‚
└── assets/                  # README images

πŸ‘¨β€πŸ’» Development

# Backend with hot-reload
cd backend && uvicorn main:app --reload

# Frontend with hot-reload
cd frontend && npm run dev

# Production build
cd frontend && npm run build

πŸ“„ License

GPLv3 + Commons Clause Β© 2024

This project is licensed under GPLv3 with Commons Clause - see the LICENSE file for details.

Note: The Commons Clause means you can use, modify, and distribute this software freely, but you cannot sell it or offer it as a paid service.


πŸ’ Support the Project

If you find MeshRadar useful, please consider supporting its development:

Ko-fi Boosty

Crypto donations:

  • USDT TRC20: TL2rEf6iNzhC9Mb2grm6S5iq5JrMxYDEZG
  • USDT TON: UQDyYPHzm6tb4KbpLIMo-KEWC2PmPHnU2Zj4tndLg9O70-w8

Made with ❀️ for Meshtastic community

About

Modern web interface for Meshtastic mesh network nodes. Supports Serial/TCP connection, real-time messaging, channels, DM, traceroute, telemetry.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5