Skip to content

Latest commit

 

History

History
290 lines (199 loc) · 7.84 KB

File metadata and controls

290 lines (199 loc) · 7.84 KB

📡 MeshRadar

Modern web interface for Meshtastic mesh network management

English Русский

hero

Python React FastAPI License

📥 Download Latest Release for Windows

Download MeshRadar

FeaturesQuick StartAPITechnologies


📸 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