A real-time monitoring dashboard for Meshtastic mesh networks with advanced node tracking, message logging, and network visualization capabilities.
- Live Message Feed: Track all mesh network traffic including text messages, position updates, telemetry data
- Node Discovery: Automatically discovers and tracks all nodes in the mesh network
- Signal Strength Visualization: Color-coded signal bars for direct connections
- Hop Count Display: See how many hops each packet takes through the network
- Smart Sorting: Nodes sorted by connection type (direct first, then by hop count)
- Split View: Monitor messages and nodes side-by-side
- Messages View: Full message history with type-based filtering
- Nodes View: Detailed table with connection info, battery levels, positions
- Map View: Geographic visualization of GPS-enabled nodes
- Dark Theme: Cyberpunk-inspired UI with neon accents
- Proximity Sorting: Nodes sorted by physical distance (GPS-based)
- Connection Quality: RSSI and SNR tracking for direct connections
- Battery Monitoring: Track battery levels across the network
- Position Tracking: GPS coordinates with altitude data
- Routing Information: Hop counts and connection paths
- Split View: Messages and nodes displayed simultaneously
- Signal Strength: Visual bars showing connection quality (Red โ Yellow โ Green)
- Hop Count: Prominent badges showing "DIRECT", "1 HOP", "2 HOPS", etc.
- Python 3.11 or higher
- RAK4631 or compatible Meshtastic device
- USB connection to the device
- Clone the repository
git clone [repository-url]
cd meshtastic-server- Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies
pip install -r requirements.txt- Connect your Meshtastic device
- Plug in your RAK4631 or compatible device via USB
- The dashboard will auto-detect the device
# Start the monitoring dashboard
streamlit run dashboard.pyThe dashboard will be available at: http://localhost:8501
# Test device connection
python test_connection.py- View Mode: Switch between Split, Messages, Nodes, and Map views
- Auto Refresh: Toggle 5-second auto-refresh
- Message Filter: Filter by message type (text, position, telemetry, etc.)
- Send Message: Send text messages to the mesh network
- Statistics: View message counts and network stats
- ๐ก DIRECT: Direct connection with signal strength bar
โ๏ธ X HOPS: Multi-hop connection with hop count- Signal Bar: Visual indicator from red (weak) to green (strong)
- Battery: ๐ (>75%) to ๐ชซ (<25%)
- Position: ๐ indicates GPS-enabled node
- Enter message text in the sidebar
- Select channel (0-7)
- Click "Send" button
- Message will be broadcast to all nodes
- Backend: Python with FastAPI foundation
- Device Communication: Meshtastic Python library
- UI: Streamlit with custom CSS theming
- Database: In-memory store (PostgreSQL ready)
- Testing: Playwright for UI testing
meshtastic-server/
โโโ app/
โ โโโ device/ # Meshtastic device communication
โ โ โโโ connection.py # USB serial interface
โ โ โโโ service.py # Background monitoring service
โ โ โโโ message_store.py # Message and node storage
โ โโโ utils/ # Utility functions
โ โ โโโ error_handler.py # Centralized error handling
โ โโโ config.py # Configuration management
โโโ tests/ # Playwright UI tests
โโโ docs/ # Documentation
โ โโโ architecture.md # System design
โ โโโ ui-design.md # UI specifications
โโโ dashboard.py # Streamlit dashboard
โโโ test_connection.py # Connection test script
โโโ requirements.txt # Python dependencies
# Device Configuration
SERIAL_PORT= # Leave empty for auto-detect
DEVICE_BAUD=115200 # Serial baud rate
# Server Configuration
API_PORT=8000 # API server port
LOG_LEVEL=INFO # Logging level
# Service Configuration
SERVICE_CHANNEL=7 # Channel for service commands
COMMAND_PREFIX=! # Command prefix- Text Messages: Human-readable messages between nodes
- Position Updates: GPS coordinates and altitude
- Telemetry Data: Battery, temperature, humidity, pressure
- Node Info: Device metadata and capabilities
- Routing Info: Hop counts and signal strength
- Connection Type: Direct or multi-hop with hop count
- Signal Strength: RSSI in dBm for direct connections
- Signal-to-Noise Ratio: SNR for link quality
- Battery Level: Percentage remaining
- Position: Latitude, longitude, altitude
- Distance: Calculated distance from your node
# Run all tests
pytest tests/
# Run with browser visible
pytest tests/ --headed
# Run specific test
pytest tests/test_dashboard_simple.py- Dashboard loading and navigation
- View mode switching
- Message filtering
- Node sorting
- Signal strength visualization
- Auto-refresh functionality
- Message Handlers: Add to
app/device/connection.py - UI Components: Modify
dashboard.py - Data Storage: Update
app/device/message_store.py - Services: Extend
app/device/service.py
- PostgreSQL persistence
- REST API endpoints
- WebSocket real-time updates
- Command-based services framework
- Network graph visualization
- Message encryption status
- Advanced filtering and search
- Export functionality (CSV/JSON)
# Kill existing Streamlit processes
pkill -f "streamlit run dashboard.py"- Check USB connection
- Verify permissions:
sudo usermod -a -G dialout $USER - Try specifying port in .env:
SERIAL_PORT=/dev/ttyUSB0
- Dashboard continues in "demo mode" if device is unavailable
- Check that no other application is using the serial port
- Try unplugging and reconnecting the device
See RELEASE_NOTES.md for version history and changes.
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch
- Write tests for new features
- Update documentation
- Submit a pull request
MIT License - see LICENSE file for details
- Meshtastic project for the excellent mesh networking protocol
- Streamlit for the rapid dashboard development framework
- The ham radio and mesh networking community
For issues and questions:
- Open an issue on GitHub
- Check existing documentation in
/docs - Review test files for usage examples
Built with โค๏ธ for the Meshtastic community